klaus

[KDT-DAY_11] Linux 명령어 본문

수업/KDT

[KDT-DAY_11] Linux 명령어

klus! 2023. 1. 9. 20:24

0. 들어가기

명령어 정리한 파일 금일

file

readlink

pwd

clear

cat - 파일 생성 및 

ln -s /ln

ls -l ls -d ls-a   <<약자로 쓸경우 ll , ld

0>,1>, 2>

>, >> << ,<< 리다이렉트

touch 생성

sr 정령

mv 이동

rename 이름확인

mkdir -p 만들기(dir)

rm -rf

cd, pushd, popd

shred

head, tail (어디까지 보여주느냐)

.

cd. cd../ cd ../../

PS1

date날짜

&&, ; 똑같이 사용가능 (and)

cp -arp ==>하위 디렉터리

md5sum : 인터넷이나 파일을 다운받았을 때 무결성(in+te+gri+ty) 검사

 

 

1.  Linux 명령어

[+] 파일검증

-  md5sum

> 다운로드한 파일 변형 유무 확인(악성코드)

[실습]

socat-1.4.2.0.tar.gz 파일을 다운받았다고 가정할 때, md5sum을 사용하여 변형 유무를 확인할 수 있다.

※ windows에서는 powershell에서 Get-FileHash 와 certurtil를 사용하여 md5 체크섬을 할 수 있다.

hash 함수표

[+] 시간 관련 명령어

- date, rdate(원격지의 시간을 현 시스템에 적용하는 것)

- clock, hwclock (컴퓨터의 H/W가지고 있는 내장 시간 (CMOS battery가 HW의 전원이 없어도 가능. HDD,CDROM 등 인터넷이 되지 않는 상황))

 

 

> hwclock --hctosys : H/W시간으로 SYSTEM시간을 변경할 경우

> hwclock --systohc : 시스템 시간으로 H/W시간을 변경할 경우

 

 

- cal : 캘린더 (달력)

>  cal -y : 이번년도 달력 출력

 

 

 

[+] 프린터 명령어어(lp~)

- lp(line printing)는 인쇄에 사용되는 명령어
- lpd(프린터 데몬(daemon)), lpr(인쇄 명령어), lprm(인쇄 명령어 취소(rm)), lpq(인쇄 대기(queue)),

  IPP(네트워크 프린팅 프로토콜:Line Printing Protocol)

 

[+] type: 명령어의 종류 확인

- 종류는 내부 쉘, 외부셀

builtin 내부라는 의미

 

lsof = 현재 사용중인 파일들 목록, 소유자 등의 정보 확인

pidof = 특정 프로그램의 프로세스 번호를 보임

==> process는 하나의 실행 단위로써 어느 프로그램의 실행 중인 상태를 의미하기도 한다.

 

lsof -u [user]|wc -l하면 centos의 연결된 파일들

[+]pid [특정 프로세스] 를 확인해서 ping명령을 kill시킬 수있다.

ping localhost 명령어를 실행줄일 때에는 Kill -9 번호(100139)

실행중인 명령어(ping)가 종료(killed)된 것을 확인 할 수 있다.

어느 '명렁어&' 를 입력하면 해당 명령어를 백그라운드에서 실행

 

[+] 파일 송수신 (암호화)

- scp(ssh copy)
  > 네트워크에서 암호화된 ssh 세션을 통한 호스트 간의 파일 전송시 사용

  > 따라서, ssh 프로그램이 노드에 설치되어 있지 않으면 실행되지 않는다. (CentOS 디폴트 설치 및 방화벽 open)

 

  > Ubuntu의 경우 apt-get -y install openssh- server 해서 설치한 뒤, 포트를 열어준다. (ufw allow 22/tcp)
  > scp의 용도/ 형식은 rsync와 사용은 비슷하지만, rsync와 다르게 별도의 데몬 없이 간단하게 보안 파일 송수신이 가능  
사용방법 :

   ∎ 'scp 보낼_파일_위치 타겟_사용자@타겟_호스트(OR IP):/저장될_위치'형식으로 보낸다.

   ∎  'scp 타겟_사용자@타겟_호스트(OP IP):/받아올_위치 저장될_내_위치' 형식으로 받아온다. 
  > 디렉터리 송수신은 scp -r 디렉터리 ~ 식으로 사용하고, 
  > 여러 파일 송수신에서는 scp file1 file2 ... ~ 식으로 사용하면 된다.

 

>  SCP 파일 보내기

   먼저, echo "IM CENTOS1"이라는 내용의 centos1.txt파일 작성

 scp /home/centos/centos1.txt centos@192.168.100.82:/home/centos/

 ==> 전송할 파일을 입력하고 주소(호스트@IP): 위치를 입력하여 전달한다.

작성한 파일

scp를 통해 파일 전달

centos7_82_cli에서 전달된 파일을 확인 할 수 있다.

 

scp를 통해 파일 가져오기

 

 

 

- 가져오기 폴더 가져오기

scp -r [연결 위치와 가져올 파일을 선택] [저장할 위치]

centos7_82_cli에서 centos_14로 centos.txt파일 가져오기

 

추가적으로 여러 파일 을 보낼 때에는 scp [파일을 여러개 선택하고] 보낼 위치를 적어준다.

centos_82_cli에서 전송된 파일을 확인할 수 있다.

 

[+] touch

- 빈 파일 생성 또는 파일의 접속 속성을 변경

  이 명령어는 파일이 있을 때는 파일의 적속 시점을 변경하고, 없으면 빈파일을 만들어준다.

  그리고 어느 작업을 수행하기 앞서 앞으로 쌓이는 데이터를 저장해야할 빈 공간을 만들어 놓기도 한다(Log와 같은)

 

[+] find

- 파일을 찾거나 찾은 파일로 작업이 가능히다.

- 파일이나 디렉터리를 찾는 find 명령어로 찾기 이외에 찾은 파일이나 디렉터리를 대상으로

  다양한 작업을 추가해줄 수도 있는 매우 강력한 도구이다.

- 옵션

  atime ±n : n days 전후에 액세스한 파일 =>어제 접속했던 파일 : atime -1 
  mtime ±n : n days 전후에 변경된 파일
  amin ±n : n minutes 전후에 액세스한 파일 =>1시간 전에 접속했던 파일 : amin -60
  cmin ±n : n minutes 전후에 변경한 파일 
  empty : 비어있는 파일이나 디렉터리로 -size 0k 옵션과 같음
  name "abc.txt" : 이름이 abc.txt인 파일, -name "*.txt"식도 가능 
  newer "abc.txt" : "abc.txt" 파일보다 최신인 파일
  type d,l,s,b,f : 디렉터리(d), 심볼릭 링크(l), 소켓(s), 블록장치(b), 파일(f) 타입 찾기 
  perm 777 : 권한이 777인 파일
  size 1024k : 크기가 1024k인 파일, 
  범위로 지정할 때에는 \( -size 10M –o -size 12M \) 해서 (10~12M)식으로 사용, 여기서 -o는 and 의미
  user tori: 소유자가 tori인 파일
  maxdepth : 찾는 경로 지정. 현재 경로가 1이고, 2는 현재경로에서 하나 아래경로까지 찾기
  print : 결과를 보이라는 옵션인데, 주로 |와 함께 사용해서 결과를 | 뒤에 지정한 파일로 저장함 등이 있다.
 형식은 'find 찾을_시작_위치 -type f/d –name 찾을_파일/디렉터리_명 추가_옵션'식으로 사용한다.

 추가_옵션으로 find ~  뒤에 | 나 >, 특히 '-exec 명령어 { } \;' 를 사용하면 찾은 결과가 { }에 인자로 들어가서

 

 찾은 결과를 대상으로 특정 명령어를  실행시킬 수 있다. \; 는 문장을 끝내는 ; 이 기호라는 것을 명시하려고 \를

 

 붙인 것이다. 그리고 '–regex 명령어'를 사용해서 정규 표현식을 사용하게 할 수 있는데 이 명령어 뒤에는 $를 붙여준다. 

 

- find /home -user centos -type f | more

찾아라 홈(/home/centos) 밑에 user centos의 파일(f) 찾기

 

 

home/centos/.cache/gdm파일이 있는 폴더를 찾을 때, 

 

- find /home -type f -user centos -size 0k 

: 홈부터 시작해서 유자가 centos인 사람의 파일이 사이즈 0k인 파일 찾기

- find /home -type f -user centos -size 0k -exec ls -l {} \;   

: 상세 정보를 같이 표시할 때는 -exec를 사용해서 ls명령도 같이 사용

- 사이즈 범위를 넣을 때

find /home -type f -user centos \( -size 0k -o -size 1k )

- exec 추가

/root아래에서 .bachrc를 찾아서 /home아래 넣어고, 그리고 /home아래를 ls를 통해 확인하여라

 

 

- find / -type f -user centos \( -size 0k -o -size 1k \) |ll *.txt

찾은 파일중 txt파일을 확인 할 때

 

 

- 제외하고 파일을 볼 때에는 (!)

find / -type f -user centos \( -size 0k -o -size 1k \) |grep "*.txt" 

> -o 옵션은 and와 같은 의미로 범위를 줄 때 사용한다.

 

- find /home/centos/ \! -name "*.txt" 

확장자가 txt파일이 아닌 파일을 찾을 경우

 

- 대소문자 구별하지 않고 찾기 (i)

 

 

- p* [a-z] 파일을 찾기

 

find / -regex '^/[f-z]*$'

f~z까지의 파일 찾기

[+] 파이프(-|)와 tr

- 명령어를 연결시켜주는 - | 와 데이터를 변경해주는 tr 
- | [파이프로 읽음]는 리다이렉션의 한 방법인데 | 좌측 명령어의 실행 결과를 | 우측으로 넘기는 역할을 한다. |를

  여러 개를 조합해서 사용할 수도 있으므로 응용범위가 매우 넓다.
- 참고로 Shell Script에서 ||는 or의 의미이고, &&는 and의 의미이다. 

- dmesg | less 하면 시스템에서 발생하는 메시지를 보이는 dmesg의 결과를 less

  명령어의 입력으로 해서 페이지별로 갈무리해서 보인다. vi 화면에서 열리므로 q 입력하면 닫힌다.
=> ~ |grep는 Filtering 역할을 한다.

 

dmesg만 입력하면 상당히 많은 정보를 확인할 수 있다. 그중 , less페이지 별로 보기위해서 사용한다.

 

- cat -n /etc/passwod |grep "root"

패스워드 파일에서 루트 권한 파일을 출력해준다 (줄표기)

 

 

[+] tr명령어

- 대소문자 변경 (대->소)(소->대)

/var/log/messges아래 tty(소문자)를 TTY(대문자)로 변경하고 그중 TTY를 위에서 5번째 줄 까지 보여줘라

- cat -n /var/log/messages |tr 'tty' 'TTY' | grep 'TTY' >/home/centos/TTY.txt

  내용을 추출해서 /home/centos/TTY.txt 파일에 저장하기

 

- tr 을 사용해서 대소문자 

> 사용할 경우 원본 파일은 변경되지 않음.

> 변경될 때에는 문자열이 아닌 문자 하나하나하나가 변경된 것이다.

 

- wc

- 파일에서 글자의 수 . 줄의 수 등 정보를 보이는 명령어(파일 내용 통계)

- 보통 | 뒤에 붙여 쓰는 옵션은

 

 

[+]stat

- 파일에 대한 많은 정보를 보이는 명령어
- Linux에서 자주 사용되는 중요한 명령어들이 많지만 이 stat 명령어도 매우 요긴한데 잘 사용되지 않고 있다.

- Linux에서 모든 파일은 파일명(hard link), 메타데이터(i-node), 그리고 데이터(data)를 가지고 있는데

 

  stat 명령어는 이들 정보를 개별적으로나 모두 볼 수 있게 해준다. 특히 Access, Modify, 그리고 Change 등과 같은 정보를 보이므로 중요한 파일은 수시로 이 명령어로 보안 점검해 보는 것이 필요하다. 이 명령어로 특정 파일에 대한 수정이나 접근 시간 등을 보는 것은 매우 보안에서 중요하다고 볼 수 있다. 

 

만약, passwd 파일을 예를 들어 기존에는 읽기만 변경되었으나, 유저/패스워드(변경 및 추가)를 입력한다면,

Access / Modify / Change 날짜가 업데이트 되어 있는 것을 확인할 수 있다.

 

[+]which, whereis, locate

 - 명령어의 위치를 검색해주는 명령어 (위치)
  - which 명령어는 환경변수 $PATH 값에 지정된 명령어 bin이나 sbin을 이용해서 디렉터리를 검색할 때 사용되며 절대경로 결과를 확인한다.
 -  whereis와 locate는 명령어의 실행파일, 소스, man 페이지 파일 등의 위치를 알려주는 명령어

 

[+]echo
  파일생성, 변수 값 보기나 값 변경 등을 빠르게 설정해주는 - echo
  이 명령어는 echo " " > 파일_명 식으로 사이에 내용을 넣어서 파일을 생성하거나, 시스템의 환경변수나 사용자 정의 변수의 내용을 볼 때, 설정 값을 변경할 때 등에서 사용된다. 


[+] wget, git, curl, 그리고 lftp, lftpget 

-  웹에서 파일을 복사해오는 명령어
- 필요한 파일 등을 다운받을 수 있는 웹 사이트 주소를 알고 있다면 콘솔에서 직접 파일을 다운받아 올 수 있는데

  다음 몇 가지 도구가 유용하다. 

∎ wget는 타겟 사이트에서 다운받고자 하는 파일을 반복적으로 접속해서 현재 사용 중인 디렉터      리로 다운받아주는데 wget HTTP~ , wget FTP~식으로 사용될 수 있고, –c 옵션을       주면 다운이 중단 되었을 때 이어서 받아준다. 
∎ curl이나 pip 명령어로도 다운로드나 업로드를 실행할 수 있다.
∎ lftp는 다운로드가 실패했을 때 에러를 예외처리해서 다시 받아주고 2GB 이상의 대용량 파일      도 다운받아주며 방화벽이 있어도 우회해서 받게 해준다.
∎ lftpget 명령어는 lftp와 get를 합친 개념이지만 CentOS에서는 지원하지 않는다. 

 

 

- curl -O abc.git https://github.com/docker/docker.git > abc.git

 

- lftp

su -c 'yum -y install lftp'

c는 임시로 ' '안에 명령어를 su권한으로 가져옴

 

 

- lftp -c "set ftp:passive-mode on:set net:max-retries 3;set net:timeout 5;mget -c ftp://ftp.intel.com/readme.txt"

passive 모드로 

3번까지 요청하고

5분 mget  여러개도허용

 

 

 

[+]more와 less

- 한 화면씩 출력해주는 명령어

- 내용이 많은 텍스트 파일을 페이지 단위로 화면에 출력한다.

- cat명령어 대신 more나 less로 more /etc/passwd식으로 해서 작은 파일을 읽으,ㄹ 수 있다.

 

 

 

 

[+]head tail

- 텍스트 파일에서 텍스트를 읽어 올때 필요한 부분만 읽어오기

- 디폴트 10줄이고 숫자를 쓰면 숫자만큼 보임

- f 옵션은 실시간으로 보임(주로 테일과 함께 사용)

- tail -f /var/log/secure명령을 통해 누가 실시간으로 접속하고 있는지 접속한 대상의 log를 확인할 수 있다.

- 로그인 한  후 아래 두줄이 추가된 것을 확인할 수 있다.

 

[+] windows의 DOS명령어도 일부 사용가능

 

-  Linux에서 Windows의 DOS 명령어 앞에 m을 붙여서(mdir, mcopy, mcd, mdel, mformat, mrd, mread, mren, mtype, mwrite)로 사용할 수 있다.

- DOS 상태에서 리눅스 파일을 읽거나 백업할 때, 리눅스에서 DOS용 플로피디스트에 파일을 저장하거나 역으로

- DOS용 플로피디스크에서 Linux로 파일을 복사해 올 때 유용하다.

  하지만 요즘에는 플로피디스크를 사용하지 않으므로 이 명령어들도 별로 사용할 일은 없다. 

 

[+]bc와 let 

- 쉘 스크립트에서도 자주 사용되는 bc(basic calculator) 명령어를 사용하면 콘솔에서 수식계산이 가능

- 사칙연산은 물론 x의 y승(x^y) 계산과, 10법을 16진법, 2진법을 10진법 등으로 변경 가능
=>이런 사용법 때문에 Shell Scripts에서 수식계산에서 널리 사용된다. 
- 보통 ‘계산식 | bc’ 식으로 사용한다. 

 

- sqrt(4) : 제곱근

- scale=4 소수점 표현

 

 

 

- let "SUM = 5+5"  5+5라는 값을 sum

 

 

 

[+] tee와 script

- 콘솔로 보면서 파일로 저장하는 명령어

-  tee 명령어는 콘솔에서 실행된 내용을 보면서 한편으로는 그 내용을 저장할 때 사용되는 명령어로 파이프(|) 좌측의 실행결과를 표준 출력(stdout)으로 콘솔에 보이고, 파이프 우측에 표준 입력(Stdin)으로 지정된 파일_명으로 저장된다.

즉, 실행 내용을 콘솔에 표시하고 저장도 같이 된다.

- Script 명령어는 스크립트 해두면 이후에 콘솔에서 작업하는 모든 내용이 typescript라는 파일명으로 자동으로 저장된다.

- script

> 스크립트 명령을 쓰게되면 시작되고 exit명령을 통해 종료한다

 

[+]mail, mutt, mailx

- 콘솔에서 메일을 보낼 때 사용되는 명령어

- 사전에 시스템에 sendmail이라는 MX 도구가 설치되어 있어야 사용 가능한 명령어

 

- sendmail을 설치하기 전 설치 확인

 >  yum list installed |grep "sendmail"

 > yum list |grep sendmail

 > yum -y install mutt

- 설치 완료 후 서비스 시작

> service sendmail start

> systemctl start sendmail ; systemctl enable sendmail.service

[+] Disposable Mail이란 ????
  여기서 사용한 mailinator.com, guerrillamail.com, 10minutemail.com, yopmail.com 등을 말하는데 MX(Mail eXchanger)에 계정 없이 즉석에서 사용자를 만들어서 메일을 보낸 뒤, 해당 사이트로 들어가서 사용자_명을 입력하면 메일을 확인할 수 있다. 이중에서 mailinator.com이 가장 사용하기 편하고, 국내용으로는 ruu.kr도 많이 사용되고 있다. 이들은 원래 10분, 30분 정도만 메일을 보관했지만 현재는 오래 보관하기도 한다. 

 

가입없이 실행한다. (일시적으로 메일 저장)

 

https://www.mailinator.com/

http://ruu.kr/

 

 

echo "here is a test mail from testt1234" | mutt -s "testt1234" test_tori@ruu.kr

echo "here is a test mail from testt1234" | mailx -s "testt1234" test_tori@ruu.kr

[+]history

- 실행했던 이벤트와 명령어를 보이는 명령어

- !를 사용하여 명령어 실행

- !! 마지막에 사용한 명령어

- !$마지막으로 실행되었던 문자열 명령어를 실행한다.

 

 

[+]정규 표현식에서 자주 쓰이는 연산부호(operand, handle) 정리

쉘 실행
엔터, ;, `명령어`, 
$(명령어) 명령어를 실행함
{ } { }의 어느 문자와 매치되면 실행함 <={Aa}
\ \뒤의 것이 특수문자인 것을 표시함 <=\(
| | 앞의 실행결과를 | 뒤의 입력으로 함
&  백그라운드로 실행함
!숫자 history에서 해당 숫자를 실행함 
* 임의의 여러 문자
? 임의의 한 문자
[ ] [ ] 범위에 매치되는 문자 <=[a-z]
> > 앞의 실행결과를 > 뒤의 입력으로 함
>! > 앞의 실행결과를 > 뒤로 강제 입력함
<  < 뒤의 실행결과를 < 앞의 입력으로 함
>>, << >> 앞의 실행결과를 >> 뒤로 추가함
2> /dev/null 표준 에러를 콘솔에 표시 안 함
2>& 1 표준 에러를 표준 출력으로 보냄
2>& /dev/null 표준 에러를 파일이나 장치로 보냄

- 기호 역할
A>& B A 파일의 출력을 B 파일의 입력으로 써줌
A<& B A 파일을 읽어서 B 파일의 출력으로 써줌
0> A  STDIN : 키보드 입력 
1> A STDOUT : 화면 출력 
2> A STDERR : 화면 에러 

- 파일을 좀 더 잘 찾아주는 정규표현식 - *, ?, [], {}, 2>, 1>& 등
- 정규 표현식이란 [ ]나 { }, 그리고 *과 ?와 같은 부호를 사용해서 명령어 실행을 간략히 빠르게 하는 방법인데,

  정규 표현식으로 많은 파일과 문장을 편리하게 조작하게 해준다. 
- 쉘 스크립트나 데이터베이스 SQL 쿼리, Python, C, JAVA 등에서도 자주 사용된다. 

Comments