어라연히프제 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 링크를 카피

 

wget https://mariadb.com/download-confirmation?group-name=Community%20Server&release-notes-uri=https%3A%2F%2Fmariadb.com%2Fkb%2Fen%2Fmariadb-11-5-2-release-notes%2F&download-uri=https%3A%2F%2Fdlm.mariadb.com%2F3898060%2FMariaDB%2Fmariadb-11.5.2%2Fyum%2Fcentos%2Fmariadb-11.5.2-rhel-7-x86_64-rpms.tar&product-name=Community%20Server&download-size=622%20MB 

 

이런식으로 다운로드가 가능하고, 

 

[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 정규표현식 사용
찾으려는 문장이나 표현이 있는 파일지정
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' 파일명

 

(개인 필기에 추가 실습 문제들 있음!)

 

여기까지