[Linux] 시스템 명령어

728x90

시스템 정보 관련 명령어

uptime

현재 시간, 시스템이 실행된 시간, 현재 로그인 한 사용자 수, 지난 1분, 5분, 15분 의 시스템 로드의 평균 값(CPU 평균값)이 나온다.

 

[root@localhost ~]# uptime
 21:30:22 up  7:56,  5 users,  load average: 0.00, 0.00, 0.00

free

free 는 메모리 사용량과 관련된 명령어로, 메모리 자원에 관한 것을 보여준다.

 

[root@localhost ~]# free
            total       used         free         shared   buff/cache   available
Mem:        1831820     1093696      267200        6092      470924      573688
Swap:       2097148      395264     1701884

 

total = used + free + buff/cache

used = 커널이 사용하는 공간 + buff/cache

cpu > RAM > disk 순으로 속도가 빠르다. 디스크의 속도가 너무 느리기 때문에 RAM 에서 디스크를 먼저 읽어들이고 cpu 가 RAM 의 데이터를 가져온다(램은 미리 disk 에서 데이터를 읽어 들였다.)

즉, RAM 의 역할은 cpu 의 캐시 역할을 해주는 것이다. 디스크를 읽어들일 때 조금 더 빨리 읽어올 수 있게 해준다.

top

top 은 프로세스의 동작과 프로세스 정보 확인, sleeping running stopped total zombie 의 갯수를 확인할 수 있고, 현재 작업 중인 task 들을 확인할 수 있다.

 

모든 프로그램들은 하나의 task 로 되어있고, task 들은 하나 이상의 쓰레드(프로세스)로 이루어져 있다. 즉, task 는 한 개 이상의 프로세스로 구성되어 있다. task 는 작업 단위이다.(크롬 브라우저 10 개가 열려도 크롬 브라우저의 task 는 크롬 한 개이다.)

예를 들어 10개의 크롬 브라우저가 열려 있고, 크롬 브라우저라는 1개의 task 가 있고, 이 크롬 브라우저는 10개의 쓰레드가 있다. 즉, 여러개의 크롬 브라우저가 띄어질 수 있기 때문에 한 개 이상의 쓰레드를 갖는 것이다.

부모 프로세스가 fork() 로 PID 와 메모리를 사용할 수 있는 권한을 할당 한다. 프로그램이 동작하면 프로세스라고 하고, 프로세스는 PID(Process ID) 를 받는다. 부모 프로세스가 fork() 로 자식 프로세스를 깨우면 프로그램이 실행이 되고, 자식 프로세스들에게 자원을 할당하고 상태에 따라 S, R, I 를 가진다.

 

S 는 Sleep, R 은 Run 이다. 즉 프로그램이 S 이면 잠들어 있는 상태이고 인터럽트 I 가 발생하면 R 로 상태가 변경된다. 부모 프로세스가 자식 프로세스를 죽이면 Exit 가 되고 자원이 다시 부모 프로세스로 돌아온다.

 

부모 프로세스가 죽으면 자식 프로세스도 전부 죽어야 하는데, 자식 프로세스가 죽지 않는 경우가 있다. 이것을 고아 프로세스라고 하는데, 고아 프로세스는 현재 없다. 조상 프로세스가 자식 프로세스의 자원을 모두 가져오기 때문이다.

 

자식 프로세스가 부모 프로세스로부터 Exit 명령을 받았는데 프로그램이 죽지 않는 경우가 있다. 이런 프로그램들을 좀비 프로세스라고 한다. 프로그램을 메모리 자원에서 정상적으로 종료되지 않는 것. 좀비 프로세스가 너무 많이 쌓이면 메모리가 꽉 차버려서 문제가 발생한다. 재실행하거나 프로세스 자체의 문제가 있는 것이다.

 

아래는 top 명령어를 실행했을 때 나오는 화면이다.

로그인 한 사용자 정보 확인 (w, who)

root@localhost ~]# ls -l /var/run/utmp
-rw-rw-r--. 1 root utmp 3456  2월 14 19:13 /var/run/utmp

[root@localhost ~]# file /var/run/utmp
/var/run/utmp: firmware 0 v0 (revision 0)   V2, 0 bytes or less, UNKNOWN2 0x38365f36, at 0x0 0 bytes , at 0x0 0 bytes

[root@localhost ~]# w
 21:36:08 up  8:02,  5 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty2     tty2             07:16   14:20m  3:19   0.67s /usr/libexec/tracker-miner-fs
user     tty3     -                07:28   14:04m  0.05s  0.05s -bash
root     tty4     -                07:28   14:03m  0.04s  0.04s -bash
root     tty6     -                07:33   14:03m  0.05s  0.05s -bash
root     pts/1    192.168.209.1    19:13    0.00s  0.34s  0.03s w

[root@localhost ~]# who
root     tty2         2022-02-14 07:16 (tty2)
user     tty3         2022-02-14 07:28
root     tty4         2022-02-14 07:28
root     tty6         2022-02-14 07:33
root     pts/1        2022-02-14 19:13 (192.168.209.1)

디렉토리 의미

/ : 최상위 디렉토리

/boot : 부팅 관련 디렉토리, booting 이미지가 로드된다.

/etc : 시스템 환경 설정 디렉토리

/usr : 시스템 구성 및 응용프로그램이 설치되는 디렉토리

/tmp : 응용 프로그램(프로세스) 에 대한 것을 임시 저장하는 디렉토리

/var : 시스템 운영 시 발생하는 정보를 임시 저장하는 디렉토리

/home : 사용자 홈디렉토리가 저장되는 디렉토리

/run : 현재 실행 중인 정보를 저장하는 디렉토리

 

아래와 같이 위의 디렉토리들의 의미가 합쳐져서 구성된다.

 

/usr/bin : 시스템의 명령어가 설치된 디렉토리

/var/run/utmp : 현재 접속한 사용자의 정보를 저장하는 디렉토리

디스크 용량사이즈

df : 디스크 용량 사이즈 확인

-h : size 정보를 B M G 단위로 변환해서 보여준다

-T : type 파일 시스템 정보를 알려주는 옵션

-P : 화면에 출력시 끊겨서 출력되는 것을 방지해주는 옵션

 

du : 특정 디렉토리의 용량 사이즈를 알려준다.

du -sh /etc

hostname, uname, cat /etc/*release 로 시스템 정보를 확인할 수 있다.

stat

디렉토리나 파일의 상세 정보를 표시하는 명령어이다. ls 명령어로는 표시되지 않는 정보를 확인할 때 사용한다.

 

-f : 해당 파일이 저장된 파일 시스템의 정보를 출력

-L : 심볼릭 링크를 역참조하여 원본 파일의 정보를 출력

-t : 디렉토리나 파일 정보를 요약해서 출력

-c : 사용자 정의 형식으로 정보를 출력

Format Sequence

-c 옵션을 이용해서 사용자 정의를 할 때 필요한 포맷이다.

%a
8진수로 된 파일 권한
%A
일반 rwx 형식의 파일 권한
%b
할당된 블록 수
%B
각 블록의 크기 (바이트 단위)
%d
10진수로 된 장치 번호
%D
16진수로 된 장치 번호
%f
16진수로 된 파일 유형
%F
파일 유형
%g
소유자의 그룹 ID
%G
소유자의 그룹 이름
%h
하드 링크 개수
%i
inode 번호
%m
마운트 포인트
%n
파일 이름
%N
심벌릭 링크일 경우 역 참조된 파일 이름
%s
파일의 총 크기 (바이트 단위)
%u
소유자의 사용자 ID
%U
소유자의 사용자 이름
%w
파일 생성 시간 (존재하지 않다면 -로 표시)
%x
파일 접근 시간 (Access)
%y
파일 수정 시간 (Modification - 파일 내용이 수정)
%z
파일 변경 시간 (Change - 파일 권한, 퍼미션과 같은 속성 변경)
[root@localhost ~]# ls -li aaa
68430434 -rw-r--r--. 2 root root 2658  2월 15 00:42 aaa

[root@localhost ~]# stat aaa
  File: aaa
  Size: 2658            Blocks: 8          IO Block: 4096   일반 파일
Device: 10303h/66307d   Inode: 68430434    Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-02-14 12:19:57.449069907 -0500
Modify: 2022-02-15 00:42:47.846396585 -0500
Change: 2022-02-15 00:42:51.407396472 -0500
 Birth: -

[root@localhost ~]# stat -f aaa
  File: "aaa"
    ID: 1030300000000 Namelen: 255     Type: xfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 12445505   Free: 11240169   Available: 11240169
Inodes: Total: 24903168   Free: 24781096

[root@localhost ~]# ls -l ccc
lrwxrwxrwx. 1 root root 3  2월 14 20:09 ccc -> aaa

[root@localhost ~]# stat ccc
  File: ccc -> aaa
  Size: 3               Blocks: 0          IO Block: 4096   심볼릭 링크
Device: 10303h/66307d   Inode: 67934266    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-02-14 20:09:32.806916337 -0500
Modify: 2022-02-14 20:09:32.805916338 -0500
Change: 2022-02-14 20:09:32.805916338 -0500
 Birth: -

[root@localhost ~]# stat -L ccc
  File: ccc
  Size: 2658            Blocks: 8          IO Block: 4096   일반 파일
Device: 10303h/66307d   Inode: 68430434    Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-02-14 12:19:57.449069907 -0500
Modify: 2022-02-15 00:42:47.846396585 -0500
Change: 2022-02-15 00:42:51.407396472 -0500
 Birth: -

[root@localhost ~]# stat -c %i aaa
68430434

[root@localhost ~]# ls -li aaa
68430434 -rw-r--r--. 2 root root 2658  2월 15 00:42 aaa

[root@localhost ~]# ls -li aaa | cut -d " " -f 1
68430434

[root@localhost ~]# stat -c %h *
2
1
2
1
1
2
1
5
2

 

find 

리눅스에서 파일 및 디렉토리를 검색할 때 사용하는 명령어이다.

find 명령에는 몇 가지 옵션과 많은 수의 표현식(Expression)이 존재한다. 일반적인 리눅스 명령어와 다르게 find 명령은 옵션보다 표현식이 더 많이 사용된다. find 명령의 검색 결과가 지정된 표현식의 조합에 따라 결정되기 때문이다.

find [OPTION...] [경로] [EXPRESSION...]
      OPTION
        -P        : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
        -L        : 심볼릭 링크에 연결된 파일 정보 사용.
        -H        : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
        -D        : 디버그 메시지 출력.
      EXPRESSION
        -name     : 지정된 문자열 패턴에 해당하는 파일 검색.
        -empty    : 빈 디렉토리 또는 크기가 0인 파일 검색.
        -delete   : 검색된 파일 또는 디렉토리 삭제.
        -exec     : 검색된 파일에 대해 지정된 명령 실행.
        -path     : 지정된 문자열 패턴에 해당하는 경로에서 검색.
        -print    : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
        -print0   : 검색 결과를 출력. 검색 항목은 null로 구분.
        -size     : 파일 크기를 사용하여 파일 검색.
        -type     : 지정된 파일 타입에 해당하는 파일 검색.
        -mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정.
        -maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정.
        -atime    : 파일 접근(access) 시각을 기준으로 파일 검색.
        -ctime    : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색.
        -mtime    : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색.

또한 표현식 사용 시 연산자(Operator) 를 사용하여 두 개 이상의 표현식 조합이 가능하다.

find 명령에서 두 개 이상의 표현식을 사용할 때 연산자를 지정하지 않으면, 기본적으로 -a (AND) 가 적용된다.

-empty -print == -empty -a -print

아래 표는 find 명령 사용 예제를 정리한 것이다.

현재 디렉토리에 있는 파일 및 디렉토리 리스트 표시 find
대상 디렉토리에 있는 파일 및 디렉토리 리스트 표시 find [PATH]
현재 디렉토리 아래 모든 파일 및 하위 디렉토리에서 파일 검색 find . -name [FILE]
전체 시스템(루트 디렉토리)에서 파일 검색 find / -name [FILE]
파일 이름이 특정 문자열로 시작하는 파일 검색 find . -name "STR*"
파일 이름에 특정 문자열이 포함된 파일 검색 find . -name "*STR*"
파일 이름이 특정 문자열로 끝나는 파일 검색 find . -name "*STR"
빈 디렉토리 또는 크기가 0인 파일 검색 find . -empty
특정 확장자를 가진 모든 파일 검색 후 삭제 find . -name "*.EXT" -delete
검색된 파일 리스트를 줄 바꿈 없이 이어서 출력하기 find . -name [FILE] -print0
파일 또는 디렉토리만 검색하기 find . -name [FILE] -type f
파일 크기를 사용하여 파일 검색 find . -size +[N]c -and -size -[M]c
검색된 파일에 대한 상세 정보 출력. (find + ls) find . -name [FILE] -exec ls -l {} \;
검색된 파일의 라인 수 출력. (find + wc) find . -name [FILE] -exec wc-l {} \;
검색된 파일에서 문자열 찾기. (find + grep) find . -name [FILE] -exec grep "STR" {} \;
검색 결과를 파일로 저장. (find, redirection) find . -name [FILE] > [SAVE_FILE]
검색 중 에러 메시지 출력하지 않기 (find, redirection) find . -name [FILE] 2> /dev/null
하위 디렉토리 검색하지 않기 find . -maxdepth 1 -name [FILE]
검색된 파일 복사. (find + cp) find . -name [FILE] -exec cp {} [PATH] \;
[root@localhost ~]# find / -name aaa
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa

[root@localhost ~]# find /root -type l -ls
 67934266      0 lrwxrwxrwx   1  root     root            3  2월 14 20:09 /root/ccc -> aaa
 68430426      0 lrwxrwxrwx   1  root     root            3  2월 14 20:10 /root/kbs2 -> kbs


[root@localhost ~]# find /root -type f -name aaa
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa


[root@localhost ~]# find /root -type f -name aaa -user root
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa


[root@localhost ~]# find /root -type f -name aaa -user 0
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa


[root@localhost ~]# find /root -type f -name aaa -user user

[root@localhost ~]# find /root -type f -name AAA
[root@localhost ~]# find /root -type f -iname AaA
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa

[root@localhost ~]# find / -type f  \( -name "html" -o -name "sh" \)  2>/dev/null
/usr/share/bash-completion/completions/sh


[root@localhost ~]# find / -type f  -name aa*
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa

[root@localhost ~]# find . -samefile aaa
./aaa
./bbb


[root@localhost ~]# find . -inum 68430434
./aaa
./bbb

[root@localhost ~]# ls -l aaa
-rw-r--r--. 2 root root 2658  2월 15 00:42 aaa 


[root@localhost ~]# chmod 777 aaa   
[root@localhost ~]# ls -l aaa
-rwxrwxrwx. 2 root root 2658  2월 15 00:42 aaa


[root@localhost ~]# find . -type f -perm 777 -ls
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./aaa
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./bbb


[root@localhost ~]# find . -type f -perm -001  -ls
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./aaa
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./bbb


[root@localhost ~]# find . -type f  -perm -020 -ls
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./aaa
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./bbb


[root@localhost ~]# find . -type f ! -perm -020 -ls
-perm  /u /g /o /a    r w x s t 


[root@localhost ~]# find . -type f -perm  /g=w -ls
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./aaa
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./bbb

[root@localhost ~]# find . -type f  -perm /o=x -ls
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./aaa
 68430434      4 -rwxrwxrwx   2  root     root         2658  2월 15 00:42 ./bbb


[root@localhost ~]# find . -type f  -perm /o=x
./aaa
./bbb


[root@localhost ~]# find . -type f  -perm /o=x -exec chmod 644 {} \;
[root@localhost ~]# find . -type f  -perm /o=x -ls
[root@localhost ~]# ls -l aaa bbb
-rw-r--r--. 2 root root 2658  2월 15 00:42 aaa
-rw-r--r--. 2 root root 2658  2월 15 00:42 bbb
mtime atime ctime  mmin amin cmin


[root@localhost ~]# find /root -type f  -mtime -1
/root/anaconda-ks.cfg
/root/.cache/dconf/user
/root/.cache/gnome-shell/update-check-3.32
/root/.cache/tracker/db-version.txt

[root@localhost ~]# find /root -type f -mmin -60
/root/.cache/tracker/meta.db
/root/.cache/tracker/meta.db-wal
/root/.cache/tracker/meta.db-shm
/root/.local/share/gvfs-metadata/root
/root/.local/share/gvfs-metadata/root-2e7b231c.log
/root/.local/share/tracker/data/tracker-store.journal
[root@localhost ~]# find /root -type f -mmin -120
/root/.cache/tracker/meta.db
/root/.cache/tracker/meta.db-wal
/root/.cache/tracker/meta.db-shm
/root/.local/share/gvfs-metadata/root
/root/.local/share/gvfs-metadata/root-2e7b231c.log
/root/.local/share/tracker/data/tracker-store.journal
/root/aaa
/root/bbb

[root@localhost ~]# find . -type f -size +50  -size -100  -print  <--------- 크기가 50 ~ 100 바이트 사이인 녀석 찾기
./.cache/tracker/meta.db-shm
./.cache/mozilla/firefox/pxtt36so.default-default/cache2/entries/96A3A367708E3D055E8AAFD2CC426BD24476E19E
./.cache/mozilla/firefox/pxtt36so.default-default/cache2/entries/E34CCF2F421FB2762468857BBB9C7CF2AC2FBB09
./.config/pulse/40adb6651b7a4ddd8acccc50129a93f5-card-database.tdb
./.local/share/gvfs-metadata/home-21f9616f.log
./.local/share/gvfs-metadata/root-2e7b231c.log
./.mozilla/firefox/pxtt36so.default-default/storage/permanent/chrome/idb/3561288849sdhlie.sqlite
./.mozilla/firefox/pxtt36so.default-default/storage/permanent/chrome/idb/1451318868ntouromlalnodry--epcr.sqlite
./.mozilla/firefox/pxtt36so.default-default/storage/permanent/chrome/idb/1657114595AmcateirvtiSty.sqlite
./.mozilla/firefox/pxtt36so.default-default/storage/permanent/chrome/idb/2823318777ntouromlalnodry--naod.sqlite
./.mozilla/firefox/pxtt36so.default-default/storage/permanent/chrome/idb/2918063365piupsah.sqlite
./.mozilla/firefox/pxtt36so.default-default/storage/default/moz-extension+++ef336ded-5287-4179-916a-14906948498f^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite
./.mozilla/firefox/pxtt36so.default-default/addonStartup.json.lz4
./.mozilla/firefox/pxtt36so.default-default/saved-telemetry-pings/62685a98-a8be-4f90-8186-2af362a4e162


[root@localhost ~]# find . -type f -size +50  -size -100  -ls
 67934756     32 -rw-r--r--   1  root     root        32768  2월 15 01:54 ./.cache/tracker/meta.db-shm
102164573     32 -rw-------   1  root     root        31180  2월 14 09:11 ./.cache/mozilla/firefox/pxtt36so.default-default/cache2/entries/96A3A367708E3D055E8AAFD2CC426BD24476E19E
102164586     48 -rw-------   1  root     root        47868  2월 14 09:11 ./.cache/mozilla/firefox/pxtt36so.default-default/cache2/entries/E34CCF2F421FB2762468857BBB9C7CF2AC2FBB09
  2433213     28 -rw-------   1  root     root        28672  2월 14 07:16 ./.config/pulse/40adb6651b7a4ddd8acccc50129a93f5-card-database.tdb
102164555     32 -rw-r--r--   1  root     root        32768  2월 14 07:17 ./.local/share/gvfs-metadata/home-21f9616f.log
103231839     32 -rw-r--r--   1  root     root        32768  2월 15 01:55 ./.local/share/gvfs-metadata/root-2e7b231c.log
 68430428     48 -rw-r--r--   1  root     root        49152  2월 14 07:37 ./.mozilla/firefox/pxtt36so.default-default/storage/permanent/chrome/idb/3561288849sdhlie.sqlite

[root@localhost ~]# find /etc -type f -exec ls -s {} \; | sort -n -r | head -5
9124 /etc/udev/hwdb.bin
8652 /etc/selinux/targeted/policy/policy.31
700 /etc/brltty/Contraction/zh-tw.ctb
680 /etc/services
564 /etc/ssh/moduli
[root@localhost ~]#

[root@localhost ~]# find /etc -type f -exec ls -s {} \; | sort -n | head -5
0 /etc/.pwd.lock
0 /etc/cron.deny
0 /etc/crypttab
0 /etc/cups/classes.conf
0 /etc/cups/client.conf

[root@localhost ~]# find /etc -type f  -exec grep -l umask  {} \;
/etc/X11/xinit/Xsession
/etc/lvm/lvm.conf
/etc/bashrc
/etc/login.defs
/etc/csh.cshrc
/etc/profile
/etc/rc.d/init.d/functions
/etc/authselect/postlogin
/etc/udisks2/mount_options.conf.example

[root@localhost ~]# rm -f aaa bbb
[root@localhost ~]# cp /etc/passwd aaa
[root@localhost ~]# ln aaa bbb
[root@localhost ~]# ls -il aaa bbb
68430434 -rw-r--r--. 2 root root 2658  2월 15 02:25 aaa
68430434 -rw-r--r--. 2 root root 2658  2월 15 02:25 bbb


[root@localhost ~]# find / -inum 68430434 -exec cp {} /tmp \;
[root@localhost ~]# ls /tmp
aaa
bbb
......

[root@localhost ~]# find / -inum 68430434 | xargs tar cvf ab.tar
tar: 구성 요소 이름 앞에 붙은 `/' 제거 중
/root/aaa
tar: 하드 링크 대상 앞에 붙은 `/' 제거 중
/root/bbb
[root@localhost ~]# ls
aaa     anaconda-ks.cfg  ccc                   jjj   mbc       공개      문서      비디오  서식
ab.tar  bbb              initial-setup-ks.cfg  kbs2  testdir1  다운로드  바탕화면  사진    음악

[root@localhost ~]# tar -tf ab.tar
root/aaa
root/bbb

 

728x90