221020 - 리눅스 - 권한/소유권, 링크, 마운트, 패키지, 파일 압축
https://codechacha.com/ko/linux-chmod/
https://mpjamong.tistory.com/36
https://recipes4dev.tistory.com/175
http://www.redcrow.co.kr/wordpress/?p=532
권한(허가권), 소유권 관련 명령어
1. 권한(허가권)
- chmod : 파일 권한 변경 명령어
chmod [OPTION] [MODE] [FILE]
- 옵션
-v : 모든 파일에 대해 모드가 적용되는 진단 메시지 출력
-f : 에러 메시지 출력 X
-c : 기존 파일 모드가 변경되는 경우만 진단 메시지 출력
-R : 지정한 모드를 파일과 디렉토리에 대해 재귀적으로 적용
- 모드
u,g,o,a : 소유자(u), 그룹(g), 그 외 사용자(o), 모든 사용자(a) 지정
+,-,= : 현재 모드에 권한 추가(+), 현재 모드에서 권한 제거(-), 현재 모드로 권한 지정(=)
r,w,x : 읽기 권한(r), 쓰기 권한(w), 실행 권한(x)
X : "디렉토리" 또는 "실행 권한(x)이 있는 파일"에 실행 권한(x) 적용.
s : 실행 시 사용자 또는 그룹 ID 지정(s) ex. setuid, setgid
t : 공유모드에서의 제한된 삭제 플래그를 나타내는 sticky(t) bit.
0~7 : 8진수 형식 모드 설정 값.
- ex
chmod 755 test.txt //파일 허가권 변경 => 사용자 rwx / 그룹 rx / 그외 rx
chmod 777 test.txt
2. 소유권
- chown : 파일 소유자 변경 명령어
chown [옵션] (변경할유저명:변경할그룹명) (파일명)
- 옵션
-R : 하위 디렉토리에도 모든 권한 변경
- 명령어 내용
소유자 – 소유자만 변경
:그룹명 – 그룹만 변경
소유자: – 소유자와 그룹 모두 동일한 것으로 변경
소유자:그룹명 – 소유자와 그룹을 서로 다른 것으로 변경
- ex
chown member1 test.cnf
//test.cnf 파일에 대해 소유자를 member1로 변경
chown :member1 test.cnf
//test.cnf 파일에 대해 그룹명을 members1로 변경
chown member1: test.cnf
//test.cnf 파일에 대해 소유자, 그룹명을 members1로 변경
chown member1:member2 test.cnf
//test.cnf 파일에 대해 소유자는 member1, 그룹명은 member2로 변경
- chgrp : 파일 소유그룹 변경 명령어
chgrp [옵션] [그룹명] [파일명]
- 옵션
-c : 파일의 그룹명을 변경할때 변경된 파일만 출력
-f : 그룹이 변경되지 않는 파일들에 대한 오류 메시지 출력 X
-v : 작업 진행 상태를 자세하게 설명
-R : 지정한 디렉토리의 하위에 있는 모든 파일도 함께 지정한 그룹으로 변경
- ex
chgrp centos sample.txt //sample.txt의 소유그룹을 centos로 변경
3. su : 계정 전환 (switch user)
- 옵션
-s : 지정된 셀로 계정 전환
-c : 쉘을 실행하지 않고, 주어진 명령만 수행
-, -l : 지정한 사용자의 환경 변수를 적용해 계정 전환
- ex
su 사용자명 //다른 사용자 계정으로 전환
su - 사용자명 //계정 전환, 환경변수도 전환
su -c 'apt-get update' //root 권한으로 한 명령만 실행
※ whoami : 현 사용자 확인
※ logout, exit : 전환 전 계정으로 돌아감
4. sudo : root 권한 빌려 명령어 실행 (superuser do)
링크
링크 파일 : 데이터 블록에 대한 접근 경로를 추가하는 파일
파일의 데이터에 접근 시 => i-node 테이블에 접근해 데이터 블록의 위치를 확인함
※ i-node : 파일의 주소, 권한, 이름, 크기 등이 저장된 테이블
- 심볼릭 링크 (=소프트 링크)
ln -s [ORIGIN_FILE][LINK_FILE]
윈도우의 바로가기와 유사
파일 경로에 대한 링크
링크 파일을 삭제해도 원본 파일 삭제 X
원본 파일을 삭제하면 링크 파일 사용 불가
디렉토리에 대해 링크 생성 가능
원본 파일을 이동하면 링크를 사용 불가 (broken)
- 하드 링크
ln [ORIGIN_FILE][LINK_FILE]
원본 파일과 같은 i-node 테이블 사용
=> 원본파일의 개념 無 / 파일의 이름이 두 개인 것
파일 수정 -> 원본 파일과 링크 파일 모두 수정 (i-node가 같아서)
디렉토리에 대해 링크 생성 불가
원본 파일을 이동시켜도 링크 사용 가능
- ex
[root@localhost linktest]# ln basefile hardlink
[root@localhost linktest]# ln -s basefile softlink
[root@localhost linktest]# ls -il //inode 번호, 리스트 출력
26286575 -rw-r--r-- 2 root root 4 10월 20 17:41 basefile
26286575 -rw-r--r-- 2 root root 4 10월 20 17:41 hardlink ////
26286573 lrwxrwxrwx 1 root root 8 10월 20 17:47 softlink -> basefile ////
[root@localhost linktest]# mv basefile ../ //원본 이동
[root@localhost linktest]# ls
hardlink softlink //소프트링크 파일 빨간 표시 (broken)
[root@localhost linktest]# cat softlink
cat: soflink: 그런 파일이나 디렉터리가 없습니다 //원본 이동시 소프트링크 사용 불가
https://thinking-developer.tistory.com/52
https://miniminis.github.io/2020/05/30/linux/linux-thisislinux06/
마운트
: 물리적인 장치를 특정 위치(보통 디렉터리)에 연결시켜주는 과정
mount [option] [device] [directory]
시스템 부팅 후 수동으로 마운트, 사용을 끝낸 뒤에는 직접 언마운트해야 함
- mount : 현재 연결되어있는 모든 마운트 리스트 출력
플로피 디스크/하드디스크/시디룸을 mount, 즉 시스템이 인식하게 하는 명령어
- 옵션
-a : /etc/fstab에 명시된 파일 시스템 마운트
-t 타입명: 파일 시스템 유형 선택
-v : 마운트된 상태 출력
-f : 마운트 할 수 있는지만 체크
-r : 읽기만 가능하게 마운트
-w : 읽기, 쓰기가 가능하게 마운트
-o 항목명: 추가 설정 및 다수 옵션 지정시 사용
항목명 ro: 읽기 전용
항목명 rw: 읽기 및 쓰기, 기본 지정
항목명 remount: 재마운트
항목명 loop: iso 9660 마운트 시 사용
항목명 noatime: atime 변경 제어로 작업 성능 향상
- umount
: 시스템에서 mount 명령으로 인식된 장치들, 플로피디스크, 시디룸, 하드디스크를 인식하지 못하게 함
- 옵션
-v : 자세한 설명 출력
-t [타입] : 지정 파일 시스템에 적용
-n : /etc/mtab 파일 갱신 X
- ex
umount /dev/cdrom : cdrom 에서 시디 꺼냄 (없으면 에러메시지)
https://pej4303.tistory.com/48
https://doongdangdoongdangdong.tistory.com/97
https://coconuts.tistory.com/187
https://cruxon.tistory.com/206
패키지
패키지 파일 : 설치 스크립트와 함께 컴파일된 바이너리/기타 리소스 포함하는 압축파일
- 파일 형식 / 명령어 종류
rpm, dnf(또는 yum)
패키지이름-버전-릴리스번호.CentOS버전.아키텍처.rpm
1. RPM
패키지 파일(cd/dvd) 있어야 명령어 실행 가능
Windows의 setup.exe와 유사
*.rpm (확장명) => 패키지
- 패키지 설치
rpm -Uvh
- 옵션
-U : 설치/업그레이드
v : 설치 과정 확인
h : 설치과정을 #기호로 출력
- 패키지 삭제
rpm -e 패키지이름
- 설치된 패키지 조회
rpm -qa 패키지이름
rpm -qf 패키지명 //파일 절대경로
rpm -qi 패키지명 //설치된 패키지 상세정보
- 패키지 삭제
rpm -e 패키지명
- ex
//mc 패키지 설치 확인 (설치 안돼있음)
rpm -qi mc
//Appstream 경로 이동 (추가 설치 패키지)
cd Appstream/Packages
//mc 패키지 검색
ls -l mc-*
//mc 패키지 정보 출력
rpm -qip mc-[tab]
//mc 패키지 설치
rpm -Uvh mc-[Tab]
//설치 확인
rpm -qi mc
rpm -qa mc
//삭제
rpm -e --test mc //테스트 삭제
rpm -e mc
- ex
//패키지 설치
rpm -Uvh mysql-err[Tab] //의존성 문제로 설치 불가
2. DNF
=> rpm의 의존성 문제 해결 위해 나옴
설치하려는 rpm 파일 + 해당 파일과 의존성이 있는 다른 rpm 파일 자동 설치함
(인터넷 통해 의존성 있는 파일들을 알아내므로 인터넷 연결 필요)
기본 설치 : dnf -y install 패키지명
rpm 파일 설치 : dnf install rpm 파일명.rpm
업데이트 : dnf update 패키지명
삭제 : dnf -y remove 패키지명
정보 : dnf info 패키지명
패키지그룹 설치 : dnf groupinstall 패키지그룹명
패키지그룹 종류 확인 : dnf grouplist
패키지 리스트 조회 : dnf list 패키지명
특정 파일 속한 패키지명 확인 : dnf provides 파일명
GPG 키 검사 생략 : dnf install --nogpgcheck rpm파일명.rpm
(GPG 키: 깨진 파일인지 확인하는 일종의 인증 키)
기존 저장소 목록 삭제 : dnf clean all
//mc패키지 설치
dnf -y install mc
//삭제
dnf -y remove mc
//mysql-errmsg 패키지 설치
dnf -y install mysql-errmsg
//삭제
dnf -y remove mysql-errmsg
파일 압축
압축파일 확장명 : xz, bz2, gz, zip, Z,..
xz, bz2 압축률 b
- 압축 or 압축풀기
xz : 확장명 xz로 압축하거나 풀어줌
xz 파일명.xz
unxz "
bz2 : 확장명 bz2로 압축하거나 풀어줌
bz2 filename.bz2
bunzip2 "
gzip : 확장명 gz으로 압축하거나 풀어줌
gzip 파일명.gz
gunzip "
- 파일 묶기 (tar)
tar 명령어로 확장명 tar인 묶음 파일 만들거나 품
- 동작
c : 묶기
C : 지정된 디렉터리에 풀기
x : 풀기
t : 경로확인
- 옵션
f(필수) : 파일명 지정
v : 과정 보여줌
J : tar+xz
z : tar+gzip
j : tar+bz2
- ex
tar cvf my.tar /etc.sysconfig/ //묶기
tar xvf my.tar //tar 풀기
tar xvfJ my.tar.xz /etc/sysconfig/ //xz 압축해제 + tar 풀기
- ex
tar cvf mbc.tar sample.txt memo.txt //두 파일 묶기
xz mbc.tar //압축
tar cvfJ kbs.tar.xz memo.txt sample.txt //묶기 + 압축
tar xvfJ kbs.tar.xz //풀기 + 압축풀기