1. 파일의 속성
root@www:~$ ls –l /etc/hosts
-rw-r—r– 1 root root 345 7월 15 22:55 /etc/hosts
속성값 | 의미 |
- | 파일의 종류 (- : 일반 파일, d : 디렉토리 | 'file /etc/hosts' 를 입력하면 파일의 종류를 알려줌) |
rw-r--r-- | 파일의 접근 권한 표시 (r : 읽기, w : 쓰기, x : 실행) |
1 | 하드 링크의 개수 (하드링크 : 한 파일에 대해 여러 개의 파일명을 가질 수 있도록하는 기능) |
root | 파일 소유자의 로그인 ID (리눅스에서 모든 파일은 소유자가 존재) |
root | 파일 소유자의 그룹 이름 ('groups [사용자명]' 을 입력하면 사용자가 속한 그룹을 확인 가능) |
223 | 파일의 크기 (Byte) |
7월 15 22:55 | 파일이 마지막으로 수정된 날짜 |
/etc/hosts | 파일 명 |
2. 파일의 접근 권한
접근 권한의 종류
권한 | 파일 | 디렉토리 |
읽기 | 파일을 읽거나 복사 가능 | ls 명령으로 디렉토리 목록 볼 수 있음 |
쓰기 | 파일을 수정, 이동, 삭제 가능 | 파일을 생성하거나 삭제 가능 |
실행 | 파일 실행 가능 | cd 명령 사용 가능, 파일을 디렉토리로 이동, 복사 가능 |
접근 권한의 표기법
rwx r-x r--
- rwx : 소유자
- r-x : 그룹
- r-- : 기타 사용자
chmod
: 파일이나 디렉토리의 접근 권한 변경 ( -R : 하위 디렉토리까지 모두 변경)
1. 기호 모드
chmod [사용자 카테고리 문자] [연산자 기호] [접근 권한 문자]
umask [옵션] [마스크값]
구분 | 문자 / 기호 | 의미 |
사용자 카테고리 문자 |
u | 파일 소유자 |
g | 소유자가 속한 그룹 | |
o | 소유자와 그룹 이외의 기타 사용자 | |
a | 전체 사용자 | |
연산자 기호 | + | 권한 부여 |
- | 권한 제거 | |
= | 접근 권한 설정 | |
접근 권한 문자 | r | 읽기 권한 |
w | 쓰기 권한 | |
x | 실행 권한 |
- chmod u-w test.txt : test.txt에서 소유자의 쓰기 권한을 제거
- chmod g+wx test1.c : test1.c에서 그룹에 쓰기와 실행 권한 부여
- chmod o=rwx test2.py : test2.py에서 기 사용자에게 읽기, 쓰기, 실행 권한 부여
2. 숫자 모드
각 권한이 있고 없고를 0과 1로 표기하여 2진수를 다시 10진수로 환산
예를 들어 rwxrwxrwx 이면 777 이고 rwxr-x--- 이면 750 임
▪ chmod 777 test.txt : test.txt에서 모든 사용자에게 모든 권한 부여
▪ chmod 474 test1.c : test1.c에서 소유자에게 읽기 권한 부여, 그룹에게 모든 권한 부여, 기타 사용자에게 읽기 권한 부여
기본 접근 권한 설정
umask [옵션] [마스크값]
- -S : 마스크 값을 문자로 출력
- 아무 인자 없이 umask 명령 사용 시 기본 마스크 값 출력
만약 마스크 값이 022 라면, 사용자 그룹과 기타 사용자에게 읽기 권한을 부여하지 않겠다는 의미
3. 파일 내용 검색 및 파일 찾기
find
find [검색할디렉토리] [검색조건] [액션]
# 현재 디렉토리에서 .txt로 끝나는 모든 파일을 출력
find . -name '*.txt' -print
locate
# 설치되어 있지 않은 경우
sudo apt install mlocate
# 검색 전, 슈퍼 유저로 DB 생성
sudo updatedb
# 검색 방법
locate [옵션] [검색패턴]
4. 파일 내용 검색
grep
: 파일 내용 검색
grep [옵션] [패턴] [파일명]
# 예시
grep "hello" file.txt
# 대소문자 모두 검색
grep -i "hello" file.txt
# 해당 패턴을 포함하는 파일 이름 출력
grep -l "hello" file.txt
# 행 번호 출력
grep -n unix ~/*.txt
which
: 명령의 위치를 찾아 경로나 에일리어스를 출력
# mv 명령의 위치 검색
which mv
5. 파일 아카이브와 압축
tar
- 옵션
- c : 새로운 tar 파일 생성
- t : tar 파일의 내용을 출력
- x : tar 파일에서 원본 파일 추출
- r : 새로운 파일 추가
- u : 수정된 파일 업데이트
- f : 아카이브 파일이나 테이프 장치 지정, 파일 이름을 -로 지정하면 tar 대신 표준 입력에서 읽어들임
- v : 처리하고 있는 파일의 정보 출력
- h : 심볼릭 링크의 원본 파일 포함
- p : 파일 복구 시 원래의 접근 권한 유지
- j : bzip2로 압축하거나 해제
- z : gzip로 압축하거나 해제
옵션 사용법
아카이브 생성하기 : cvf
아카이브 내용 확인 : tvf
아카이브 풀기 : xvf
** tar 파일을 gzip 으로 압축하면 targz 가 됨
아카이브 생성과 동시에 압축 : cvfz
아카이브 압축 내용 확인 : tvfz
아카이브 압축 풀기 : xvfz
gzip
- 파일 압축
- gzip [옵션] 파일이름
- -d : 파일 압축 해제
- -l : 압축된 파일의 정보를 보여줌
- -r : 하위 디렉토리를 이동하여 파일을 압축
- -t : 압축 파일 검사
- -v : 압축 정보를 화면에 출력
- -9 : 최대한 압축
gunzip
- gz로 압축된 파일의 압축 해제
- gunzip <파일이름>
6. 프로세스 관리 명령
프로세스 식별자(PID)를 사용하여 특정 프로세스 제어 가능
ps
: 현재 실행 중인 프로세스 나열
- <유닉스 옵션>
- -e : 시스템에서 실행 중인 모든 프로세스 정보 출력
- -f : 프로세스에 대한 자세한 정보 출력
- -u uid : 특정 사용자에 대한 모든 프로세스의 정보 출력
- -p pid : pid로 지정한 특정 프로세스의 정보 출력
- <BSD 옵션>
- a : 터미널에서 실행한 프로세스 정보 출력
- u : 프로세스 소유자의 이름, CPU 사용량, 메모리 사용량 등 상세 정보 출력
- x : 시스템에서 실행 중인 모든 프로세스의 정보 출력
- <GNU 옵션> : --pid PID 목록 : 목록으로 지정한 특정 PID 정보 출력
kill
: 지정한 시그널을 프로세스에 보냄
kill [signal] [PID]
- signal
- -2 : 인터럽트 시그널 보냄(Ctrl+C)
- -9 : 프로세스 강제 종료
- -15 : 프로세스가 관련된 파일을 정리하고 프로세스 종료, 종료되지 않는 프로세스가 있을 수 있음.
# ps 명령과 grep 명령을 | 로 연결하여 특정 프로세스에 대한 정보 검색
$ ps -ef | grep bash
user1 2205 2197 0 2월22 pts/5 00:00:00 bash
user1 5501 5500 0 00:32 pts/1 00:00:00 -bash
user1 5638 5637 0 00:32 pts/7 00:00:00 -bash
user1 6185 5501 0 04:50 pts/1 00:00:00 grep--color=auto bash
# man을 실행시킨 프로세스 찾아 종료시키기
$ ps -ef | grep man
UID PID PPID C STIME TTY TIME CMD
user1 6193 5501 0 04:56 pts/1 00:00:00 man ps
$ kill 6193
jobs
agor@agor:~$ jobs
[1]- Running sleep 100 &
[2]+ Running sleep 200 &
agor@agor:~$ jobs %1
[1]- Running sleep 100 &
agor@agor:~$ jobs %+
[2]+ Running sleep 200 &
agor@agor:~$ jobs %%
[2]+ Running sleep 200 &
agor@agor:~$ jobs %-
[1]- Running sleep 100 &
agor@agor:~$ sleep 300&
[3] 22556
fg [job#] : 백그라운드 작업을 포그라운드로 가져옴
bg [job#] : 일시 중지된 작업을 백그라운드에서 실행
nohup : 로그아웃한 뒤에도 백그라운드 작업을 계속 실행
crontab
: 사용자의 crontab 파일 관리
- -e : 사용자의 crontab 파일을 편집
- -l : crontab 파일의 목록 출력
- -r : crontab 파일 삭제
분(0~59) | 시(0~23) | 일(1~31) | 월(1~12) | 요일(0~6) | 작업 내용 |
- * : everytime
- - : 범위 지정, 1-3이면 1시와 3시 사이
- , : separator, 1,3이면 1시와 3시
- / : 시간 필드에서 23-7/2라면 23시부터 07시까지 매 2시간마다
# 사용법
crontab [-u 사용자 ID] [옵션] [파일이름]
$ EDITOR=vi;export EDITOR
$ crontab -l
30 23 1 * * /bin/ls -l ~user1 > ~user1/cron.out
실습
💡새로운 파일 ping1.txt를 만들고, 다음과 같은 기호를 이용한 파일 사용자 접근 권한 변경을 수행하시오.
- 그룹에 쓰기와 실행 권한을 부여
- 기타 사용자에게 실행 권한을 부여
- 그룹과 기타 사용자에게 실행 권한을 제거
- 소유자에게 쓰기 권한을 부여하고 그룹의 쓰기 권한 제거
agor@agor:~/ping$ ls -l | grep ping
-rw-r--r-- 1 agor agor 0 Aug 14 14:44 ping1.txt
agor@agor:~/ping$ sudo chmod g+wx ping1.txt
agor@agor:~/ping$ ls -l | grep ping
-rw-rwxr-- 1 agor agor 0 Aug 14 14:44 ping1.txt
agor@agor:~/ping$ sudo chmod o+x ping1.txt
agor@agor:~/ping$ ls -l | grep ping
-rw-rwxr-x 1 agor agor 0 Aug 14 14:44 ping1.txt
agor@agor:~/ping$ sudo chmod go-x ping1.txt
agor@agor:~/ping$ ls -l | grep ping
-rw-rw-r-- 1 agor agor 0 Aug 14 14:44 ping1.txt
agor@agor:~/ping$ sudo chmod u+w ping1.txt
agor@agor:~/ping$ sudo chmod g-w ping1.txt
agor@agor:~/ping$ ls -l | grep ping
-rw-r--r-- 1 agor agor 0 Aug 14 14:44 ping1.txt
💡새로운 파일 ping2.txt를 만들고, 다음과 같은 숫자를 이용한 파일 사용자 접근 권한 변경을 수행하시오.
- 모두에게 읽기 권한만 부여
- 소유자에게 읽기, 쓰기 권한을 부여하고, 그룹과 기타 사용자에게 읽기 권한만 부여
- 소유자에게 모든 권한을 부여하고, 그룹과 기타 사용자의 모든 권한 제거
agor@agor:~/ping$ ls -l | grep ping2
-rw-r--r-- 1 agor agor 0 Aug 14 14:49 ping2.txt
agor@agor:~/ping$ sudo chmod 444 ping2.txt
agor@agor:~/ping$ ls -l | grep ping2
-r--r--r-- 1 agor agor 0 Aug 14 14:49 ping2.txt
agor@agor:~/ping$ sudo chmod 644 ping2.txt
agor@agor:~/ping$ ls -l | grep ping2
-rw-r--r-- 1 agor agor 0 Aug 14 14:49 ping2.txt
agor@agor:~/ping$ sudo chmod 700 ping2.txt
agor@agor:~/ping$ ls -l | grep ping2
-rwx------ 1 agor agor 0 Aug 14 14:49 ping2.txt
agor@agor:~/ping$
💡umask의 현재 값을 확인하고, 설정 값을 077로 변경 후, 새로운 파일 ping3.txt와 새로운 디렉토리 ping123을 만들어서 생성된 파일과 디렉토리에 기본으로 부여된 권한을 확인하시오.
파일은 666, 디렉토리는 777이 기본 접근 권한으로 부여되어 있음
agor@agor:~/ping$ umask
0022
agor@agor:~/ping$ umask -S
u=rwx,g=rx,o=rx
agor@agor:~/ping$ umask 077
agor@agor:~/ping$ touch ping3.txt
agor@agor:~/ping$ mkdir ping123
agor@agor:~/ping$ ls -l | grep ping
-rw-r--r-- 1 agor agor 0 Aug 14 14:44 ping1.txt
drwx------ 2 agor agor 4096 Aug 14 14:53 ping123
-rwx------ 1 agor agor 0 Aug 14 14:49 ping2.txt
-rw------- 1 agor agor 0 Aug 14 14:53 ping3.txt
agor@agor:~/ping$
💡기존에 작성한 .txt로 끝나는 모든 파일들에서 grep 명령어를 사용하여 “hello” 단어가 들어간 파일들과 모든 행들을 찾으시오.
agor@agor:~/ping$ grep -n "hello" *.txt
ping1.txt:1:hello
ping2.txt:1:hello world
💡 find 명령어를 사용하여 전체 디렉토리에서 .txt로 끝나는 모든 파일들을 찾고, 정상적인 실행 결과는 result.out 파일에 저장하고 에러 메시지는 error.out 파일에 저장하는 명령어를 수행하시오.
agor@agor:~/ping$ find / -name '*.txt' -print > result.out 2> error.out
* 터미널 창을 하나 더 생성한 후 실행!
💡유닉스 옵션(-ef)을 사용하는 ps 명령어와 grep 명령어를 파이프로 연계하여 혼합하는 방법으로, user1에 관련되어 현재 수행하는 모든 프로세스를 확인하시오
agor@agor:~/ping$ ps -ef | grep user1
agor 33445 340 0 15:06 pts/0 00:00:00 grep --color=auto user1
💡 BSD 옵션(aux)을 사용하는 ps 명령어와 grep 명령어를 파이프로 연계하여 혼합하는 방법으로, user1에 관련되어 현재 수행하는 모든 프로세스를 확인하시오.
agor@agor:~/ping$ ps aux | grep user1
agor 33391 0.0 0.0 4028 2092 pts/0 S+ 15:06 0:00 grep --color=auto user1
💡 기존 터미널 창에서 kill 명령어를 사용하여 다른 터미널 창을 실행하는 bash 프로세스를 강제로 종료하시오.
agor@agor:~/ping$ ps -ef | grep agor
agor 340 339 0 12:47 pts/0 00:00:00 -bash
agor 399 1 0 12:47 ? 00:00:00 /lib/systemd/systemd --user
agor 400 399 0 12:47 ? 00:00:00 (sd-pam)
agor 405 341 0 12:47 pts/1 00:00:00 -bash
agor 33585 33579 0 15:07 pts/2 00:00:00 -bash
agor 34091 340 0 15:09 pts/0 00:00:00 ps -ef
agor 34092 340 0 15:09 pts/0 00:00:00 grep --color=auto agor
agor@agor:~/ping$ sudo kill -9 33579
agor@agor:~/ping$ ps -ef | grep agor
agor 340 339 0 12:47 pts/0 00:00:00 -bash
agor 399 1 0 12:47 ? 00:00:00 /lib/systemd/systemd --user
agor 400 399 0 12:47 ? 00:00:00 (sd-pam)
agor 405 341 0 12:47 pts/1 00:00:00 -bash
agor 34224 340 0 15:09 pts/0 00:00:00 ps -ef
agor 34225 340 0 15:09 pts/0 00:00:00 grep --color=auto agor
💡 sleep 500 명령어를 실행시키고, Ctrl + Z 키를 입력하여 강제로 백그라운드 정지 상태로 변환시키시오. 그리고 ps 명령어로 sleep 500 명령어의 상태를 확인하시오.
agor@agor:~/ping$ sleep 500
^Z
[1]+ Stopped sleep 500
agor@agor:~/ping$ ps
PID TTY TIME CMD
340 pts/0 00:00:00 bash
34434 pts/0 00:00:00 sleep
34528 pts/0 00:00:00 ps
💡 간단한 메시지를 포함하는 파일 /home/user1/message을 만들고, date >> result 명령어를 매 1분마다 수행하는 crontab 을 작성하여 실행 결과를 확인하시오.
agor@agor:~/ping$ crontab
agor@agor:~/ping$ crontab -l
# Edit this file to introduce tasks to be run by cron.
...
* * * * * date >> /home/agor/ping/message
agor@agor:~/ping$ cat message
Welcome to Ubuntu !
this is Euna's labtop.
Wed Aug 14 15:33:01 KST 2024
Wed Aug 14 15:34:01 KST 2024