분류 기타

시스템관리자가 알아야 할 20개의 리눅스 명령어

컨텐츠 정보

  • 조회 636 (작성일 )

본문

리눅스 시스템 관리에 필요한 필수 20개 명령어


1. curl

curl은 URL을 전송합니다. 응용프로그램의 엔드포인트 또는 업스트립 서비스 앤드 포인트에 대한 연결성을 테스트할 때 사용합니다.

curl은 응용프로그램이 DB와 같은 다른 서비스에 도달할 수 있는지 또는 서비스가 정상인지 여부를 확인하는데 유용할 수 있습니다.

---------------------------------------------

애플리케이션이 MongoDB 데이터베이스에 연결할 수 없다는 것을 나타내는 HTTP 500 오류가 발생할 때:

$ curl -l -s myapplication:5000

HTTP/1.0 500 INTERNAL SERVER ERROR

----------------------------------------------

-l옵션은 헤더 정보를 표시하고 -s옵션은 응답 본문을 묶음 처리합니다.


---------------------------------------------

로컬 데스크탑에서 데이터베이스의 엔드 포인트 확인 :

$ curl -I -s database:27017 

HTTP/1.0 200 OK

----------------------------------------------

----------------------------------------------

$ curl -I -s https://365ok.co.kr 

HTTP/1.1 200 OK

----------------------------------------------


2. python -m json.tool / jq 

파이썬에는 JSON 라이브러리가 내장되어 있습니다.

Python의 JSON 모듈을 사용하려면 JSON 파일의 출력을 python -m json.tool 명령으로 파이프하십시오.


------------------------------------------------

$ cat test.json 

{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":["firstName","lastName"]}

-------------------------------------------------


파이썬 라이브러리를 사용하려면 파이썬에 출력을 -m (모듈) 옵션으로 파이프하십시오.

--------------------------------------------------

$ cat test.json | python -m json.tool 

{

     "properties": {

         "age": {

             "description": "Age in years",

             "minimum": 0,

             "type": "integer"

         },

         "firstName": {

             "type": "string"

         },

         "lastName": {

             "type": "string"

         }

     },

     "required": [

         "firstName",

         "lastName"

     ],

     "title": "Person",

     "type": "object"

 }

---------------------------------------------


고급 JSON 구문 분석을 위해 jq를 설치할 수 있습니다. 

jq는 JSON 입력에서 특정 값을 추출하는 몇 가지 옵션을 제공합니다.

위의 파이썬 모듈과 같이 예쁜 인쇄하려면 jq를 출력에 적용하기만하면 됩니다.

---------------------------------------------

$ cat test.json | jq {

   "title": "Person",

   "type": "object",

   "properties": {

     "firstName": {

       "type": "string"

     },

     "lastName": {

       "type": "string"

     },

     "age": {

       "description": "Age in years",

       "type": "integer",

       "minimum": 0

     }

   },

   "required": [

     "firstName",

     "lastName"

   ]

 }


3. ls 

ls는 디렉토리의 파일을 나열합니다.

파일을 찾는 것 외에도 사용 권한을 검사하는 데 도움이 될 수 있습니다.


------------------------------------------

$ ./myapp

 bash: ./myapp: Permission denied 

$ ls -l myapp 

-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp

-------------------------------------------


4. tail 

tail은 파일의 마지막 부분을 표시합니다.

대부분 응용 프로그램에 대한 가장 최근 요청에 대해 로그에서 말하는 내용을 확인하려고 합니다.

예를 들어, tail를 사용하여 Apache HTTP 서버에 요청할 때 로그에서 어떤 일이 발생하는지 확인할 수 있습니다.


------------------------------------------

$ tail -f /var/log/httpd/access_log

------------------------------------------

-f 옵션은 로그 라인이 파일에 기록 될 때 출력하는 "follow"옵션을 나타냅니다.

로그를 실시간으로 따르는 대신 -n 옵션을 사용하여 파일의 마지막 100 줄을 볼 수도 있습니다.


------------------------------------------

$ tail -n 100 /var/log/httpd/access_log

------------------------------------------


5. cat 

cat은 파일을 연결하고 인쇄합니다. cat을 실행하여 종속 파일의 내용을 확인하거나 이미 로컬로 빌드한 응용 프로그램의 버전을 확인할 수 있습니다.


------------------------------------------

$ cat requirements.txt

 flask

 flask_pymongo

------------------------------------------


6. grep 

grep은 파일 패턴을 검색합니다. 다른 명령의 출력에서 ​​특정 패턴을 찾고 있는 경우 grep은 관련 행을 강조 표시합니다.

로그 파일, 특정 프로세스 등을 검색 할 때 이 명령을 사용하십시오.


7. ps 

ps는 프로세스 상태를 표시합니다. 실행중인 응용 프로그램을 확인하거나 예상 프로세스를 확인하려면 이 명령을 사용하십시오.

예를 들어 실행중인 Tomcat 웹 서버를 확인하려면 옵션과 함께 ps를 사용하여 Tomcat의 프로세스 ID를 얻을 수 있습니다.


----------------------------------------------

$ ps -ef

 UID        PID  PPID  C STIME TTY          TIME CMD

 root         1     0  2 18:55 ?        00:00:02 /docker-java-home/jre/bi

 root        59     0  0 18:55 pts/0    00:00:00 /bin/sh

 root        75    59  0 18:57 pts/0    00:00:00 ps -ef

-------------------------------------------------


가독성을 높이려면 ps를 사용하고 grep하기 위해 파이프하십시오.

------------------------------------------------

$ ps -ef | grep tomcat

 root         1     0  1 18:55 ?        00:00:02 /docker-java-home/jre/bi

------------------------------------------------


8. env 

env를 사용하면 환경 변수를 설정하거나 인쇄 할 수 있습니다.

문제 해결 중에 잘못된 환경 변수로 인해 응용 프로그램이 시작되지 않는지 확인하는 것이 유용 할 수 있습니다.

아래 예제에서 이 명령은 응용 프로그램 호스트에 설정된 환경 변수를 확인하는 데 사용됩니다.


------------------------------------------------

$ env

 PYTHON_PIP_VERSION=9.0.1

 HOME=/root

 DB_NAME=test

 PATH=/usr/local/bin:/usr/local/sbin

 LANG=C.UTF-8

 PYTHON_VERSION=3.4.6

 PWD=/

 DB_URI=mongodb://database:27017/test

---------------------------------------------------

응용 프로그램이 Python3을 사용하고 있으며 MongoDB 데이터베이스에 연결하기 위한 환경 변수가 있습니다.


9. top 

top은 정렬된 프로세스 정보를 표시하고 업데이트합니다.

이 도구를 사용하여 실행중인 프로세스와 소비하는 메모리 및 CPU의 양을 확인하십시오.

자신의 응용 프로그램을 검사하는 것 외에도 top을 사용하여 CPU 또는 메모리를 사용하는 다른 프로세스를 디버깅 할 수 있습니다.


10. netstat 

netstat는 네트워크 상태를 표시합니다. 이 명령은 사용중인 네트워크 포트와 들어오는 연결을 표시합니다.


------------------------------------------

$ netstat -tulpn

------------------------------------------


11. ip address 

호스트에서 ip 주소가 작동하지 않으면 iproute2 패키지와 함께 설치해야합니다.

ip address는 응용 프로그램 호스트의 인터페이스와 IP 주소를 표시합니다.

IP 주소를 사용하여 컨테이너 또는 호스트의 IP 주소를 확인합니다.


-----------------------------------------

$ ip address show eth0

----------------------------------------


12. lsof 

lsof는 응용 프로그램과 관련된 열린 파일을 나열합니다.

일부 Linux 시스템 이미지의 경우 lsof 패키지와 함께 lsof를 설치해야합니다.

리눅스에서 응용 프로그램이 파일에 쓰거나 네트워크 연결을 열면 lsof는 해당 상호 작용을 파일로 반영합니다.

netstat과 마찬가지로 lsof를 사용하여 수신 대기 포트를 확인할 수 있습니다.

예를 들어 포트 80이 사용 중인지 확인하려면 lsof를 사용하여 어떤 프로세스가 포트를 사용하고 있는지 확인합니다.


---------------------------------------

$ lsof -i tcp:80

$ lsof -p 18311

---------------------------------------

Lsof는 httpd가 포트 80에서 청취 함을 보여줍니다. httpd의 프로세스 ID를 검사하면 httpd가 실행하는 데 필요한 모든 파일도 표시됩니다.

열린 파일 목록에 있는 열린 파일의 이름은 프로세스의 출처, 특히 Apache를 정확히 찾아줍니다.


13. df 

df (디스크 여유 공간 표시)를 사용하여 디스크 공간 문제를 해결할 수 있습니다.

df를 사용하여 디렉토리의 기존 공간을 파악하고 실제로 공간이 부족한 지 확인할 수 있습니다.


---------------------------------------

$ df -h

---------------------------------------

Df는 각 파일 시스템의 디스크 공간, 절대 공간 및 가용성을 보여줍니다.

-h 옵션은 사람이 읽을 수 있는 형식으로 정보를 인쇄합니다.


14. du 

디렉토리에서 디스크 공간을 사용하는 파일에 대한 자세한 정보를 검색하려면 du 명령을 사용하십시오.

예를 들어 어떤 로그가 / var / log 디렉토리에서 가장 많은 공간을 차지하는지를 알고 싶다면 du를 -h (사람이 읽을 수있는) 옵션과 함께 -s 옵션을 사용하여 전체 크기를 확인할 수 있습니다.


-----------------------------------------

$ du -sh /var/log/*

 1.8M  /var/log/anaconda

 384K  /var/log/audit 

 4.0K  /var/log/boot.log

 0 /var/log/chrony

 4.0K  /var/log/cron

 4.0K  /var/log/maillog

 64K /var/log/messages

----------------------------------------

위의 예는 / var / log 아래의 가장 큰 디렉토리가 / var / log / audit가되도록 합니다. du를 df와 함께 사용하여 응용 프로그램의 호스트에서 디스크 공간을 사용하는 것이 무엇인지 판별 할 수 있습니다.


15. id 

응용 프로그램을 실행중인 사용자를 확인하려면 id 명령을 사용하여 사용자 ID를 반환하십시오.


---------------------------------------

$ id

---------------------------------------


16. chmod 

호스트에서 응용 프로그램 바이너리를 처음 실행할 때 "사용 권한이 거부되었습니다."라는 오류 메시지가 나타날 수 있습니다. ls의 예제에서 볼 수 있듯이 응용 프로그램 바이너리의 사용 권한을 확인할 수 있습니다.


-----------------------------------

$ ls -l

 total 4

 -rw-rw-r--. 1 user1 user1 34 Jul 11 02:17 test.sh

---------------------------------------------

이는 바이너리를 실행하기위한 실행 권한 ( "x"없음)이 없음을 나타냅니다. chmod는 사용자가 바이너리를 실행할 수 있도록 권한을 수정할 수 있습니다.


------------------------------------------------------

$ chmod +x test.sh

 [user1@localhost ~]$ ls -l

 total 4

 -rwxrwxr-x. 1 user1 user1 34 Jul 11 02:17 test.sh

---------------------------------------------------

예제에서 보듯이 이 권한은 실행 권한으로 업데이트 됩니다.

이제 바이너리를 실행하려고 할 때 응용 프로그램이 권한 거부 오류를 발생시키지 않습니다.


17. dig / nslookup 

도메인 이름 서버 (DNS)는 일련의 응용 프로그램 서버에 대한 URL을 확인하는 데 도움이됩니다.

그러나 응용 프로그램의 연결 문제를 일으키는 URL이 확인되지 않을 수 있습니다.

예를 들어 응용 프로그램 호스트의 mydatabase URL에서 데이터베이스에 액세스하려고 시도했다고 가정 해보십시오.

"확인할 수 없음"오류가 발생할 때, dig (DNS 조회 유틸리티) 또는 nslookup (인터넷 이름 서버 쿼리)을 사용하여 응용 프로그램이 데이터베이스를 확인할 수 없는 이유를 파악할 수 있습니다.


-------------------------------------------------

$ nslookup mydatabase

 Server:   10.0.2.3

 Address:  10.0.2.3#53


  ** server can't find mydatabase: NXDOMAIN

-----------------------------------------------


nslookup을 사용하면 mydatabase를 확인할 수 없음을 알 수 있습니다. dig로 같은 결과를 확인할 수 있습니다.


-------------------------------------------------

$ dig mydatabase

  ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> mydatabase

 ;; global options: +cmd

 ;; connection timed out; no servers could be reached

------------------------------------------------------------

이러한 오류는 여러 가지 문제로 인해 발생할 수 있습니다.

로컬 테스트의 경우 이 문제점은 호스트 네임 서버가 적절하게 구성되지 않았음을 나타낼 수 있습니다.


18. iptables 

iptables는 네트워크 방화벽과 마찬가지로 Linux 호스트에서 트래픽을 차단하거나 허용합니다.

이 도구는 특정 응용 프로그램이 요청을 수신하거나 전송하지 못하게 할 수 있습니다.

특히, 애플리케이션이 다른 엔드 포인트에 도달하는 데 어려움이 있는 경우 iptables은 엔드 포인트에 대한 트래픽을 거부 할 수 있습니다.

예를 들어, 응용 프로그램의 호스트가 365ok.co.kr에 연결할 수 없다고 상상해보십시오. curl을 사용하여 연결을 테스트합니다.


-------------------------------------------------------

$ curl -vvv 365ok.co.kr

 * About to connect() to 365ok.co.kr port 80 (#0)

 *   Trying 54.204.39.132...

 * Connection timed out

 * Failed connect to 365ok.co.kr:80; Connection timed out

 * Closing connection 0

 curl: (7) Failed connect to 365ok.co.kr:80; Connection timed out

-------------------------------------------------------------


연결 시간이 초과되었습니다. 무언가가 트래픽을 차단하고 있는 것으로 의심되므로 -S 옵션을 사용하여 iptables 규칙을 확인합니다.


--------------------------------------------------------

$ iptables -S

 -P INPUT DROP

 -P FORWARD DROP

 -P OUTPUT DROP

 -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

 -A INPUT -i eth0 -p udp -m udp --sport 53 -j ACCEPT

 -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT

 -A OUTPUT -o eth0 -p udp -m udp --dport 53 -j ACCEPT

-----------------------------------------------------------

처음 세 규칙은 트래픽이 기본적으로 삭제됨을 보여줍니다.

나머지 규칙은 SSH 및 DNS 트래픽을 허용합니다.

로컬 개발 또는 테스트에 사용하는 호스트인 경우 iptables 명령을 사용하여 올바른 트래픽을 허용 할 수 있습니다.


19. sestatus 

일반적으로 SELinux (Linux 보안 모듈)는 엔터프라이즈에서 관리하는 응용 프로그램 호스트에서 실행됩니다.

SELinux는 호스트에서 실행되는 프로세스에 대한 최소 권한 액세스를 제공하여 잠재적으로 악성 프로세스가 시스템의 중요한 파일에 액세스하는 것을 방지합니다.

SELinux가 응용 프로그램을 차단하는지 확인하려면 tail 및 grep을 사용하여 / var / log / audit logging에서 "거부 된"메시지를 찾습니다.


---------------------------------------------------------------

$ sestatus

 SELinux status:                 enabled

 SELinuxfs mount:                /sys/fs/selinux

 SELinux root directory:         /etc/selinux

 Loaded policy name:             targeted

 Current mode:                   enforcing

 Mode from config file:          enforcing

 Policy MLS status:              enabled

 Policy deny_unknown status:     allowed

 Max kernel policy version:      28

--------------------------------------------------------------

위의 출력은 응용 프로그램의 호스트에 SELinux가 활성화되어 있음을 나타냅니다.


20. history 

테스트 및 디버깅을 위해 너무 많은 명령을 실행하면 유용한 명령을 잊어 버릴 수 있습니다!

모든 쉘에는 history 명령의 변형이 있습니다.

세션 시작 이후에 발행한 명령의 내역을 표시합니다.


---------------------------------------

$ history

     1  clear

     2  df -h

     3  du

------------------------------------------