분류 기타

모든 시스템 관리자가 알아야 할 20 가지 Linux 명령

컨텐츠 정보

  • 조회 19 (작성일 )

본문

응용 프로그램이 작동하지 않거나 더 많은 정보를 찾고 있는 경우 이 20 개의 명령이 유용합니다.


새로운 도구와 다양한 개발 환경이 가득한 세상에서 개발자나 엔지니어는 기본 sysadmin 명령을 배우는 것이 사실상 필수입니다. 특정 명령 및 패키지는 개발자가 응용 프로그램을 구성, 문제 해결 및 최적화 하는 데 도움이 될 수 있으며 문제가 발생할 경우 운영자와 시스템 관리자에게 귀중한 분류 정보를 제공 할 수 있습니다.


새로운 개발자이든 자체 애플리케이션을 관리하려는 경우에도 다음 20 가지 기본 sysadmin 명령을 사용하면 애플리케이션을 더 잘 이해할 수 있습니다. 또한 응용 프로그램이 로컬에서 작동하지만 원격 호스트에서는 작동하지 않는 이유를 해결하는 시스템 관리자에게 문제를 설명하는 데 도움이 될 수 있습니다. 이러한 명령은 Linux 개발 환경, 컨테이너, 가상 머신 (VM) 및 베어 메탈에 적용됩니다.


1. curl 


curl은 URL을 전송합니다. 이 명령을 사용하여 애플리케이션의 엔드 포인트 또는 업스트림 서비스 엔드 포인트에 대한 연결을 테스트합니다. curl은 애플리케이션이 데이터베이스와 같은 다른 서비스에 도달 할 수 있는지 확인하거나 서비스가 정상인지 확인하는 데 유용할 수 있습니다.


예를 들어 애플리케이션에서 MongoDB 데이터베이스에 연결할 수 없음을 나타내는 HTTP 500 오류가 발생한다고 가정 해보십시오.


$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR 


-I 옵션은 헤더 정보를 표시하고 -s 옵션은 응답 본문을 음소거합니다. 로컬 데스크톱에서 데이터베이스 끝점 확인 :


$ curl -I -s database:27017
HTTP/1.0 200 OK 


그렇다면 무엇이 문제일까요? 애플리케이션이 애플리케이션 호스트에서 데이터베이스 이외의 다른 위치로 이동할 수 있는지 확인하십시오.


$ curl -I -s https://opensource.com
HTTP/1.1 200 OK 


괜찮은 것 같습니다. 이제 애플리케이션 호스트에서 데이터베이스에 접속 해 보십시오. 애플리케이션이 데이터베이스의 호스트 이름을 사용하고 있으므로 먼저 시도해보십시오.


$ curl database:27017
curl: (6) Couldn't resolve host 'database' 


이는 데이터베이스의 URL을 사용할 수 없거나 호스트 (컨테이너 또는 VM)에 호스트 이름을 확인하는 데 사용할 수 있는 네임 서버가 없기 때문에 애플리케이션이 데이터베이스를 확인할 수 없음을 나타냅니다.


2. python -m json.tool / jq 


curl을 실행 한 후 API 호출의 출력을 읽기 어려울 수 있습니다. 때로는 특정 항목을 찾기 위해 JSON 출력을 예쁘게 인쇄하고 싶을 때가 있습니다. Python에는 이를 지원할 수 있는 기본 제공 JSON 라이브러리가 있습니다. python -m json.tool을 사용하여 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"]} 


Python 라이브러리를 사용하려면 -m (모듈) 옵션을 사용하여 출력을 Python으로 파이프합니다.


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 입력에서 특정 값을 추출하는 몇 가지 옵션을 제공합니다. 위의 Python 모듈처럼 예쁘게 인쇄하려면 출력에 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는 디렉토리의 파일을 나열합니다. 시스템 관리자와 개발자는 이 명령을 자주 실행합니다. 컨테이너 공간에서 이 명령어는 컨테이너 이미지의 디렉터리와 파일을 확인하는 데 도움이 될 수 있습니다. ls는 파일을 찾는 것 외에도 권한을 검사하는 데 도움이 될 수 있습니다. 아래 예에서는 권한 문제로 인해 myapp을 실행할 수 없습니다. ls -l을 사용하여 권한을 확인하면 권한이 읽기 및 쓰기 전용인 -rw-r--r--에 "x"가 없음을 알 수 있습니다.


$ ./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 서버에 요청할 때 로그에서 어떤 일이 발생하는지 확인할 수 있습니다.

Use tail -f to follow Apache HTTP server logs and see the requests as they happen. 

tail -f를 사용하여 Apache HTTP 로그를 따르고 요청이 발생하면 이를 확인합니다.


-f 옵션은 파일에 기록 된 로그 행을 출력하는 "follow"옵션을 나타냅니다. 이 예제에는 몇 초마다 엔드 포인트에 액세스하는 백그라운드 스크립트가 있으며 로그는 요청을 기록합니다. 실시간으로 로그를 따르는 대신 tail을 사용하여 -n 옵션을 사용하여 파일의 마지막 100 줄을 볼 수도 있습니다.


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


5. cat 


cat은 파일을 연결하고 인쇄합니다. cat을 실행하여 종속성 파일의 내용을 확인하거나 이미 로컬로 빌드한 애플리케이션의 버전을 확인할 수 있습니다.

cat requirements.txt
flask
flask_pymongo 


위의 예는 Python Flask 애플리케이션에 Flask가 종속성으로 나열되어 있는지 확인합니다.


6. grep 


grep은 파일 패턴을 검색합니다. 다른 명령의 출력에서 ​​특정 패턴을 찾는 경우 grep은 관련 행을 강조 표시합니다. 로그 파일, 특정 프로세스 등을 검색하려면 이 명령을 사용하십시오. Apache Tomcat이 시작되는지 확인하려면 줄 수에 압도 당할 수 있습니다. 해당 출력을 grep 명령어로 파이핑하여 서버 시작을 나타내는 줄을 분리합니다.


cat tomcat.log | grep org.apache.catalina.startup.Catalina.start
01-Jul-2017 18:03:47.542 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 681 ms 


7. ps 


프로세스 ID를 조사하는 데 유용한 명령을 제공하는 procps-ng 패키지의 일부인 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 


애플리케이션이 Python을 사용 중이며 MongoDB 데이터베이스에 연결하기 위한 환경 변수가 있습니다.


9. top 


top은 정렬 된 프로세스 정보를 표시하고 업데이트합니다. 이 모니터링 도구를 사용하여 실행 중인 프로세스와 이들이 소비하는 메모리 및 CPU의 양을 확인하십시오. 일반적인 경우는 애플리케이션을 실행할 때 발생하며 1 분 후에 종료됩니다. 먼저 메모리 오류인 애플리케이션의 반환 오류를 확인합니다.


tail myapp.log
Traceback (most recent call last):
MemoryError 


응용 프로그램이 정말 메모리가 부족합니까? 확인하려면 top을 사용하여 애플리케이션이 소비하는 CPU 및 메모리 양을 확인합니다. top을 발행 할 때 메모리 사용량이 증가하는 대부분의 CPU를 사용하는 Python 애플리케이션을 발견하고 해당 애플리케이션이 애플리케이션인지 의심합니다. 실행되는 동안 "C"키를 눌러 전체 명령을 확인하고 프로세스가 애플리케이션 인 경우 리버스 엔지니어링합니다. 메모리 집약적 인 애플리케이션 (memeater.py)으로 밝혀졌습니다. 응용 프로그램의 메모리가 부족하면 시스템이 메모리 부족 (OOM) 오류와 함께 이를 종료합니다.


Issuing top against an application that consumes all of its memory. 

응용 프로그램의 메모리 및 CPU 사용량이 증가하여 결국 OOM이 종료됩니다.


Pressing C while running top shows the full command 

"C"키를 누르면 응용 프로그램을 시작한 전체 명령을 볼 수 있습니다.


자체 애플리케이션을 확인하는 것 외에도 top을 사용하여 CPU 또는 메모리를 사용하는 다른 프로세스를 디버깅 할 수 있습니다.


10. netstat 


netstat는 네트워크 상태를 보여줍니다. 이 명령은 사용 중인 네트워크 포트와 들어오는 연결을 보여줍니다. 그러나 netstat는 Linux에서 기본적으로 제공되지 않습니다. 설치해야 하는 경우 net-tools 패키지에서 찾을 수 있습니다. 로컬에서 실험하거나 애플리케이션을 호스트에 푸시하는 개발자는 포트가 이미 할당되었거나 주소가 이미 사용 중이라는 오류를 수신 할 수 있습니다. 프로토콜, 프로세스 및 포트 옵션과 함께 netstat를 사용하면 Apache HTTP 서버가 이미 아래 호스트에서 포트 80을 사용하고 있음을 보여줍니다.


netstat verifies that Apache is running on port 80 

netstat -tulpn을 사용하면 Apache가 이미 이 시스템에서 포트 80을 사용하고 있음을 보여줍니다.


11. ip


호스트에서 IP 주소가 작동하지 않으면 iproute2 패키지와 함께 설치해야 합니다. 하위 명령 주소 (또는 간단히 ip a)는 애플리케이션 호스트의 인터페이스와 IP 주소를 보여줍니다. ip 주소를 사용하여 컨테이너 또는 호스트의 IP 주소를 확인합니다. 예를 들어 컨테이너가 두 개의 네트워크에 연결된 경우 ip 주소는 어떤 인터페이스가 어떤 네트워크에 연결되는지 표시 할 수 있습니다. 간단한 확인을 위해 항상 ip address 명령을 사용하여 호스트의 IP 주소를 가져올 수 있습니다. 아래 예는 웹 계층 컨테이너의 IP 주소가 eth0 인터페이스에 172.17.0.2임을 보여줍니다.


ip address show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether d4:3b:04:9e:b2:c2 brd ff:ff:ff:ff:ff:ff
    inet 10.1.1.3/27 brd 10.1.1.31 scope global dynamic noprefixroute eth0
       valid_lft 52072sec preferred_lft 52072sec 


12. lsof 


lsof는 응용 프로그램과 관련된 열린 파일을 나열합니다. 일부 Linux 머신 이미지에서는 lsof 패키지와 함께 lsof를 설치해야 합니다. Linux에서 시스템과의 거의 모든 상호 작용은 파일처럼 처리됩니다. 결과적으로 애플리케이션이 파일에 쓰거나 네트워크 연결을 열면 lsof는 해당 상호 작용을 파일로 반영합니다. netstat와 유사하게 lsof를 사용하여 수신 대기 포트를 확인할 수 있습니다. 예를 들어 포트 80이 사용 중인지 확인하려면 lsof를 사용하여 어떤 프로세스가 사용 중인지 확인합니다. 아래에서 httpd (Apache)가 포트 80에서 수신하는 것을 볼 수 있습니다. 또한 lsof를 사용하여 httpd의 프로세스 ID를 확인하고 웹 서버의 바이너리가 있는 위치 (/usr/sbin/httpd)를 검사 할 수 있습니다.


lsof reveals the origin of process information 

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


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


13. df 


df (사용 가능한 디스크 공간 표시)를 사용하여 디스크 공간 문제를 해결할 수 있습니다. 컨테이너 오케스트레이터에서 애플리케이션을 실행할 때 컨테이너 호스트에 여유 공간이 부족함을 알리는 오류 메시지가 표시 될 수 있습니다. 디스크 공간은 시스템 관리자가 관리하고 최적화 해야 하지만 df를 사용하여 디렉토리의 기존 공간을 파악하고 실제로 공간이 부족한지 확인할 수 있습니다.


df -h
Filesystem            Size  Used Avail Use% Mounted on
devtmpfs              7.7G     0  7.7G   0% /dev
/dev/mapper/RHEL-Root  50G   16G   35G  31% /
/dev/nvme0n1p2        3.0G  246M  2.8G   9% /boot
/dev/mapper/RHEL-Home 100G   88G   13G  88% /home
/dev/nvme0n1p1        200M  9.4M  191M   5% /boot/efi
/dev/sdb1             114G   55G   54G  51% /run/media/tux/red 


-h 옵션은 사람이 읽을 수 있는 형식으로 정보를 인쇄합니다. 기본적으로 예제에서와 같이 df는 루트 디렉토리 아래의 모든 항목에 대한 결과를 제공하지만 명령의 일부로 디렉토리를 제공하여 결과를 제한 할 수도 있습니다 (예 : df -h / home).


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를 반환하십시오. 아래 예에서는 Vagrant를 사용하여 애플리케이션을 테스트하고 개발 환경을 격리합니다. Vagrant 상자에 로그인 한 후 Apache HTTP Server (종속성)를 설치하려고 하면 루트로 명령을 수행 할 수 없다고 시스템에 표시됩니다. 사용자 및 그룹을 확인하려면 id 명령을 실행하고 "vagrant"그룹에서 "vagrant"사용자로 실행 중인지 확인하십시오.


$ dnf -y install httpd
Loaded plugins: fastestmirror
You need to be root to perform this command.
id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 


이를 수정하려면 높은 권한을 제공하는 수퍼 유저로 명령을 실행해야 합니다.


16. chmod 


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


ls -l
total 4
-rw-rw-r--. 1 vagrant vagrant 34 Jul 11 02:17 test.sh 


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


chmod +x test.sh
[vagrant@localhost ~]ls -l
total 4
-rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh 


예에서 설명한 대로 실행 권한으로 권한을 업데이트합니다. 이제 바이너리를 실행하려고 할 때 응용 프로그램에서 권한 거부 오류가 발생하지 않습니다. Chmod는 바이너리를 컨테이너에 로드 할 때도 유용 할 수 있습니다. 컨테이너에 바이너리를 실행할 수 있는 올바른 권한이 있는지 확인합니다.


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 


이러한 오류는 다양한 문제로 인해 발생할 수 있습니다. 근본 원인을 디버깅 할 수 없는 경우 자세한 조사를 위해 시스템 관리자에게 문의하십시오. 로컬 테스트의 경우 이 문제는 호스트의 네임 서버가 적절하게 구성되지 않았 음을 나타낼 수 있습니다. 이 명령어를 사용하려면 BIND 유틸리티 패키지를 설치해야 합니다.


18. firewall-cmd 


전통적으로 방화벽은 iptables 명령을 사용하여 Linux에서 구성되었으며 편재성을 유지하면서 실제로는 nftables로 대체되었습니다. nftables에 대한 친숙한 프런트 엔드이며 기본적으로 많은 배포판과 함께 제공되는 것은 firewall-cmd입니다. 이 명령을 사용하면 컴퓨터가 허용하는 발신 및 수신 네트워크 트래픽을 제어하는 ​​규칙을 설정할 수 있습니다. 이러한 규칙을 영역으로 그룹화 할 수 있으므로 요구 사항에 따라 한 규칙 집합에서 다른 규칙 집합으로 빠르고 쉽게 이동할 수 있습니다.


명령 구문은 간단합니다. 명령과 몇 가지 옵션을 사용하며, 모두 사람이 읽을 수 있는 문장을 거의 구성하는 데 도움이 되는 방식으로 이름이 지정됩니다. 예를 들어 현재 어떤 영역에 있는지 확인하려면 :


sudo firewall-cmd --get-active-zones``
corp
  interfaces: ens0
dmz
  interfaces: ens1 


이 예에서 컴퓨터에는 두 개의 네트워크 장치가 있으며 하나는 corp 영역에 할당되고 다른 하나는 dmz 영역에 할당됩니다.


각 영역에서 허용하는 항목을 확인하려면 --list-all 옵션을 사용할 수 있습니다.


sudo firewall-cmd --zone corp --list-all
corp
  target: default
  interfaces: ens0
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
[...] 


서비스 추가는 다음과 같이 쉽습니다.


sudo firewall-cmd --add-service http --permanent
sudo firewall-cmd --reload 


firewall-cmd와의 상호 작용은 직관적으로 설계되었으며 광범위한 사전 정의 된 서비스 모음과 nft 규칙을 직접 작성할 수 있는 기능이 있습니다. firewall-cmd 사용을 시작하면 가장 중요한 옵션을 기억하는 데 도움이 되는 firewall-cmd 치트 시트를 다운로드 할 수 있습니다.


19. sestatus 


일반적으로 엔터프라이즈에서 관리하는 애플리케이션 호스트에 적용되는 SELinux (Linux 보안 모듈)를 찾습니다. SELinux는 호스트에서 실행되는 프로세스에 대한 최소 권한 액세스를 제공하여 잠재적으로 악의적 인 프로세스가 시스템의 중요한 파일에 액세스하는 것을 방지합니다. 경우에 따라 애플리케이션이 특정 파일에 액세스해야 하지만 오류가 발생할 수 있습니다. SELinux가 애플리케이션을 차단하는지 확인하려면 tail 및 grep을 사용하여 /var/log/audit 로깅에서 "거부"메시지를 찾으십시오. 그렇지 않으면 sestatus를 사용하여 상자에 SELinux가 활성화되어 있는지 확인할 수 있습니다.


$ 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가 활성화되었음을 나타냅니다. 로컬 개발 환경에서 SELinux를 더 관대하게 업데이트 할 수 있습니다. 원격 호스트에 대한 도움이 필요한 경우 시스템 관리자가 응용 프로그램이 필요한 파일에 액세스 할 수 있도록 허용하는 모범 사례를 결정하는 데 도움을 줄 수 있습니다. SELinux와 자주 상호 작용하는 경우 빠른 참조를 위해 SELinux 치트 시트를 다운로드하십시오.


20. history 


테스트 및 디버깅을 위해 너무 많은 명령을 실행하면 유용한 명령을 잊어 버릴 수 있습니다! 모든 쉘에는 히스토리 명령의 변형이 있습니다. 세션 시작 이후 발행 한 명령의 내역을 보여줍니다. 히스토리를 사용하여 애플리케이션 문제를 해결하는 데 사용한 명령을 기록 할 수 있습니다. 예를 들어,이 기사의 과정에서 히스토리를 발행 할 때 실험하고 배운 다양한 명령을 보여줍니다.


history
    1  clear
    2  df -h
    3  du 


이전 기록에서 명령을 실행하고 싶지만 다시 입력하고 싶지 않으면 어떻게 합니까? 사용하다 ! 재실행 할 명령 번호 앞에.


Re-execute a command in your history 

추가! 실행하려는 명령 번호가 명령을 다시 실행하기 전에.


기본 명령은 응용 프로그램이 한 개발 환경에서는 작동하지만 다른 개발 환경에서는 작동하지 않는 이유를 결정할 때 문제 해결 전문 지식을 향상 시킬 수 있습니다. 많은 시스템 관리자가 이러한 명령을 활용하여 시스템 문제를 디버깅 합니다. 이러한 유용한 문제 해결 명령 중 일부를 이해하면 시스템 관리자와 통신하고 응용 프로그램의 문제를 해결하는 데 도움이 될 수 있습니다.


https://opensource.com/article/17/7/20-sysadmin-commands