폴더를 생성하는 명령어
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' 디렉토리를 만들 수 없습니다: 그런 파일이나 디렉터리가 없습니다
[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 "복사하고 싶은 파일" "복사 후 생성될 파일 이름"
[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 "이동하고 싶은 파일" "이동할 디렉토리 이름"
[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 "삭제하고 싶은 디렉토리"
[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 "삭제하려는 파일 이름"
[root@localhost ~]# rm bbb
rm: remove 일반 파일 'bbb'? ^C
rm은 삭제여부를 묻는 -i옵션이 default로 설정되어 있습니다.
[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은 다음 정보를 한 줄로 표시합니다.
현재 시간, 시스템이 실행된 시간, 현재 로그온한 사용자 수, (CPU 평균값)지난 1분, 5분, 15분 동안의 시스템 로드 평균.
[root@localhost ~]# uptime
21:30:22 up 7:56, 5 users, load average: 0.00, 0.00, 0.00
메모리 사용량과 여유량 그리고 캐싱으로 사용되는 메모리가 얼마나 있는지 파악할 수 있는 명령어
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 1831820 1093696 267200 6092 470924 573688
Swap: 2097148 395264 1701884
현재 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(프로세스의 실행 단위)에 관한 내용입니다.
%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가 어떻게 사용되고 있는지 그 사용율을 보여주는 영역입니다.
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 메모리 영역입니다.
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
...
VIRT, RES, SHR, %MEM
해당 필드들은 프로세스의 메모리와 관련이 있음
[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 : 시스템의 명령어가 설치된 디렉토리
프로세스 구조를 트리형태로 볼 수 있는 명령어
[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)
화면에 출력시 끊겨서 출력되는 것을 방지
용량사이즈를 계산하는 명령어
[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
디렉토리나 파일의 다양한 정보를 확인할 수 있는 명령어
[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 -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
// aaa파일의 inode 출력
[root@localhost ~]# stat -c %i aaa
68430434
// 현재디렉토리의 모든 파일의 하드링크 개수 출력
[root@localhost ~]# stat -c %h *
2
1
2
1
1
2
1
5
2
포맷 | 설명 |
---|---|
%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 - 파일 권한, 퍼미션과 같은 속성 변경) |
파일, 디렉토리를 검색하는 명령어
옵션이나 사용법이 매우 다양한 명령어로 예시를 통해 설명해보겠습니다
-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 종류
// 루트의 홈디렉토리 내의 이름이 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의 인수로 제공됩니다