개발/기타

Linux] 명령어 (작성 중)

펭귀니 :) 2020. 7. 23. 09:41

username@hostname:current_directory
pete@icebox:/home/pete $
 
echo명령은 text arguments를 just print.
$ echo hello world 
 
$ date
$ whoami
 
현재 위치 확인 (from the root directory)
$ pwd
 
디렉토리 위치 이동
$ cd /home/pete/Pictures (절대경로)
$ cd picture (상대경로)
$ cd . (현재 디렉토리)
$ cd .. (부모 디렉토리로 이동) 
$ cd ~ (홈 디렉토리로 이동)
$ cd - (이전 디렉토리로 이동)
 
디렉토리 목록 표시
$ ls
$ ls (절대경로)
$ ls -a // 숨김 폴더 표시
$ ls -l // show detailed information
$ ls -R // 디렉토리 내용을 재귀적으로 나열
$ ls -r // 역순으로 정렬
$ ls -t // 수정 시간순으로 정렬
 
파일 새로 생성
$ touch myfile
 
kind of file을 확인
$ file banana.jpg
 
짧은 내용의 파일 열기 or 연결
$ cat dogfile
$ cat dogfile birdfile // (combine)
 
큰 텍스트 파일 열기
$ less /home/pete/Documents/text1
옵션
q - quit and go back to your shell
Page up, Page down, 위아래 화살표 - 페이지 탐색
g- 텍스트 파일의 시작으로 이동
G - 텍스트 파일의 끝으로 이동
/search - 텍스트 문서 내에서 특정 텍스트 검색 (검색 하려는 단어 앞에 /)
h - help
 
shell에 입력한 명령 기록
$ history // or 위쪽 방향키 
ctrl-R // reverse search command. 원하는 명령의 일부 검색 -> 일치하는 항목 표시되면 enter입력
 
clear command
$ clear
 
복사본 만들기
$ cp mycoolfile /home/pete/Documents/cooldocs
// 파일 위치
$ cp *.jpg /home/pete/Pictures
$ cp -r Pumpkin/ /home/pete/Documents
옵션
-i 파일 덮어쓰기 방시
-r 디렉토리 복사
 
파일 이름 바꾸기
$ mv oldfile newfile
파일 옮기기
$ mv file2 /home/pete/Documents
파일 2개 옮기기
$ mv file_1 file_2 /somedirectory
디렉토리 이름 바꾸기
$ mv directory1 directory2
$ mv -i directory1 directory2 // 덮어쓰기 방지
$ mv -b directory1 directory2 // 디렉토리 백업
 
디렉토리 만들기
$ mkdir books paintings // 여러 디렉토리 동시에 만들기
$ mkdir -p books/hemmingway/favorites // 하위 디렉토리 동시에 만들기
 
제거
$ rm file1
$ rm -f file1
$ rm -i file // 제거 할 것인지 묻기
$ rm -r directory // 모든 파일과 하위 디렉토리 제거
$ rmdir directory // 디렉토리 제거
 
찾기
$ find /home -name puppies.jpg
$ find /home -type d -name MyFolder // -type 파일 형식 지정 d(directory)
 
도움말
$ help echo
 
메뉴얼 페이지
$ man ls
$ whatis cat // 무슨 명령인지 궁금할 때
 
예약어
$ alias foobar = 'ls -la'
~ / .bashrc // 영구적으로 명령을 적용하고 싶을 경우
$ unalias foobar
 
쉘에서 나가기
$ exit
$ logout

 

Text-Fu

1. stdout (Standard Out)

$ echo Hello World > peanuts.txt
$ echo Hello World >> peanuts.txt

 

> 표준 출력 위치 변경. 기존에 내용이 있을 경우 덮어쓰기 된다.

>> 덮어쓰고 싶지 않은 경우에 사용. 파일 끝에 Hello World가 추가된다.

 

2. stdin (Standard In)

$ echo < peanuts.txt > banana.txt

 

peanuts.txt의 내용이 banana.txt로 그대로 복사

banana.txt가 없으면 새로 생성

 

3. stderr (Standard Error)

stderr은 출력을 화면으로 보내며 stdout과는 완전히 다른 스트림이다.

$ ls /fake/directory 2> peanuts.txt

peanuts.txt에 stderr 메시지 표시

 

4. pipe and tee

pipe( | )는 표준 출력을 다른 프로세스의 표준 입력으로 사용 가능

tee는 명령의 출력 결과를 파일과 동시에 표준 출력할 수 있도록 하는 명령어 (stdin을 받아서 stdout과 하나 이상의 파일에 그 입력을 출력해준다.)

$ ls -la /etc | less
$ ls | tee peanuts.txt

 

12. sort

$ sort -r file1.txt
// sort [옵션] 파일

옵션

-b 공백 무시

-d 공백과 알파벳 문자 순서 비교

-f 모든 문자를 소문자로 인식

-g 숫자 값 비교 정렬

-i 프린트 가능한 문자만 비교

-M 월로 정렬

-n 스트링 숫자값과 비교하여 정렬

-r 비교 결과 역변환

-c 입력된 파일이 정렬되었는지를 체크

-m 복수 입력 파일이 병합

-o 지정한 파일에 그 결과 저장

-S 지정한 크기로 메인 메모리 버퍼를 사용

-u 필드 내 같은 값을 제거한 유일한 값만 결과값으로 출력

 

16. grep

가장 일반적인 텍스트 처리 명령. 특정 패턴과 일치하는 문자를 파일에서 검색 가능

$ grep fox sample.txt

sample.txt에서 fox를 찾을 때 위와 같이 작성

-i 플래그를 사용해서 대소문자 구분하지 않게 할 수 있다.

$ grep -i somepattern somefile

|(pipe)와 함께 사용하여 다른 명령과 결합

$ env | grep -i User

 

$ ls /somedir | grep '.txt$'

.txt로 끝나는 모든 파일들을 somedir로 리턴

 

File System

6. mount and umount

하드디스크나 CD/DVD-ROM 또는 USB 저장장치를 사용하기 위해서는 디렉토리에 마운트 시켜야한다.

마운트 명령은 root만이 실행할 수 있다.

$ sudo mount -t ext4 /dev/sdb2 /mydrive

// mount [-fnrvw] [-t fs유형] [-a 옵션] 장치 디렉토리
옵션 기능
-v 자세한 출력모드
-f 실제로 마운트하지 않고 가능한지 점검
-n /etc/mtab 파일에 저장 없이 마운트 하기
-r 읽기만 가능하도록 마운트
-w 읽기/쓰기 모두 가능하도록 마운트
-t vfstype -f 뒤에 파일 시스템 유형을 지정함

 

9. Disk Usage

$ df -h

하드디스크의 용량이 얼마나 남아있는지 확인.

더불어 파티션의 용량을 체크하고자 할 때, 파티션의 마운트 상태로 체크하고자 할 때, 마운트된 파티션의 파일시스템을 체크하고자할 때 유용하게 사용.

옵션 기능
-a  
-i  
-k 파일 크기를 킬로바이트로 보여줌
-T 파일 시스템 종류와 함께 디스크 정보를 보여줌
-t  
-h 쉬운 용량 표시 단위로 표기

 

$ du -h

특정 디렉토리내의 파일 용량에 대한 정보를 확인하고자 할 때 사용한다.

옵션 기능
-a 해당 경로에 사용한 디스크 용량 표시
-k 용량 표시 단위를 킬로바이트로 표시
-m 용량 표시를 메가바이트로 표시

 

 

 

Processes

1. ps (Processes)

프로세스는 컴퓨터에서 실행 중인 프로그램.

커널에 의해 관리되며 각 프로세스에는 Process ID인 PID가 있다. PID는 생성된 순서대로 할당이 된다.

$ ps

PID     TTY STAT TIME CMD
41230 pts/4 Ss 00:00:00 bash
51224 pst/4 R+ 00:00:00 ps

PID : Process ID

TTY : 프로세스와 관련된 터미널 제어

STAT : 프로세스 상태 코드

TIME : 총 CPU 사용 시간

CMD : 실행 파일 / 명령 이름

$ ps aux

a는 모든 실행중인 프로세스를 보여준다. (다른 사용자에 의해 실행되는 것도 포함)

u는 processes의 details를 보여준다.

x는 TTY와 관련 없는 모든 프로세스가 나열된다.

USER : 유효 사용자

%CPU : 사용된 CPU 시간을 프로세스가 실행 된 시간으로 나눈 값

%MEM : 프로세스의 상주 세트 크기와 머신의 실제 메모리 비율

VSZ : 전체 프로세스의 가상 메모리 사용량

RSS : 프로세스에 할당되고 있는 RAM에 있는 메모리 양을 표시. 스왑아웃 된 메모리는 포함하지 않음

TTY : Process와 관련된 terminal 제어

START : 프로세스 시작 시간

top은 시스템에서 실행되는 프로세스에 대한 실시간 정보를 제공한다. 10초마다 새로고침된다. 어떤 프로세스가 많은 리소스를 차지하고 있는지 확인할 수 있는 매우 유용한 도구이다.

 

2. Controlling Terminal

ps의 output에는 TTY가 어떻게 있는가? TTY는 command를 실행한 terminal이다.

There are two types of terminals. terminal devices, pseudoterminal devices.(일반 터미널 장치, 유사 터미널 장치)

일반 terminal device는 시스템에 입력할 수 있고, 출력을 보낼 수 있는 native terminal device이다. shell에 연결하기 위한 terminal application처럼 보일 수 있지만 그게 아니다.

pseudoterminal은 우리가 작업하는데 익숙한 terminal이다. termanal을 모방하고, PTS에 의해 보여진다. ps명령어의 표준 출력으로 우리의 shell process가 pst/*에 있는 것을 알 수 있다.

프로세스는 일반적으로 controlling terminal에 반영된다. 예를 들어 find와 같은 shell window에서 프로그램을 실행시키고, window를 닫았을 때, 우리 process도 함께 진행된다.

daemon process는 백그라운드에서 실행되는 프로세스다. 종종 시스템 부팅 시 시작되며, 시스템이 종료되면 종료된다. 이런 special processes들은 종료되는 것을 원하지 않기 때문에 controlling terminal에 바인딩 되지 않는다.

TTY에서 ?의 의미는 controlling terminal이 없다는 뜻이다.

 

3. Process Details

Process는 시스템에서 실행중인 프로그램이며, 정확하게는 프로그램을 실행하기 위해 memory, CPU, I/O를 할당하는 시스템이다.

커널은 프로세스를 담당하며, 프로그램을 실행할 때 커널은 메모리에 프로그램의 코드를 로드하고 리스소를 결정, 할당한 다음 각각의 프로세스를 유지한다.

  • 프로세스의 상태
  • 프로세스가 사용하고 받는 자원
  • 프로세스 소유자
  • 신호처리
  • basically everything else

커널은 프로세스가 적절한 양의 리소스를 받을 수 있도록 하는 것이 역할이다. 프로세스가 끝나면, 리소스는 다른 프로세스를 위해 해제된다.

 

4. Process Creation

새로운 프로세스가 생성될 때, 기존 프로세스는 기본적으로 fork system을 호출하여 스스로를 복제한다. fork system은 동일한child process를 만든다. 이 child process는 새로운 PID를 갖는다. 그리고 origin process는 그것의 parent process가 되고 PID가 child process의 PPID가 된다. 

$ ps l

l 옵션은 "long format" or our running processes의 더 자세한 정보를 보여준다.

PPID는 parent ID이다. 시스템이 부팅될 때, kernel은 init이라는 프로세스를 생성하고 PID는 1이다.

 

5. Process Termination

process는 _exit system을 호출하여 종료할 수 있다. exit system은 process가 사용하는 리소스를 해제한다. process가 terminate할 준비가 완료되면, kernel은 종료 이유(termination status)를 알려준다. 가장 일반적으로 상태 0은 프로세스가 성공했음을 의미. 

Orphan Processes

부모 프로세스가 자식 프로세스보다 먼저 죽으면 자식 프로세스는 고아가 되고, init의 관리를 받는다. init은 결국 Orphan들이 대기할 수 있도록 wait system을 호출한다.

Zombie Processes (STAT Z)

자식 프로세스가 _exit system으로 종료되어 모든 메모리와 리소스가 해제되더라도 부모 프로세스가 자식 프로세스의 상태를 알고 싶을 수 있기 때문에 커널은 최소한의 정보(PID, 프로세스 종료 상태 등)을 가지고 있는다.

부모 프로세스가 좀비 프로세스의 종료 상태를 회수하면(wait system call을 통해) 좀비 프로세스는 제거된다.

 

7. Kill (Terminate)

PID 12445인 프로세스를 종료하는 신호 보내기. 

기본적으로는 TERM신호를 보낸다. 

$ kill 12445

SIGHUP - Hangup, controlling terminal이 닫힐 때, process로 전송된다. 예를 들어, 프로세스가 실행중인 terminal창을 닫으면 SIGHUP신호가 전달된다. 기본적으로 사용자에게 달렸다.

SIGINT - 인터럽트 신호. 일반적으로 Ctrl+C. 프로세스를 정상적으로 종료하려고 시도한다.

SIGTERM - 프로세스를 종료, 그러나 먼저 cleanup할 수 있도록 허락

SIGKILL - 프로세스를 죽이고, cleanup 하지 않음

SIGSTOP - 프로세스 Stop/suspend

옵션

옵션 기능
-1, -HUP 프로세스를 재활성화 함
-9 프로세스를 강제로 죽임

 

 


Ping - 목적지 서버를 통하는 네트워크 상태 체크

telnet - 목적지 서버의 응용프로그램이 살아있는지 확인 (포트번호)

traceroute - 출발지와 목적지의 라우터를 모두 추적

 

 

telnet

rpm -qa | grep telnet으로 설치되어있음을 확인

yum list | grep telnet

telnet www.google.com 80

GET / HTTP/1.1
Host: www.google.com

 

netstat

네트워크 연결 상태, 라우팅 테이블, 인터페이스 관련 통계 정보를 출력. 현재 시스템에 열려있는 포트가 무엇인지 확인

-a 모든 소켓 정보 출력

-r 라우팅 정보 출력

-n 호스트명 대신에 IP주소 출력

-i 모든 네트워크 인터페이스 정보를 출력

-s 프로토콜별로 네트워크 통계 정보를 출력

-p 해당 소켓과 관련된 프로세스의 이름과 PID를 출력

 

netstat -an | grep LISTEN

현재 통신이 진행중인(LISTEN)상태인 포트가 열려있는 서비스를 확인할 수 있다.