7/120

김건호·2022년 2월 15일
0
post-custom-banner

기본명령어

디렉토리 생성

mkdir

폴더를 생성하는 명령어

mkdir "디렉토리 이름"
[root@localhost ~]# mkdir kbs
[root@localhost ~]# ls -ld kbs
drwxr-xr-x. 2 root root 6  2월 15 02:39 kbs

하위 디렉토리가 존재하지 않으면 더 아래에 디렉토리를 만들 수 없습니다.

[root@localhost ~]# mkdir kbs/mbc/sbs
mkdir: `kbs/mbc/sbs' 디렉토리를 만들 수 없습니다: 그런 파일이나 디렉터리가 없습니다
  • -p : 존재하지 않는 하위디렉토리까지 같이 생성합니다.
[root@localhost ~]# mkdir -p kbs/mbc/sbs
[root@localhost ~]# ls -ld kbs
drwxr-xr-x. 3 root root 17  2월 15 02:40 kbs
[root@localhost ~]# ls -R kbs
kbs:
mbc

kbs/mbc:
sbs

디렉토리 안의 디렉토리는 링크카운트를 1증가시킵니다.
파일은 증가시키지 않습니다.

파일의 링크카운트는 하드링크를 통해 증가됩니다.

cp

파일의 복사를 하는 명령어

cp "복사하고 싶은 파일" "복사 후 생성될 파일 이름"
[root@localhost ~]# cp aaa eee
[root@localhost ~]# ls -li aaa eee
68131342 -rw-r--r--. 1 root root 0  2월 15 03:14 aaa
68342999 -rw-r--r--. 1 root root 0  2월 15 03:15 eee

mv

파일의 이동을 하는 명령어

mv "이동하고 싶은 파일" "이동할 디렉토리 이름"
[root@localhost ~]# mv  aaa kbs/mbc/
[root@localhost ~]# ls -l aaa
ls: cannot access 'aaa': 그런 파일이나 디렉터리가 없습니다
[root@localhost ~]# ls -l kbs/mbc/aaa
-rw-r--r--. 3 root root 2658  2월 14 19:53 kbs/mbc/aaa

같은 디렉토리에서 mv는 파일의 이름 변경 기능으로 사용할 수 있습니다.

[root@localhost ~]# mv aaa jjj 
[root@localhost ~]# ls -il aaa
ls: cannot access 'aaa': 그런 파일이나 디렉터리가 없습니다
[root@localhost ~]# ls -il jjj
67934757 -rw-r--r--. 3 root root 2658  2월 14 19:53 jjj

디렉토리 삭제

rmdir

디렉토리를 삭제하는 명령어

rmdir "삭제하고 싶은 디렉토리"
[root@localhost ~]# ls -ild kbs mbc testdir1 testdir2
 68430440 drwxr-xr-x. 5 root root 52  2월 14 19:43 kbs
 34268798 drwxr-xr-x. 5 root root 52  2월 14 20:38 mbc
103231843 drwxr-xr-x. 3 root root 28  2월 14 20:43 testdir1
 35173107 drwxr-xr-x. 2 root root  6  2월 14 21:08 testdir2
[root@localhost ~]# rmdir testdir2
[root@localhost ~]# ls -ldi testdir2
ls: cannot access 'testdir2': 그런 파일이나 디렉터리가 없습니다

디렉토리가 비어있지 않으면 삭제를 진행할 수 없습니다.(디렉토리 파일 모두 영향을 미침)

[root@localhost ~]# rmdir testdir1
rmdir: failed to remove 'testdir1': 디렉터리가 비어있지 않음

rm

파일을 삭제하는 명령어

rm "삭제하려는 파일 이름"
[root@localhost ~]# rm bbb
rm: remove 일반 파일 'bbb'? ^C

rm은 삭제여부를 묻는 -i옵션이 default로 설정되어 있습니다.

  • -f : 삭제여부를 묻지 않고 바로 삭제
[root@localhost ~]# rm -f eee
[root@localhost ~]# ls -il eee
ls: cannot access 'eee': 그런 파일이나 디렉터리가 없습니다

하드링크 파일 찾기

### 하드링크 파일 찾기
[root@localhost ~]# ln aaa bbb
[root@localhost ~]# ls -il aaa bbb
68430434 -rw-r--r--. 2 root root 2658  2월 15 00:42 aaa
68430434 -rw-r--r--. 2 root root 2658  2월 15 00:42 bbb

// inode를 이용해서 찾는 방법
[root@localhost ~]# find / -inum 68430434 -ls 
 68430434   4 -rw-r--r--   2  root  root 2658  2월 15 00:42 /root/aaa
 68430434   4 -rw-r--r--   2  root  root 2658  2월 15 00:42 /root/bbb

// samefile 옵션을 이용해서 찾는 방법
[root@localhost ~]# find / -samefile  aaa  -ls  2> /dev/null       
 68430434   4 -rw-r--r--   2  root root 2658  2월 15 00:42 /root/aaa
 68430434   4 -rw-r--r--   2  root root 2658  2월 15 00:42 /root/bbb

파일의 읽기, 쓰기, 복사, 무브, 디렉토리의 읽기 flow

파일의 읽기 : 디렉토리 내의 파일 이름에 연관된 inode를 사용하여 해당 file의 메타데이터를 읽어 디스크의 섹터를 참조하여 읽어옵니다.
파일의 쓰기 : 읽기와 같이 디스크의 섹터를 참조하여 파일을 불러오고 파일의 데이터블록에 내용을 씁니다.
파일의 복사 : 복사할 파일의 섹터를 새로운 섹터의 추가하여 만들고 새로운 파일이름과 새로운 inode를 부여합니다.
파일의 무브 : inode 값, 디스크의 섹터위치는 그대로지만 파일의 이름만 변경됩니다.
디렉토리 읽기 : 디렉토이 이름과 관련된 inode에 해당하는 섹터에서 불러와 디렉토리의 데이터블록을 출력합니다.

시스템 명령어

시스템 정보 관련 명령어

uptime

uptime은 다음 정보를 한 줄로 표시합니다.
현재 시간, 시스템이 실행된 시간, 현재 로그온한 사용자 수, (CPU 평균값)지난 1분, 5분, 15분 동안의 시스템 로드 평균.

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

free

메모리 사용량과 여유량 그리고 캐싱으로 사용되는 메모리가 얼마나 있는지 파악할 수 있는 명령어

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1831820     1093696      267200        6092      470924      573688
Swap:       2097148      395264     1701884
  • [total] : 설치된 총 메모리 크기 / 설정된 스왑 총 크기
  • [used] : total에서 free, buff/cache를 뺀 사용중인 메모리. / 사용중인 스왑 크기
  • [free] : total에서 used와 buff/cahce를 뺀 실제 사용 가능한 여유 있는 메모리량 / 사용되지 않은 스왑 크기
  • [shared] : tmpfs(메모리 파일 시스템), ramfs 등으로 사용되는 메모리. 여러 프로세스에서 사용할 수 있는 공유 메모리
  • [buffers] : 커널 버퍼로 사용중인 메모리
  • [cache] : 페이지 캐시와 slab으로 사용중인 메모리
  • [buff/cache] : 버퍼와 캐시를 더한 사용중인 메모리
  • [available] : swapping 없이 새로운 프로세스에서 할당 가능한 메모리의 예상 크기. (예전의 -/+ buffers/cache이 사라지고 새로 생긴 컬럼)

top

현재 OS의 상태를 나타내주는 명령어

[root@localhost ~]# top
top - 22:01:06 up  8:27,  5 users,  load average: 0.01, 0.02, 0.00
Tasks: 271 total,   2 running, 269 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1788.9 total,    259.6 free,   1068.8 used,    460.5 buff/cache
MiB Swap:   2048.0 total,   1662.0 free,    386.0 used.    559.4 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    779 root      20   0  368368   9812   8480 S   0.3   0.5   0:39.81 vmtoolsd
    ...
top - 22:01:06 up  8:27,  5 users,

시스템 현재 시간, OS가 살아있는 시간, 유저 세션수를 나타냅니다.

load average: 0.01, 0.02, 0.00

CPU Load(CPU가 수행하는 작업의 양)의 이동 평균를 표시합니다.

Tasks: 271 total,   2 running, 269 sleeping,   0 stopped,   0 zombie

Tasks(프로세스의 실행 단위)에 관한 내용입니다.

  • Total : 전체 프로세스
  • running : running 상태인 프로세스
  • sleeping : 대기상태인 process
  • stopped : 종료된 프로세스
  • zombies : 좀비상태인 프로세스의 수
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

CPU가 어떻게 사용되고 있는지 그 사용율을 보여주는 영역입니다.

  • us : 프로세스의 유저 영역에서의 CPU 사용률
  • sy : 프로세스의 커널 영역에서의 CPU 사용률
  • ni : 프로세스의 우선순위(priority) 설정에 사용하는 CPU 사용률
  • id : 사용하고 있지 않는 비율
  • wa : IO가 완료될때까지 기다리고 있는 CPU 비율
  • hi : 하드웨어 인터럽트에 사용되는 CPU 사용률
  • si : 소프트웨어 인터럽트에 사용되는 CPU 사용률
  • st : CPU를 VM에서 사용하여 대기하는 CPU 비율
MiB Mem :   1788.9 total,    259.6 free,   1068.8 used,    460.5 buff/cache
MiB Swap:   2048.0 total,   1662.0 free,    386.0 used.    559.4 avail Mem

RAM의 메모리영역인 Mem과 디스크를 메모리처럼 이용하는 Swap 메모리 영역입니다.

  • total : 총 메모리 양
  • free : 사용가능한 메모리 양
  • used : 사용중인 메모리 양
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
779 root      20   0  368368   9812   8480 S   0.3   0.5   0:39.81 vmtoolsd
...
  • PID : 프로세스 ID로, 프로세스를 구분하기 위한 겹치지않는 고유한 값
  • USER : 해당 프로세스를 실행한 USER 이름 또는 효과를 받는 USER의 이름
  • PR : 커널에 의해서 스케줄링되는 우선순위
  • NI : PR에 영향을 주는 nice라는 값

VIRT, RES, SHR, %MEM
해당 필드들은 프로세스의 메모리와 관련이 있음

  • VIRT : 프로세스가 소비하고 있는 총 메모리. 프로그램이 실행중인 코드, heap, stack과 같은 메모리, IO buffer 메모리를 포함
  • RES : RAM에서 사용중인 메모리의 크기를 나타냄
  • SHR : 다른 프로세스와의 공유메모리(Shared Memory)를 나타냄
  • %MEM : RAM에서 RES가 차지하는 비율을 나타냄
  • S : 프로세스의 현재 상태를 나타냄
  • TIME+ : 프로세스가 사용한 토탈 CPU 시간
  • COMMAND : 해당 프로세스를 실행한 커맨드를 나타냄

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

[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
[root@localhost ~]# who
root     tty2         2022-02-14 07:16 (tty2)

시스템 디렉토리에 대한 설명

  • /boot : booting 관련 디렉토리 booting 이미지가 로드된다.
  • /etc : 시스템 환경 설정 디렉토리
  • /usr : 시스템 구성 및 응용프로램이 설치되는 디렉토리
  • /tmp : 임시저장 디렉토리 - 응용프로그램에 대한 (프로세스에 대한)
  • /var : 임시저장 디렉토리 - 시스템 운영시 발생하는 정보를 저장
    ex) log
  • /home : 사용자 홈디렉티가 저장되는 디렉토리
  • /usr/bin : 시스템의 명령어가 설치된 디렉토리

pstree

프로세스 구조를 트리형태로 볼 수 있는 명령어

[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─agetty
        ├─alsactl
        ├─atd
        ├─auditd─┬─sedispatch
        │        └─2*[{auditd}]
 .
 .
 .

디스크 용량 사이즈

[root@localhost ~]# df -hTP
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  866M     0  866M   0% /dev
tmpfs          tmpfs     895M     0  895M   0% /dev/shm
tmpfs          tmpfs     895M  9.7M  885M   2% /run
tmpfs          tmpfs     895M     0  895M   0% /sys/fs/cgroup
/dev/nvme0n1p3 xfs        48G  4.6G   43G  10% /
/dev/nvme0n1p1 xfs       507M  225M  282M  45% /boot

h Size 정보를 m, G 단위로 변환해서 보여줌
T type 파일 시스템 정보를 알려줌 (P --portability)
화면에 출력시 끊겨서 출력되는 것을 방지

du –sh

용량사이즈를 계산하는 명령어

[root@localhost ~]# du -sh /*  2> /dev/null
0       /bin
196M    /boot
0       /dev
29M     /etc

리눅스 사용자와 시스템 정보를 알수 있는 명령어

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# uname
Linux
[root@localhost ~]# uname -r
4.18.0-240.el8.x86_64
[root@localhost ~]# uname -a
Linux localhost.localdomain 4.18.0-240.el8.x86_64 #1 SMP Fri Sep 25 19:48:47 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/*release
CentOS Linux release 8.3.2011
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
CentOS Linux release 8.3.2011
CentOS Linux release 8.3.2011

stat

디렉토리나 파일의 다양한 정보를 확인할 수 있는 명령어

[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: -

옵션

  • -f : 해당 파일이 저장된 파일 시스템의 정보를 출력
[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
  • -L : 심볼릭 링크 역 참조하여 정보를 출력
    aaa의 심볼릭 링크 ccc에 대하여
[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: -
  • -t : 디렉터리나 파일 정보를 요약하여 출력
[root@localhost ~]# stat -t aaa
aaa 0 0 81a4 0 0 10303 68131342 1 0 0 1644912932 1644912861 1644912861 1644912861 4096 unconfined_u:object_r:admin_home_t:s0
  • -c : 사용자 정의 형식으로 정보를 출력
// aaa파일의 inode 출력
[root@localhost ~]# stat -c %i aaa
68430434
// 현재디렉토리의 모든 파일의 하드링크 개수 출력
[root@localhost ~]# stat -c %h *
2
1
2
1
1
2
1
5
2
포맷설명
%a8진수로 된 파일 권한
%A일반 rwx 형식의 파일 권한
%b할당된 블록 수
%B각 블록의 크기 (바이트 단위)
%d10진수로 된 장치 번호
%D16진수로 된 장치 번호
%f16진수로 된 파일 유형
%F파일 유형
%g소유자의 그룹 ID
%G소유자의 그룹 이름
%h하드 링크 개수
%iinode 번호
%m마운트 포인트
%n파일 이름
%N심벌릭 링크일 경우 역 참조된 파일 이름
%s파일의 총 크기 (바이트 단위)
%u소유자의 사용자 ID
%U소유자의 사용자 이름
%w파일 생성 시간 (존재하지 않다면 -로 표시)
%x파일 접근 시간 (Access)
%y파일 수정 시간 (Modification - 파일 내용이 수정)
%z파일 변경 시간 (Change - 파일 권한, 퍼미션과 같은 속성 변경)

find

파일, 디렉토리를 검색하는 명령어
옵션이나 사용법이 매우 다양한 명령어로 예시를 통해 설명해보겠습니다
-name : 해당 이름의 파일을 찾음. 해당 이름에는 정규 표현식을 활용할 수 있음

// 루트 디렉토리에서 aaa라는 이름을 가진 파일의 모든 경로를 찾는 법
[root@localhost ~]# find / -name aaa
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa

-name은 대소문자 구별, 대소문자를 구별하지 않으려면 -iname 사용

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

-type : 지정된 파일 타입에 해당하는 파일 검색

// 루트의 홈 디렉토리 아래에 링크 파일 찾는법

[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

type 종류

  • d : 디렉토리
  • f : 일반적인 파일
  • l : 심볼릭 링크
// 루트의 홈디렉토리 내의 이름이 aaa이고 소유자가 root인 파일 찾기
[root@localhost ~]# find /root -type f -name aaa -user root
/root/testdir1/aaa
/root/mbc/aaa
/root/aaa

유저이름이 0일시 root와 동일

// 에러처리와 동시에 확장자가 html or(-o) sh)인 파일 찾기
[root@localhost ~]# find / -type f  \( -name "html" -o -name "sh" \)  2>/dev/null
/usr/share/bash-completion/completions/sh
// aaa와 같은 파일 찾기(bbb는 aaa의 하드 링크)
[root@localhost ~]# find . -samefile aaa
./aaa
./bbb
// inode에 해당하는 파일 찾기(bbb는 aaa의 하드 링크)
[root@localhost ~]# find . -inum 68430434
./aaa
./bbb
// 권한이 777인 파일 찾기
[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
 // 권한이 001이 포함된 파일 찾기
[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

리눅스 시스템의 시간을 하루 단위
mtime(수정 시간) atime(접근 시간) ctime(변경 시간)
mmin amin cmin(위 시간을 분 단위로)

// 하루동안 수정된 파일 목록 출력
[root@localhost ~]# find /root -type f  -mtime -1

-size 파일 크기로 찾기

// 50 byte보다 크고 100byte 보다 작은 파일 찾기
[root@localhost ~]# find . -type f -size +50  -size -100  -print

-exec 찾은 파일에 대해 명령어 실행하기

// /etc 디렉토리의 파일들을 크기 순으로 정렬하여 상위 5개 나열하기
[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

xargs로 인수 제공하기

// inode가 ~ 값인 파일을 아카이브
[root@localhost ~]# find / -inum 68430434 | xargs tar cvf ab.tar

tar cvf "파일명" 파일들을 아카이브로 묶기
xargs때문에 앞에 나온 find의 결과가 tar cvf의 인수로 제공됩니다

참고자료 : free, top, stat -c, find, xargs

profile
Ken, 🔽🔽 거노밥 유튜브(house icon) 🔽🔽
post-custom-banner

0개의 댓글