20 리눅스 명령 모든 시스템 관리자는 알아야 할

새로운 도구와 다양한 개발 환경으로 파열 세계에서,그것은 어떤 개발자 나 엔지니어가 몇 가지 기본적인 시스템 관리자 명령을 배울 실질적으로 필요하다. 특정 명령 및 패키지는 개발자가 애플리케이션을 구성,문제 해결 및 최적화하는 데 도움이 될 수 있으며,문제가 발생하면 운영자와 시스템 관리자에게 중요한 분류 정보를 제공합니다.

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

컬 응용 프로그램의 끝점 또는 업스트림 서비스 끝점에 대한 연결을 테스트하려면 이 명령을 사용합니다. 컬은 응용 프로그램이 데이터베이스와 같은 다른 서비스에 도달 할 수 있는지 확인하거나 서비스가 정상인지 확인하는 데 유용 할 수 있습니다.

예를 들어,응용 프로그램에서 데이터베이스에 도달할 수 없음을 나타내는 오류가 발생한다고 가정합니다:

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

-나는 옵션은 헤더 정보를 표시하고-의 옵션은 응답 본문을 침묵. 로컬 데스크톱에서 데이터베이스의 끝점 확인:

$ 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'

응용 프로그램에서 데이터베이스를 확인할 수 없습니다.

파이썬.이 문제를 해결하려면 다음 단계를 따르세요. 때때로,당신은 특정 항목을 찾기 위해 제이슨 출력을 꽤 인쇄 할 수 있습니다. 이 프로그램은 자바 바이트코드 프로그램의 갯수를 카운트하고,스크립트의 메인 형식을 합계냅니다,그리고 확인되지 않은 실행 텍스트 파일을 찾습니다.. 당신은 파이썬을 사용합니다.도구 들여 쓰기와 제이슨을 구성 할 수 있습니다. 파이썬의 모듈을 사용하려면,파이썬 파일의 출력을 파이핑한다.도구 명령.

$ cat test.json
{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":}

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

$ cat test.json | python -m json.tool
{
"properties": {
"age": {
"description": "Age in years",
"minimum": 0,
"type": "integer"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
},
"required": ,
"title": "Person",
"type": "object"
}

특정 값을 추출하는 몇 가지 옵션을 제공합니다. 위의 파이썬 모듈과 같이 예쁜 인쇄를하려면 출력에 제이큐를 적용하십시오.

$ 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":
}

시스템 관리자와 개발자는이 명령을 자주 발행합니다. 컨테이너 공간에서 이 명령은 컨테이너 이미지의 디렉토리와 파일을 결정하는 데 도움이 될 수 있습니다. 파일을 찾는 것 외에도 권한을 검사하는 데 도움이 될 수 있습니다. 아래 예제에서는 권한 문제로 인해 내 앱을 실행할 수 없습니다. 사용 권한을 확인하면 읽기 및 쓰기 전용 권한에”엑스”가 없다는 것을 알 수 있습니다.

$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp

꼬리

꼬리 파일의 마지막 부분을 표시합니다. 일반적으로 문제를 해결하기 위해 모든 로그 라인이 필요하지 않습니다. 대신 응용 프로그램에 대한 가장 최근의 요청에 대해 로그가 말하는 내용을 확인하려고 합니다. 예를 들어,당신은 당신이 당신의 아파치 웹 서버에 요청을 할 때 로그에서 어떤 일이 발생하는지 확인하기 위해 꼬리를 사용할 수 있습니다.

예시 _테일.2317>

아파치 로그에 따라 요청을 볼 수 있습니다.

이 옵션은 파일에 기록될 때 로그 줄을 출력하는”팔로우”옵션을 나타냅니다. 이 예제에는 몇 초마다 끝점에 액세스하고 로그에 요청을 기록하는 백그라운드 스크립트가 있습니다. 대신 실시간으로 로그를 다음,당신은 또한 파일의 마지막 100 줄을 볼 꼬리를 사용할 수 있습니다-엔 옵션.

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

고양이

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

$ cat requirements.txt
flask
flask_pymongo

위의 예제는 파이썬 플라스크 응용 프로그램에 플라스크가 종속성으로 나열되어 있는지 여부를 확인합니다.

그렙

그렙은 파일 패턴을 검색합니다. 다른 명령의 출력에서 특정 패턴을 찾고 있다면,그렙은 관련 라인을 강조 표시합니다. 이 명령을 사용하여 로그 파일,특정 프로세스 등을 검색할 수 있습니다. 아파치 바람둥이가 시작되는지 확인하려면,당신은 라인의 수에 의해 압도 될 수 있습니다. 해당 출력을 그렙 명령에 파이핑하여 서버 시작을 나타내는 줄을 분리합니다.

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

이 명령을 사용하여 실행 중인 응용 프로그램을 확인하거나 예상 프로세스를 확인합니다. 예를 들어,실행 중인 톰캣 웹 서버를 확인하려면 해당 옵션을 사용하여 톰캣의 프로세스 아이디를 얻습니다.

$ 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 -ef | grep tomcat
root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi

환경

환경 변수를 설정하거나 인쇄할 수 있습니다. 문제 해결 중에 잘못된 환경 변수로 인해 응용 프로그램이 시작되지 않는지 확인하는 데 유용할 수 있습니다. 아래 예제에서 이 명령은 응용 프로그램의 호스트에 설정된 환경 변수를 확인하는 데 사용됩니다.

$ 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

응용 프로그램이 파이썬을 사용하고 있으며 환경 변수를 사용하여 데이터베이스에 연결할 수 있습니다.

상단

상단 표시 및 업데이트 프로세스 정보를 정렬. 이 모니터링 도구를 사용하여 실행 중인 프로세스와 사용 중인 메모리 및 프로세서 양을 확인할 수 있습니다. 일반적인 경우는 응용 프로그램을 실행할 때 발생하며 1 분 후에 종료됩니다. 먼저 메모리 오류인 응용 프로그램의 반환 오류를 확인합니다.

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

응용 프로그램의 메모리가 실제로 부족합니까? 응용 프로그램이 사용하는 메모리 양을 확인합니다. 상단을 발행 할 때,당신은 메모리 사용량 상승과 함께,대부분의 중앙 처리 장치를 사용하는 파이썬 응용 프로그램을 발견하고,그것이 당신의 응용 프로그램입니다 의심. 마우스를 사용 하 여 게임을 제어. 그것은 당신의 메모리 집약적 인 응용 프로그램으로 밝혀졌습니다(memeater.py 응용 프로그램의 메모리가 부족하면 메모리 부족 오류로 시스템이 응용 프로그램을 종료합니다.

예제 _탑.모든 메모리를 소비하는 응용 프로그램에 대해 맨 위를 발행합니다.

응용 프로그램의 메모리 사용량이 증가,결국 움-살해되고.

예를 들어상단을 실행하는 동안 기음을 누르면 전체 명령이 표시됩니다.

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

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

네트워크 상태

네트워크 상태를 표시합니다. 이 명령은 사용 중인 네트워크 포트와 들어오는 연결을 보여줍니다. 그러나,넷스탯은 리눅스에서 즉시 사용되지는 않는다. 이 프로그램은 자바 바이트코드 프로그램의 갯수를 카운트하고,스크립트의 메인 형식을 합계냅니다,그리고 확인되지 않은 실행 텍스트 파일을 찾습니다.. 로컬에서 실험하거나 응용 프로그램을 호스트에 푸시하는 개발자는 포트가 이미 할당되었거나 주소가 이미 사용 중이라는 오류가 나타날 수 있습니다. 프로토콜,프로세스 및 포트 옵션과 함께 넷스탯을 사용하면 아파치 웹서버가 이미 아래 호스트에서 포트 80 을 사용하고 있음을 알 수 있다.

예:네트워크 상태.아파치가 포트에서 실행 중인지 확인합니다.80

아파치가 이미 이 컴퓨터에서 포트 80 을 사용하고 있음을 보여줍니다.

호스트에서 작동하지 않는 경우 이 패키지와 함께 설치해야 합니다. 응용 프로그램 호스트의 인터페이스 및 주소를 표시합니다. 컨테이너 또는 호스트의 아이피 주소를 확인하기 위해 아이피 주소를 사용합니다. 예를 들어 컨테이너가 두 개의 네트워크에 연결되면 어떤 인터페이스가 어떤 네트워크에 연결되는지 표시할 수 있습니다. 간단한 확인을 위해,당신은 항상 호스트의 아이피 주소를 얻기 위해 아이피 주소 명령을 사용할 수 있습니다. 아래 예제에서는 웹 계층 컨테이너의 주소가 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

응용 프로그램과 연결된 열린 파일을 나열합니다. 이 패키지에는 디버깅 심볼이 들어 있습니다. 리눅스에서는 시스템과의 거의 모든 상호 작용이 파일처럼 취급됩니다. 따라서 응용 프로그램이 파일에 쓰거나 네트워크 연결을 열면 해당 상호 작용이 파일로 반영됩니다. 이 패키지에는 주 프로그램 바이너리와 미리 컴파일된 대수 및 자동 로드 모듈이 전부 들어있습니다. 예를 들어 포트 80 이 사용 중인지 확인하려면 포트 80 을 사용하여 어떤 프로세스가 사용 중인지 확인합니다. 아래에서 아파치(아파치)가 포트 80 에서 수신 대기하는 것을 볼 수 있습니다. 이 프로그램은 선택된 사용자가 자신의 암호를 사용해서,루트 또는 다른 사용자 권한의 쉘을 얻을 수 있도록 합니다.

예시

공정정보의 출처를 밝힌다.

포트 80 을 수신합니다. 또한 아파치가 실행하기 위해 필요한 모든 파일을 보여줍니다.

열려 있는 파일 목록에서 열려 있는 파일의 이름은 프로세스의 기원,특히 아파치를 정확하게 파악하는 데 도움이 됩니다.사용 가능한 디스크 공간 표시)를 사용하여 디스크 공간 문제를 해결할 수 있습니다. 컨테이너 오케스트레이터에서 응용 프로그램을 실행할 때 컨테이너 호스트의 여유 공간 부족을 알리는 오류 메시지가 나타날 수 있습니다. 디스크 공간을 관리 하 고 시스템 관리자에 의해 최적화 해야 하는 동안 디렉터리에 있는 기존 공간을 파악 하 고 실제로 공간이 있는지 확인 합니다.

$ 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

이 옵션은 사람이 읽을 수 있는 형식으로 정보를 출력합니다. 그러나 명령의 일부로 디렉터리를 제공하여 결과를 제한할 수도 있습니다.

디렉터리의 디스크 공간을 사용하는 파일에 대한 자세한 정보를 검색하려면 다음 명령을 사용할 수 있습니다. 예를 들어,로그 디렉토리에서 가장 많은 공간을 차지하는 로그를 찾으려면 전체 크기에 대한 옵션을 사용할 수 있습니다.

$ 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

위의 예제에서는 로그에서 가장 큰 디렉토리를 보여 줍니다. 응용 프로그램 호스트의 디스크 공간을 활용하는지 확인할 수 있습니다.

아이디

응용 프로그램을 실행하는 사용자를 확인하려면 아이디 명령을 사용하여 사용자 신원을 반환합니다. 아래 예제에서는 방랑자를 사용하여 응용 프로그램을 테스트하고 개발 환경을 격리합니다. 방랑 상자에 로그인한 후 아파치 웹 서버(종속성)를 설치 하려고 하면 시스템 상태 루트로 명령을 수행할 수 없습니다. 사용자 및 그룹을 확인하려면 아이디 명령을 실행하고”방랑자”그룹에서”방랑자”사용자로 실행 중임을 알 수 있습니다.

$ 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

이 문제를 해결하려면 상승된 권한을 제공하는 수퍼 유저로 명령을 실행해야 합니다.

호스트에서 응용 프로그램 바이너리를 처음 실행할 때”사용 권한이 거부되었습니다.”응용 프로그램 바이너리의 사용 권한을 확인할 수 있습니다.

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

바이너리를 실행할 실행 권한이 없음을 나타냅니다. 사용자가 바이너리를 실행할 수 있도록 권한을 수정할 수 있습니다.

$ chmod +x test.sh
$ ls -l
total 4
-rwxrwxr-x. 1 vagrant vagrant 34 Jul 11 02:17 test.sh

예제에서 설명한 것처럼 실행 권한으로 사용 권한을 업데이트합니다. 이제 바이너리를 실행하려고 할 때 응용 프로그램에서 권한 거부 오류가 발생하지 않습니다. 컨테이너에 바이너리를 로드할 때도 유용할 수 있습니다. 컨테이너에 바이너리를 실행할 수 있는 올바른 권한이 있는지 확인합니다.응용 프로그램 서버 집합에 대한 정보를 확인할 수 있습니다. 응용 프로그램에 대한 연결 문제가 발생할 수 있습니다. 예를 들어 응용 프로그램의 호스트에서 데이터베이스에 액세스하려고 한다고 가정해 보겠습니다. 대신”해결할 수 없습니다”오류가 나타납니다. 이 문제를 해결하려면 응용 프로그램이 데이터베이스를 해결할 수 없는 이유를 알아내야 합니다.이 문제를 해결할 수 없습니다. 발굴로 해결하려고하면 동일한 결과를 얻을 수 있습니다.

$ 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

이러한 오류는 여러 가지 문제로 인해 발생할 수 있습니다. 근본 원인을 디버깅할 수 없는 경우 시스템 관리자에게 연락하여 더 많은 조사를 받으십시오. 로컬 테스트의 경우 이 문제는 호스트의 네임서버가 적절하게 구성되지 않았음을 나타낼 수 있습니다. 이러한 명령을 사용하려면 바인드 유틸리티 패키지를 설치해야 합니다.이 명령은 리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,이 명령은 리눅스에서 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문에,리눅스에서 방화벽이 설치되었기 때문이다. 이 도구는 감염을 교체하고 또한 컴퓨터가 더 빨리 만들 수 있습니다. 이 명령을 사용하면 컴퓨터에서 허용하는 발신 및 수신 네트워크 트래픽을 관리하는 규칙을 설정할 수 있습니다. 이러한 규칙을 영역으로 그룹화할 수 있으므로 요구 사항에 따라 한 규칙 집합에서 다른 규칙 집합으로 빠르고 쉽게 이동할 수 있습니다.

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

$ 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

이 패키지에는 디버깅 심볼이 들어 있습니다. 당신은 당신이 가장 중요한 옵션을 기억하는 데 도움이 우리의 방화벽 치트 시트를 다운로드 할 수 있습니다.일반적으로 셀리눅스(리눅스 보안 모듈)는 엔터프라이즈가 관리하는 응용 프로그램 호스트에 적용됩니다. 셀리눅스는 호스트에서 실행 중인 프로세스에 대한 최소 권한 액세스를 제공하여 잠재적으로 악의적인 프로세스가 시스템의 중요한 파일에 액세스하는 것을 방지합니다. 경우에 따라 응용 프로그램에서 특정 파일에 액세스해야 하지만 오류가 발생할 수 있습니다. 응용 프로그램을 차단하는지 확인하려면 로그/감사 로깅에서”거부됨”메시지를 찾습니다. 그렇지 않으면 셀리눅스가 활성화되어 있는지 확인할 수 있습니다.

$ 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

위의 출력은 응용 프로그램의 호스트에 셀리눅스가 활성화되어 있음을 나타냅니다. 로컬 개발 환경에서는 셀리눅스를 좀 더 허용하도록 업데이트할 수 있습니다. 원격 호스트에 대한 도움이 필요한 경우 시스템 관리자는 응용 프로그램이 필요한 파일에 액세스할 수 있도록 하는 최상의 방법을 결정하는 데 도움을 줄 수 있습니다. 자주 셀리 눅스와 상호 작용하는 경우,빠른 참조를 위해 우리의 셀리 눅스 치트 시트를 다운로드 할 수 있습니다.

역사

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

$ history
1 clear
2 df -h
3 du

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

예 _역사.히스토리에서 명령 다시 실행

추가! 실행하려는 명령 번호 앞에 명령을 다시 실행합니다.

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

이 기사는 원래 2017 년 7 월에 출판되었으며 편집자가 업데이트했습니다.



+