0. Introduction#
해당 강의는 러닝스푼즈 - 나노디그리 Python & Django backed course의 Jason.Kim 강사님의 Linux 강의로부터 학습한 자료입니다.
지난 챕터에는 AWS를 사용한 Linux 명령어 학습 환경 조성을 하는데 목적을 두었다면, 이번에는 Linux 기본 명령어를 실습해보겠다.
Linux의 기본 명령어는 모두 중요하므로, 다 학습해야 한다.
이번 소챕터에서는 mkdir, rmdir, rm, alias, touch를 학습해본다.
2. mkdir, rmdir, rm, alias, touch#
2.1 mkdir#
기본 기능: 디렉토리 생성(make directory)
mkdir [옵션] [디렉토리명]
옵션 | 의미 |
---|
-m, –mode | 디렉토리의 기본 권한을 지정 |
-p, –parents | 필요한 경우, 상위 경로까지 생성 |
–help | 도움말 표시 |
-version | 버전 정보 표시 |
디렉토리 생성하기#
1
2
3
4
| [root@ip-172-31-8-107 ~]# cd /home/ec2-user
[root@ip-172-31-8-107 ec2-user]# mkdir ./test2
[root@ip-172-31-8-107 ec2-user]# ls
adjtime test test2
|
위 Error의 해결책: -p#
1
2
3
4
| [root@ip-172-31-8-107 ec2-user]# mkdir -p ./test2/test3
[root@ip-172-31-8-107 ec2-user]# cd ./test2/test3
[root@ip-172-31-8-107 test3]# pwd
/home/ec2-user/test2/test3
|
2.2 rmdir#
기본 기능: 빈 디렉토리만 삭제(remove directory)
mkdir [옵션] [디렉토리명]
옵션 | 의미 |
---|
-p, –parents | 필요한 경우 상위 경로까지 삭제 |
–help | 도움말 표시 |
-version | 버전 정보 표시 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [root@ip-172-31-8-107 test3]# pwd
/home/ec2-user/test2/test3
[root@ip-172-31-8-107 test3]# cd ..
[root@ip-172-31-8-107 test2]# rmdir test3
[root@ip-172-31-8-107 test2]# ls
# 아무것도 확인할 수 없다.
[root@ip-172-31-8-107 ec2-user]# cp ./adjtime ./test2
[root@ip-172-31-8-107 ec2-user]# ls ./test2
adjtime
[root@ip-172-31-8-107 ec2-user]# rmdir ./test2
rmdir: failed to remove './test2': Directory not empty
|
- 옵션
-p
의 경우, 상위 경로도 빈 directory여야만 삭제 가능하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| [root@ip-172-31-8-107 ec2-user]# mkdir -p ./a/b/c
[root@ip-172-31-8-107 ec2-user]# ls -lR ./a
./a:
total 0
drwxr-xr-x 3 root root 15 Sep 2 06:20 b
./a/b:
total 0
drwxr-xr-x 2 root root 6 Sep 2 06:20 c
./a/b/c:
total 0
[root@ip-172-31-8-107 ec2-user]# rmdir -p ./a/b/c
[root@ip-172-31-8-107 ec2-user]# ls
adjtime test test2
# 즉, ./a 까지 다 삭제되었다.
[root@ip-172-31-8-107 ec2-user]# mkdir -p ./test2/test3/test4
[root@ip-172-31-8-107 ec2-user]# rmdir -p ./test2/test3/test4
rmdir: failed to remove directory './test2': Directory not empty
# ./test2 에는 파일이 존재하기 때문에 ./a와 달리 삭제되지 않았다.
|
2.3 rm#
❗️ 기본 기능: 파일 or 디렉토리 삭제
rm [옵션] [디렉토리명]
- rm 명령을 사용하면 삭제를 진짜할 것인지 물어본다.
옵션 | 의미 |
---|
-f, –force | 파일 및 디렉토리 삭제 시, 의사(y/n)를 물어보지 않는다 |
-r, -R, –recursive | 일반 파일이면 그냥 삭제. 하지만, 디렉토리이면 디렉토리를 포함한 하위 경로와 파일을 모두 삭제 |
-v, –verbose | 각 파일 지우는 정보를 상세히 확인 |
–version | 버전 정보 표시 |
❗️rm 명령어를 사용할 때는 항상 경로를 확인 후 사용해야 하며, -rf 옵션도 신중히 사용해야 한다.
1
2
3
4
5
6
7
| [root@ip-172-31-8-107 ec2-user]# cd ./test2
[root@ip-172-31-8-107 test2]# ls
adjtime
[root@ip-172-31-8-107 test2]# rm adjtime
rm: remove regular file 'adjtime'? y
[root@ip-172-31-8-107 test2]# ls
|
-f 사용하여 삭제하기#
1
2
3
4
5
6
7
| [root@ip-172-31-8-107 ec2-user]# mkdir -p ./a/b/c/d/
[root@ip-172-31-8-107 ec2-user]# cp ./adjtime ./a
[root@ip-172-31-8-107 ec2-user]# cp ./adjtime ./a/b/c
[root@ip-172-31-8-107 ec2-user]# cp ./adjtime ./a/b/c/d/
[root@ip-172-31-8-107 ec2-user]# rm -f ./a/b/c/d/adjtime/
[root@ip-172-31-8-107 ec2-user]# ls -l ./a/b/c/d/
total 0
|
- 위에서 삭제한 것과 달리, 물어보지 않고 바로 삭제했다.
1
| [root@ip-172-31-8-107 ec2-user]# rm ./a/b/c/d/adjtime
|
-r 사용하여 삭제하기#
- 삭제하려는 디렉토리를 포함하여 그 안에 있는 디렉토리와 파일들도 삭제하도록 묻는 옵션
1
2
3
4
5
6
7
8
9
10
| [root@ip-172-31-8-107 ec2-user]# rm -r ./a/
rm: descend into directory './a/'? y
rm: descend into directory './a/b'? y
rm: descend into directory './a/b/c'? y
rm: remove directory './a/b/c/d'? y
rm: remove regular file './a/b/c/adjtime'? y
rm: remove directory './a/b/c'? y
rm: remove directory './a/b'? y
rm: remove regular file './a/adjtime'? y
rm: remove directory './a/'? y
|
-rf 로 함께 사용하여 삭제하기#
1
2
3
4
5
6
7
8
9
| [root@ip-172-31-8-107 ec2-user]# mkdir -p ./a/b/c/d/
[root@ip-172-31-8-107 ec2-user]# cp ./adjtime ./a
[root@ip-172-31-8-107 ec2-user]# cp ./adjtime ./a/b/c
[root@ip-172-31-8-107 ec2-user]# cp ./adjtime ./a/b/c/d/
[root@ip-172-31-8-107 ec2-user]# rm -r ./a/
[root@ip-172-31-8-107 ec2-user]# ls
adjtime test
# 'a' directory가 삭제된 걸 알 수 있다.
|
삭제 시, 경로에 * 입력#
1
2
3
| [root@ip-172-31-8-107 ec2-user]# rm -rf ./*
[root@ip-172-31-8-107 ec2-user]# ls -l
total 0
|
- 하지만
./*
이 아니라, /*
을 입력한다면??
2.4 alias#
기본 기능: 별칭 지정, 복잡한 명령어와 옵션을 간단한 문자열로 치환(❗️일회성)
alias [변수] = [값]
1
2
3
4
5
| [root@ip-172-31-8-107 ec2-user]# alias rrf='rm -rf'
[root@ip-172-31-8-107 ec2-user]# mkdir -f ./a/b/c/d
[root@ip-172-31-8-107 ec2-user]# rrf ./a/
[root@ip-172-31-8-107 ec2-user]# ls
total 0
|
2.5 touch#
기본 기능: 파일 시간정보 변경 및 파일 생성
touch [파일명]
크기가 0인 신규파일을 생성할 때, 많이 사용된다.
1
2
3
4
5
6
| [root@ip-172-31-8-107 ec2-user]# touch jeha00
[root@ip-172-31-8-107 ec2-user]# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 2 07:39 jehakim
# 위에 root root 0 에서 0을 통해서 파일 크기가 0임을 알 수 있다.
|
기존에 동일 이름의 파일이 있을 경우, 생성시간 및 최종 수정시간 변경
1
2
3
4
5
6
7
8
9
| # 위 코드에서 이어서 진행한다.
# 다시 touch를 실행해보자.
[root@ip-172-31-8-107 ec2-user]# touch jeha00
[root@ip-172-31-8-107 ec2-user]# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 2 07:41 jehakim
# 생성된 시간이 달라진 것을 알 수 있다.
|
Reference#