-
[산대특] 리눅스의 명령어의 바다 탐색[산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정/Linux 2024. 8. 25. 21:39
0823
|(pipe, vertical bar) 명령어를 연결시켜주는 tr 문자열을 변경해주는 ShellScrpt 에서는 || 는 OR 의 의미, && 는 AND 의 의미
| grep 은 특별히 Filtering 해주는 기능
| more/less 는 긴 문장을 한 페이지 씩 갈무리 해서 볼 수 있음
grep, more, less 도 파일을 읽을 수 있다.
더보기실습!
[root@centos7-10-1 centos]# dmesg
시스템에서 발생하는 메세지
너무 많으면
[root@centos7-10-1 centos]# dmesg | more/less
이렇게
more 를 쓰면 한페이지씩 볼 수 있고, less 는 vi 화면으로 볼 수 있다.
[root@centos7-10-1 centos]# cat -n /etc/passwd | grep "root"[root@centos7-10-1 centos]# more /etc/passwd
[root@centos7-10-1 centos]# less /etc/passwd
이렇게 가능하다[root@centos7-10-1 centos]# cat -n /etc/passwd | tr 'root' 'ROOT' | grep 'ROOT'
줄번호로 쫙 보이고 | 그 중에서 root 를 ROOT 로 바꾸고 | ROOT 있는 줄말 보여단어? 문장?를 바꾸려면 substring 을 써야 한다. (좀이따!)
-i 는 대소문자 구분하지 않는다.
이렇게 해도 똑같이 나온다.
wc wordcount
파일의 문자수(c), 단어 수(w), 줄의 수(l) 등을 보인다.
더보기실습
[root@centos7-10-1 centos]# wc input.txt
4 9 52 input.txt
순서대로 줄수, 단어수, 문자수
root 가 두번 나온다.
stat
파일에 대한 Access, Modify, Change 등을 보인다.
이걸로 중요한 파일 등에 대해서 수정, 접근 기록 을 잘 봐야한다.
더보기실습
context 는 해당 파일에 대한 보안 설정을 뜻한다.
수정 변경 등 정보를 볼 수 있다.
[root@centos7-10-1 centos]# adduser paul
[root@centos7-10-1 centos]# passwd paul
Changing password for user paul.
New password: paul
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: paul
passwd: all authentication tokens updated successfully.
사용자를 만들면
이 두 파일에 영향을 미친다. 기록된다.
파일을 열지 않아도 작업을 통해 stat 에 기록이 된다.
아까와 달리 날짜가 바뀌었다.
어느 파일이나 명령어의 위치를 알려주는 which, whereis, locate
더보기실습
locate ssh
find 할 때 저게 나올 떄가 많은대 그럴때 저렇게 umount 시키면
잘 나온다.
echo 값을 읽거나 화면에 띄운다.
더보기실습
[root@centos7-10-1 centos]# echo "IM Tired this morning" > cet.txt
[root@centos7-10-1 centos]# cat cet.txt
IM Tired this morning
[root@centos7-10-1 centos]# echo $HOSTNAME
centos7-10-1
[root@centos7-10-1 centos]# echo "1" > /proc/sys/net/ipv4/ip_forward
저기 /proc 파일은 가상파일 시스템이다.
이 파일은
MitM
Man in the middle 공격에서 많이 사용하는
A 와 B 사이에 가운데에 ip_forward = 1 을 집어넣으면 패킷을 보고 지나치게 해준다.
MitM => session hijacking
제대로 이해 못함
나중에 실습
웹에서 파일을 다운로드/복사 해오는 명령어
wget, git, curl, lftp, lftpget
lftp 는 다운로드가 실패했을 때 에러를 예외처리해서 다시 받아주고 2GB 이상의 대용량 파일도 다운받아주며 방화벽이 있어도 우회해서 받게 해준다.
더보기실습
Download 링크를 카피
이런식으로 다운로드가 가능하고,
[root@centos7-10-1 centos]# wget -c ftp://ftp.gnu.org/pub/gnu/wget/wget-latest.tar.gz
요런 방법도 있다.
-c 는 continue 라는 뜻. 중간에 잘 안되도 멈추지 말고 이어하라
curl 도 있다.
[root@centos7-10-1 centos]# curl -O abc.git https://github.com/docker/docker.git > abc.git
이런식으로도 가능하다.
[root@centos7-10-1 centos]# git clone https://github.com/docker/docker.git
이렇게도 가능하다.
형상서버(Configuration Managemnet Server)
늘 업데이트 되는 웹상의 저장소를 로컬에 옮겨놓은 개념
FTP 서버는
파일을 업/다운로드 하게 해주고, 로그인 업시 사용 가능하다.
나만 알고 나만 연결 = active-mode, 주는대로 받는것이 passive-mode
더보기lftp 실습
[root@centos7-10-1 docker]# yum -y install lftp
[root@centos7-10-1 docker]# nano /etc/lftp.conf
맨 아래에 추가
10240000 가 10메가
:0 은 업로드. 0은 무한
다운로드는 10메가씩 업로드는 무한
[root@centos7-10-1 docker]# lftp -c "set ftp:passive-mode on;set net:max-retries 3;set net:timeout 5;mget -c ftp://ftp.intel.com/readme.txt"
-c 컨티뉴
ftp 는 무료이다. 무료이며 사용자를 지정하지 않는 것을 anonymous
로그인 시도 최대 3번
passive mode 이다 너가 포트 주면 받을 게
5분동안 내가 로긘 안하면 날 차…! 내가 차일게..
multiful get 여러 파일 왕창
더보기실습 실시간 로그
[root@centos7-10-1 docker]# tail -f /var/log/secure | cat -n
우분투에서 센토스로 뭔갈 하면
ssh 연결으로 처음엔 연결 성공
끊고 다시 연결 하는데 비번을 일부러 몇번 틀린 뒤 로긘 root 로긘 해서 다시
센토스에서 로그 확인하면 늘어나 있다!
다른 터미널에서 로그인 해도 로그가 뜬다.
더보기head/tail 과 tee 실습
실습
내용을 보면서 하고 싶다.
tee 는 화면에 보이면서 동시에 저장해라 .
내가 집어넣은 명령이 저장된다.
ls 하면
물론 nano typescript 해서 편집도 가능하다.
mail, mutt, mailx
콘솔에서 직접 메일을 보낼 수 있다.
이들을 실행하려면 사전에 시스템에 텍스트 화면에서 메일을 주고 받을 수 있는
MX(Mail Exchange) 서버 프로그램 sendmail 이 설치되고 실행되고 있어야 한다.
더보기메일 실습
[root@centos7-10-1 docker]# yum -y install sendmail
[root@centos7-10-1 docker]# yum -y install mutt
-s 주제/제목
reach 는 멋진 단어.
history 팁!
!! 명령어는 마지막으로 실행한 명령어를 반복해서 실행
!$ 명령어는 이전 명령어의 마지막 인수를 참조하는 단축키
cmp, comm, diff 파일 비교 명령어
cmp 는 두 개의 파일에서 차이가 있는 곳을 표시. compare(비교하다)
comm 은 공통적인 부분
diff 는 두 파일의 차이나는 곳을 정확히 보인다. <= patch 파일 생성 시 사용한다.더보기실습
실습 cmp
한줄로 되어 있어서..
공통적인 것을 맨 오른쪽에 보이고
첫번째 파일에서 유일한 것인 맨 왼쪽
두번째 파일에서 유일한 것이 중간
split 파일 분할
유용하게 쓰인다!!!
split A B 하면 A 를 분할한다.
옵션으론 -b (바이트 단위), -l (줄 단위) 분할이 있다.
더보기실습 파일분할
22바이트씩 잘라서 저장을 하는데 PASS~, PASS~ 로 저장되어라.
졸라 많다..>!
옵션을 줘서 줄수로 자를 수도 있다.
sort
오름차순 혹은 내림차순 (-r) 으로 파일 내용을 정렬할 수 있다.
더보기실습 sort
하면 abcd 순서대로 나온다.
sort -r 하면 반대로 나온다.
자주 쓰는 정규표현식
정규표현식 매우 중요!!
{ } { }의 어느 문자와 매치되면 실행함 <={Aa} \ \뒤의 것이 특수문자인 것을 표시함 <= \( | | 앞의 실행결과를 | 뒤의 입력으로 함 & 백그라운드로 실행함 !숫자 history에서 해당 숫자의 명령어를 실행함 * 임의의 여러 문자 ? 임의의 한 문자 [ ] [ ] 범위에 매치되는 문자 <=[a-z] > > 앞의 실행결과를 > 뒤의 입력으로 함 >! > 앞의 실행결과를 > 뒤로 강제 입력함 < < 뒤의 실행결과를 < 앞의 입력으로 함 >>, << >> 앞의 실행결과를 >> 뒤로 추가함 2> /dev/null 표준 에러를 콘솔에 표시 안 함 2>& 1 표준 에러를 표준 출력으로 보냄 2>& /dev/null 표준 에러를 파일이나 장치로 보냄 A>& B A 파일의 출력을 B 파일의 입력으로 써줌 A<& B B 파일을 읽어서 A 파일의 출력으로 써줌 0> A STDIN : 키보드 입력 1> A STDOUT : 화면 출력 2> A STDERR : 화면 에러 더보기정규표현식 실습
{} 한번에 만들 수 있는 명령어
document, docdraft
fallreport winterreport sprintreport
정규표현식을 사용하여 검색할 수 있는 명령어
-> grep, fgrep(grep -F), egrep(grep -E)와 pgrep
[aeiou] a, e, i, o, u 중 어느 문자라도 들어있는 것 [a-z] a부터 z 사이의 문자가 들어있는 것. 알파벳 소문자 [a-z][A-Z] a부터 z 사이와 A부터 Z 사이의 문자가 들어있는 것. 알파벳 대소문자 [0-9] 0부터 9 사이의 숫자가 들어있는 것 ^[ ], [^ ] ^[ ]는 [ ] 내용으로 시작됨, [^ ]는 [ ] 내용의 부정 <= ^[^#$] ^pattern 주어진 패턴으로 시작되는 줄 <= ^# pattern$ 주어진 패턴으로 끝나는 줄. 단독으로 $를 쓰면 빈 줄 <= #$ ^[a-z][0-9]$ 시작은 a부터 z 사이의 문자, 끝은 0부터 9사이의 숫자인 줄 [.], [...] .는 임의의 문자 1개, ...는 임의의 문자 3개 <= [a...z] cf. a???e pattern+ 이전 패턴과 하나 이상으로 매치되는 어구 <= root+ pattern* 이전 패턴과 매치되지 않는 어구 <= root* pattern? 이전 패턴과 하나만 매치되는 어구 <= root? (abc)+ 'abc' 패턴과 하나 이상으로 매치되는 줄. +는 적어도 하나 이상을 의미
()는 여러 정규 표현식을 하나로 묶기도 한다v 부정의 의미 <= v #는 #이 없는 줄을 보임 c 갯수를 표시 <= c #는 #이 있는 줄의 갯수 | 두 개의 정규 표현식에서 OR 의미 {n}, {n,m} 지정된 정규 표현식에 n번 일치, 최소 n에서 최대 m번 일치 [: ~ :] 클래스
[:alnum:] alnum은 영문이나 숫자와 일치
[:alpha:] alpha는 영문자와 일치
[:digit:] digit는 숫자와 일치
[:punt:] punt는 구두점(, . )과 일치grep : filtering 역할
grep 의 옵션
v / c v는 일치되는 내용이 없는 줄, c는 일치되는 내용이 있는 줄 개수 표시 n 일치되는 내용을 줄 번호와 함께 표시 i 대소문자를 구별하지 않고 해당되는 내용이 있는 줄 표시 e 정규표현식 사용 f 찾으려는 문장이나 표현이 있는 파일지정 l / w l은 패턴이 포함된 줄(line), w는 패턴이 포함된 단어 표시(word) r 반복적으로 찾음 등이 있다. => [a-e]는 {abcde}로써 a,b,c,d,e 중 하나, [ak] a나 k 중 하나a나 k 중 하나a나 k 중 하나a나 k 중 하나 ^a a로 시작 a$ 로 끝남 v # #이 없는 줄 보임 c # #이 있는 줄의 갯수 ls doc[A-E] A, B, C, D, E 중 일치되는 것 모두 ls doc[AE] A나 E 중 일치되는 것 모두 ls doc{A..E} A로 시작 E로 끝나는 총 4자리 것 ls doc{AE} docA나 docE로 된 것 =>^pass : pass 라는 단어로 시작되는 모든 줄 ^# #으로 시작되는 줄 ^$ 모든 빈 줄 #$ #으로 끝나는 줄 d...(...이 세 개) d로 시작되는 총 네 자리 문자(d???) [a-d]* a에서 d까지 a,b,c,d 중 하나로 시작되는 문자열 [Dd]atabase D나 d로 시작되는 database라는 단어 [^D] D라는 문자로 시작되지 않는 줄 c...d(...이 세 개) c로 시작되고 d로 끝나는 총 5자리 문자(c???d) 등이 있다 더보기정규표현식 패턴 검색 실습
줄의 개수를 보인다.
-v 는 부정 ~ 빼고
48 - 2 하면 46
주석이 있는 줄 보기
httpd 설정 파일에 주석이 많다!
#으로 시작하는거 빼고 grep 해라
첫줄이 #인건 다 빠짐. 얘네는 들여쓰기 되어 있어서 나온다.
#으로 시작되지 않는 애들 중에서 빈 줄도 빼고 보여라
=> 몇 칸 들여쓰기던 #으로 시작하는 애들이 아닌
=> . 이 한 칸이니까. 세 칸
이러면 첫번째 꺼가 안 빠져서
=> # 붙은 애들은 다 빠진다.
붙이면 기호를 못 알아 먹는다.
한 칸을 띄어야 # 앞에 몇개가 있던. ^ 그것으로 시작하는. 이렇게 해야 의미전달이 된다.
이렇게 하면 #으로 시작하는 애들 빈줄인 애들 다 없어진다.
이렇게 하면 파일로 저장 된다.
r 이나 o 나 t 가 아닌거
rot 아닌걸로 시작되는 것.
r o t 로 시작되는 걸 빼고
r o t 아닌 것만
r 이나 o 나 t 로 시작되는 애
[^#$]는 # 또는 $로 시작하지 않는 줄을 의미
^는 부정(not)을 의미
#나 $가 아닌 문자를 찾는다는 의미
첫 번째
grep -v 명령어는 주석(#)으로 시작하는 라인과 공백 뒤에 #가 있는 라인을 제외합니다.
두 번째
grep 명령어는 이 출력 중에서 # 또는 $로 시작하지 않는 라인만을 필터링합니다.
egrep: 확장 정규 표현식을 사용하여 파일 내용을 검색하는 명령어입니다.
-v: 반전(inverse) 옵션으로, 주어진 정규 표현식과 일치하지 않는 줄만 출력합니다.
'^[[:space:]](#.)?$': 정규 표현식의 의미는 다음과 같습니다.
^: 문자열의 시작을 의미합니다.
[[:space:]]*: 공백 문자(스페이스, 탭 등)가 0개 이상 반복되는 것을 의미합니다.
(#.*)? : '#' 문자로 시작하는 주석이 있거나 없는 경우를 의미합니다.
$: 문자열의 끝을 의미합니다.
전체적으로 이 정규 표현식은 "공백으로만 이루어진 줄" 또는 " '#' 문자로 시작하는 주석 줄"을 나타냅니다.
변경 시켜주는 명령어 tr
tr 옵션 set1 set2’ 해서 set1을 set2로 변경해주는 tr에
[: :] 클래스를 사용하면 더욱 편리하게 작업할 수 있다.
더보기tr 실습
위 아래 같다
의도한대로 안되기도 한다.
소문자를 대문자로 바꿔라
-d 빼라 숫자를
빼라 문자를
다빼서 암것두 안나온다.
큰 파일 만질때 굉장히 유용한 명령어들이다.
주석 지우기, 문자 지우기, 숫자 지우기, 문자 숫자 지우기, 소문자 대문자로 바꾸기, 대문자 소문자로 바꾸기.
echo "this is for testing" | tr [:space:] '\t' | xargs
cut : 쓸모가 많고 필요한 부분을 추출하는 명령어
==> BigData 분석에서 여러 항복들이 있는데 그 중에서 분석에 필요한 항목들만 추출한다면 이 기법이 좋다. <=Data PreProcessing(데이터 전처리) 과정의 일부이다.
-d : delimiter, separator 로 Tab, Space, , , :, #, ; 등
-f : 어느 열(column)을 보일지 지정
cut -d “:” -f1,7 /etc/passwd 식으로 한다.
더보기실습
빅데이터 분석에서 많이 쓴다. 빅데이터에서 데이터 갈무리를 할 때 많이 사용한다.
: 를 기준으로 나눠서 첫번째 6번째 7번째 항목만 뽑아서 ~~
awk
cut 과 유사하나 -F 로 필드(column) 지정, -f 로 파일 지정 사용가능.
awk -F “:” ‘{print $1,$7}’ /etc/passwd
이 도구는 다른 프로그래밍 도구와 연계가 잘 된다.
더보기실습
**************** 중요
sed 파일을 편집해서 보이는 명령어
'sed [option] 명령어 파일_명'
여러 옵션과 복잡한 구문을 가지고 있지만 잘 사용하면 정말 강력한 편집기
더보기실습
2번째 줄만 보인다.
p 는 줄?이래 맞나 이따 정리할때 확인
원본을 바꾸지 않겠다. sed -e
원본을 읽겠다. see -n
원본을 바꾸지 안고 보겠다. 첫번째 줄 다음에 e 를 넣겠다.
$ 맨 뒤에 z 추가(a)
i == insert
a == add
첫번째 줄에 f를 추가
줄마다 공백을 줄 땐 대문자 G를 준다.
서브스튵ㅌㅌ?
/g == 각 줄 마다
오후 3시 32분
b는 다 M으로 바뀜
c -> N
네번째 줄 삭제
2번째줄 5번째 줄 빈칸으로 만들어버렷
여러개가 있으면 g
특정 어구를 찾을 땐
2~5 줄을 p 보여라
b 로 시작되는 줄을 보여라
b 또는 c 로 시작되는 애를 보여라
b 또는 c 로 시작되는 애들 빼고
첫번째 줄 다음에 AAA를 추가해라 저장해라
원본은 바꾸지 않고 대체하겠다. root를 ADMIN 으로 그리고 ADMIN 부분을 뽑아보여라
1~5 째 줄에서만 대체하겠다. root 를 ROOT로 바꿔라 여러줄에서 | ROOT 뽑아보여라
3번째 줄부터 끝에줄까지 d 지워라
두줄만 보인다.
# 주석으로 시작하는 줄번호 지워잉
3번째 줄부터 7번째 줄까지(/etc/passwd 파일의 3번째 줄부터 7번째 줄까지)에서 (/s/) /sbin/ 문자열을 (/sbin/) 공백으로 치환한다(/g)는 의미입니다. 즉, /sbin/ 부분을 지워버리는 것이죠.
공백줄만 삭제해라
sed '/^$/d' 파일명
"root" 문자열이 포함된 줄을 삭제(delete)하라는 의미입니다. 즉, "root" 사용자에 대한 정보를 가진 줄을 제거합니다.
주석과 빈줄을 모두 빼는거
sed '/^#/d; /^$/d' 파일명
<실습>
cp -arp /root/initial-setup-ks.cfg text.lst 해서 실습할 파일을 복사해두고
sed -n '3p' text.lst =>3 번째 줄 보기
sed -e 's/System/SYSTEM/' text.lst =>모든 System을 SYSTEM으로 변환
sed -e '14,20s/System/SYST/' text.lst =>3~9줄에서 System을 SYST로 변환
# sed -e '14,20s/System/SYST/' text.lst | cat -n | grep "SYST"14 # SYST services
18 # SYST language
sed -e 'a\INST\!' text.lst =>각 줄 아래에 INST! 추가
sed -e 'a\' text.lst =>각 줄 아래에 빈 줄 추가
sed -e '3a\INST' text.lst =>3줄 다음 줄에 INST 추가(4번 줄에 보임)
sed -e 's/^/(tab)/' text.lst =>첫 줄을 (tab)만큼 띄워서 씀
sed -e '3,9s/^/#/g' text.lst => 3~9줄 모두 주석# 추가
sed -e "4s/#//" text.lst => 4줄에서 주석# 제거
sed -e '/^$/d' text.lst =>모든 공백 제거
sed -e '/System/d' text.lst =>모든 System 제거
sed -e '14,20s/System//g' text.lst =>3~5줄에서 System 제거
sed -e '1,$s/System//g' text.lst =>처음부터 마지막 줄까지에서 Sytem 제거
sed -e '3d' text.lst =>3줄 제거
실습
2번째 줄만 보인다.
p 는 줄?이래 맞나 이따 정리할때 확인
원본을 바꾸지 않겠다. sed -e
원본을 읽겠다. see -n
원본을 바꾸지 안고 보겠다. 첫번째 줄 다음에 e 를 넣겠다.
$ 맨 뒤에 z 추가(a)
i == insert
a == add
첫번째 줄에 f를 추가
줄마다 공백을 줄 땐 대문자 G를 준다.
서브스튵ㅌㅌ?
/g == 각 줄 마다
오후 3시 32분
b는 다 M으로 바뀜
c -> N
네번째 줄 삭제
2번째줄 5번째 줄 빈칸으로 만들어버렷
여러개가 있으면 g
특정 어구를 찾을 땐
2~5 줄을 p 보여라
b 로 시작되는 줄을 보여라
b 또는 c 로 시작되는 애를 보여라
b 또는 c 로 시작되는 애들 빼고
첫번째 줄 다음에 AAA를 추가해라 저장해라
원본은 바꾸지 않고 대체하겠다. root를 ADMIN 으로 그리고 ADMIN 부분을 뽑아보여라
1~5 째 줄에서만 대체하겠다. root 를 ROOT로 바꿔라 여러줄에서 | ROOT 뽑아보여라
3번째 줄부터 끝에줄까지 d 지워라
두줄만 보인다.
# 주석으로 시작하는 줄번호 지워잉
3번째 줄부터 7번째 줄까지(/etc/passwd 파일의 3번째 줄부터 7번째 줄까지)에서 (/s/) /sbin/ 문자열을 (/sbin/) 공백으로 치환한다(/g)는 의미입니다. 즉, /sbin/ 부분을 지워버리는 것이죠.
공백줄만 삭제해라
sed '/^$/d' 파일명
"root" 문자열이 포함된 줄을 삭제(delete)하라는 의미입니다. 즉, "root" 사용자에 대한 정보를 가진 줄을 제거합니다.
주석과 빈줄을 모두 빼는거
sed '/^#/d; /^$/d' 파일명
(개인 필기에 추가 실습 문제들 있음!)
여기까지
'[산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정 > Linux' 카테고리의 다른 글
[산대특] 리눅스 명령어의 바다 탐색 3, disk quota (0) 2024.08.27 [산대특] 리눅스의 명령어의 바다 탐색 2 (1) 2024.08.26 [산대특] 파티션 포맷, 명령어들 설명 및 실습 (0) 2024.08.22 [산대특] Software Compile, Patch, Samba, SMB, 파티션 포맷 (0) 2024.08.21 [산대특] Internet 오류시 점검, 커널과 커널 컴파일(Kernel Compile) (0) 2024.08.20