1. 파티션 디스크 용량 확인

파티션 단위로 디스크 용량을 확인하는 명령어.

즉, 조회하려는 파일시스템이 속한 파티션에 대한 디스크 용량 정보를 나타낸다.

 

명령어: df [options] [디렉토리]

 

자주 쓰는 옵션

  • h: 용량을 읽기 좋은 형태로 출력(기본은 Kib)
  • T: 파일시스템 타입 포함
$ df -hT /

Filesystem     Type     Size  Used Avail Use% Mounted on
overlay        overlay   59G  4.4G   51G   8% /

 

 

속성 설명

  • Type: 파일시스템 타입
  • Size: 전체 용량
  • Used: 현재 사용중인 용량
  • Avail: 남은 용량
  • Use%: 현재 사용률
  • Mounted on: 마운트된 경로

2. 특정 디렉토리/파일 용량 확인

하위 디렉토리를 포함한 용량 확인.

 

명령어: du [options] 경로

 

자주 쓰는 옵션

  • h: 용량을 읽기 좋은 형태로 출력(기본은 Kib)
  • s: 요약(디렉토리의 경우 기본적으로 디렉토리 하위 파일이 따로 출력됨)
$ du -sh /home
68K	/home
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

일반적으로 root 유저로 계정을 전환할 때 우리는

$ su -

명령을 사용하게 된다.

그런데, 

$ sudo -i

라는 명령을 사용해도 동일하게 root 유저가 되는데 어떤 차이가 있는건지 궁금해졌다.

 

1. sudo -i 의 동작

sudo -i 에서 "-i" 옵션은 대화형 모드 + root 계정의 *로그인 쉘 실행을 의미한다.(interactive mode + root login shell)

이때, root 계정의 쉘 환경과 환경변수를 모두 적용한다. sudo는 (당연하게도)사용자가 현재 sudo 권한을 가질 때만 작동한다.

sudo 명령 자체가 단일 명령어를 root 권한으로 실행하는 것이기 때문에, 현재 로그인 쉘(세션)은 유지된다.

sudo -i 는 실제로 root 계정의 로그인 쉘을 실행하며, 환경변수 $HOME, $PATH 등을 root 계정의 것으로 설정한다.

 

*로그인 쉘: 로그인 쉘은 사용자가 로그인할 때 실행되는 쉘로, 사용자 계정의 환경 변수($PATH, $HOME 등)와 셸 프로파일(.bash_profile, .bashrc 등)이 로드된다. sudo -i는 root 계정으로 로그인한 것처럼 로그인 쉘을 실행하는 것이다.

2. su - 의 동작

su 는 substitute user 의 약자로, 현재 로그인 쉘을 유지하면서 새로운 유저의 로그인 쉘로 변경하는 것이다. "-" 옵션을 주면 root 계정으로 전환되고, root 계정의 쉘 환경과 환경변수가 모두 적용된다. 

 

3. sudo -i 와 su - 의 차이점

su - 는 root 계정의 비밀번호가 필요하다.

반면, sudo -i 는 자신의 비밀번호가 필요하다. root 계정의 비밀번호는 필요하지 않다. sudo 권한을 통해 root 계정의 환경을 임시로 사용한다고 이해하면 쉽다.

 

즉, sudo 명령어의 -i 옵션은 "interactive login shell" 이라고만 알아도 두가지의 차이점을 이해할 수 있다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

file attribute 는 ls -l 명령에서 조회되지 않으며, 파일을 보호하거나 파일을 수정/삭제할 때 추가적인 동작을 설정하기 위한 속성이다.

이해하기 위해, 파일에 대한 자세한 상태를 조회해보자.

# stat file1
  File: file1
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 89h/137d	Inode: 3028155     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2025-03-15 19:41:19.831013012 +0900
Modify: 2025-03-15 19:41:19.831013012 +0900
Change: 2025-03-15 19:41:19.831013012 +0900
 Birth: -
# cat file1
# stat file1
  File: file1
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 89h/137d	Inode: 3028155     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2025-03-23 13:36:24.020187004 +0900
Modify: 2025-03-15 19:41:19.831013012 +0900
Change: 2025-03-15 19:41:19.831013012 +0900
 Birth: -

stat 명령어로 파일에 대한 access time, modify time, change time 을 조회할 수 있다. 그런데, cat 명령어로 파일을 조회하면 access time 이 변경되는 것을 볼 수 있다.

  • access time: 파일 내용을 조회한 시점
  • modify time: 파일 내용을 수정한 시점
  • change time: 파일 속성정보를 수정한 시점(소유자, 권한 등)

이 파일에 접근하여도 access time 을 갱신하지 않도록 하려면 어떻게 해야 할까?

해당 파일의 file attribute 에 특정 attribute 를 추가해주면 된다.(여기서는 A 속성이 맞겠다.)

 

file attribute 주요 속성

속성명 의미 자세한 설명
A no atime updates 파일에 access가 발생해도 파일 시스템의 파일 해당 정보의 atime을 갱신하지 않음
a append only 파일에 내용 추가만 할 수 있음. vi 에디터로 파일 마지막에 내용을 붙이는 것도 불가능. append (>>) 하는 형태로만 가능.(파일보안을 위해 일반적으로 사용). 디렉토리에 설정하면 해당 디렉토리 내에 파일을 생성만 할 수 있음
i immutable 파일의 이름, 내용, 소유자, 권한 등 어떠한 것도 변경할 수 없음(삭제도 안됨. 변경되면 안되는 중요한 설정 파일에 사용하면 좋음)
C no copy on write 기록 중 복사 업데이트 안함
c compressed 커널에 의해 파일이 디스크에 자동으로 압축된 상태로 저장함
D synchronous directory updates 디렉토리의 변경사항을 동기화시킴
d no dumps dump 명령어로 백업되지 않음
e extent format 파일이 디스크 블록에 매핑될 때 extent를 사용함
j data journaling 파일에 데이터를 쓰기 전에 ext3 journal에 먼저 씀
S synchronous updates 파일이 변경되면 디스크에 동기적으로 저장됨
s secure deletion 파일이 삭제될 경우 해당 블록이 0이 되고, 디스크에 다시 쓰기가 됨. 삭제파일복구 불가능
T top of directory hierarchy 해당 디렉토리를 최상위 디렉토리로 인식함
t no tail-merging 파일에 partial block fragmentation(tail-merging)이 발생하지 않음. 즉, 파일에 t 속성이 설정되면 tail 명령어로 여러 파일을 병합하여 출력할 때, 해당 파일의 마지막 내용은 출력되지 않습니다.
u undeletable 파일을 삭제시 그 내용이 저장되어 다시 복구할 수 있게 됨(휴지통 같은 느낌?)

 

1. file attribute 확인하기

lsattr {파일명}

 

2. file attribute 변경하기

chattr[ -options] {속성변경자}{속성} {대상파일명}

 

options 설명

옵션 설명
-p 파일의 프로젝트 번호 설정하기
-R 하위 디렉토리까지 재귀적으로 변경
-V 변경한 속성 출력
-f 대부분의 오류 메시지 출력안함
-v {version} 버전 설정하기

 

속성변경자 설명

속성변경지 설명
+ 지정한 속성 추가
- 지정한 속성 제거
= 지정한 속성만 남기고 나머지 속성들은 제거

 

e.g.

# chattr +a file1

=> file1 에 append 만 가능하도록 속성을 설정한다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

 

기본적인 권한 이외에도 특수 권한(special permission)이라는 것이 존재한다. 

SetUID, SetGID, Sticky bit 이 있으며, 8진수 권한의 제일 앞자리로 나타낸다.

  symbol 8진수 의미 설명 용도
SetUID user execute 권한 s 2^2 = 4

x+SetUID 프로그램(파일)이 실행되는 동안에 프로그램의 소유자 권한으로 권한이 변경되어 실행됨 프로그램 내에서 특정 유저 권한으로만 수행할 수 있는 액션을 해야 할 때
user execute 권한 S -+SetUID
SetGID group execute 권한 s 2^1 = 2 x+SetGID 프로그램(파일)이 실행되는 동안에 프로그램의 소유 그룹 멤버로 권한이 변경되어 실행됨 프로그램 내에서 특정 그룹 권한으로만 수행할 수 있는 액션을 해야 할 때
group execute 권한 S -+SetGID
Sticky bit other execute 권한 t 2^0 = 1 x+sticky bit 디렉토리 내에 누구나 파일을 생성할 수 있으나, 삭제는 파일 소유자만 가능하도록 함 시스템이나 애플리케이션에서 생성하는 파일을 모아놓는 디렉토리를 보호하고자 할 때
e.g. /tmp

 

1. SetUID 설정방법

symbol 파라미터 형식: chmod u+s {파일명}

8진수 모드 형식: chmod 4{기존권한} {파일명}

e.g.

# chmod u+s program.exe
# chmod 4755 program.exe

 

2. SetUID 제거방법

symbol 파라미터 형식: chmod u-s {파일명}

8진수 모드 형식: chmod 0{기존권한} {파일명}

* special permission 자리를 0으로 세팅하므로, SetUID 이외에도 모든 special permission 을 지워준다.

e.g.

# chmod u-s program.exe
# chmod 0755 program.exe

 

3. SetGID 설정방법

symbol 파라미터 형식: chmod g+s {파일명}

8진수 모드 형식: chmod 2{기존권한} {파일명}

e.g.

# chmod g+s program.exe
# chmod 2755 program.exe

 

4. SetGID 제거방법

symbol 파라미터 형식: chmod g-s {파일명}

8진수 모드 형식: chmod 0{기존권한} {파일명}

* special permission 자리를 0으로 세팅하므로, SetGID 이외에도 모든 special permission 을 지워준다.

e.g.

# chmod g-s program.exe
# chmod 0755 program.exe

 

5. sticky bit 설정방법

symbol 파라미터 형식: chmod o+t {디렉토리명}

8진수 모드 형식: chmod 1{기존권한} {디렉토리명}

* 보통 모든 유저가 파일 생성은 가능하게 하므로, 1777 으로 설정하는 것이 일반적임

e.g.

# chmod o+t tmp
# chmod 1777 tmp

 

6. sticky bit 제거방법

symbol 파라미터 형식: chmod o-t {디렉토리명}

8진수 모드 형식: chmod 0{기존권한} {디렉토리명}

* special permission 자리를 0으로 세팅하므로, sticky bit 이외에도 모든 special permission 을 지워준다.

e.g.

# chmod o-t tmp
# chmod 0777 tmp

 

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

1. umask 란?

아래와 같이 파일과 디렉토리를 새로 생성하면 기본으로 설정되는 권한은 어떻게 설정하는 걸까?

# touch file1
# mkdir directory1

# ls -ld file1 directory1
drwxr-xr-x 2 root root 4096 Mar 15 19:40 directory1 # 755
-rw-r--r-- 1 root root    0 Mar 15 19:41 file1 # 644

 

바로 기본권한에서 umask 에 설정된 권한을 제외한 권한이 기본적으로 설정되는 것이다.

file 은 기본권한이 0666, directory 는 0777 이다.

# umask
0022

 

e.g.

  file directory
default 0666 0777
umask 0022 0022
default permission 0644 0755
default permission symbol rw-r--r-- rwxr-xr-x

 

2. umask 설정 방법

커맨드: umask {8진수 파일권한}

e.g.

# umask 0002

(맨 앞의 0 생략 가능)

 

3. umask symbol 출력

커맨드: umask -S

디렉토리 기준으로 default permission symbol 을 출력한다. 즉, 디렉토리 생성시 기본 권한을 출력한다.

 

4. 유저 로그아웃시에 umask 를 유지하는 방법

기본적으로 로그아웃시 umask 값은 초기화된다.

유지하려면 startup scrypt 에 umask 세팅을 저장해야 한다.

# cat >> ~/.bashrc
umask 0002 # cmmand + D 로 저장

(vi 에디터가 없을시)

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

1. permission 설명

# ls -l

drwxr-xr-x 2 root root   4096 Feb 21 21:33 sampledir
-rw-r--r-- 1 root root 481280 Feb 21 21:36 sample.txt

첫번째 열의 10자리 중 2~10번째 자리가 해당 파일/디렉토리에 대한 권한을 의미하며,

rwxrwxrwx 으로 구성된다.(- 은 권한없음을 의미함)

  • 초록색: user 가 가진 권한
  • 파란색: group 가 가진 권한(group 에 속한 user 가 가진 권한)
  • 주황색: other 사용자가 가진 권한(그 외 사용자)

rwx 문자는 파일이냐 디렉토리냐에 따라 아래와 같은 권한을 의미한다.

권한 file directory
read 파일 내용 읽기
cat, more, less, tail, head...
디렉토리 내 파일목록을 읽기
ls
write 파일 내용 수정
vi
디렉토리 내 파일을 생성/삭제/이름변경
mkdir, touch, rm, rename...
execute 파일 프로그램을 실행 디렉토리 내부로 이동, 디렉토리 내 파일목록을 자세히 읽기
cd, ls -l

* 파일 프로그램을 실행하기 위해서는 read + execute 권한이 모두 있어야 함에 유의

 

2. permission 변경 명령어

2.1. symbol mode 로 지정하는 법

명령어: chmod {who}{action}{what} {대상파일/디렉토리}

  • who
    • u: user
    • g: group
    • o: other
    • a: user + group + other
  • action
    • +: 추가
    • -: 제거
    • =: 기존 권한을 무시하고 세팅
  • what
    • r: 읽기
    • w: 쓰기
    • x: 실행하기

e.g.

# chomd ug+x sample.txt

=> sample.txt 파일에 대해 user, group 의 execute 권한을 추가한다.

# chmod u=rw-,g=r--,o=--- passwd

=> passwd 파일에 대해 user는 read, write를, group은 read를, other는 아무것도 하지 못하게 권한을 설정한다.

 

2.2. 8진수 모드로 지정하는 법

8진수 숫자로 권한을 세팅하는 방법도 있다.

각 권한을 8진수로 표현하면 아래와 같다.

권한 2의 거듭제곱 8진수
r 2^2 4
w 2^1 2
x 2^0 1

각 권한을 더한 8진수 값의 합으로 permission set 을 표현한다.

 

e.g.

r-x: 4 + 1 = 5

rwx: 4 + 2 + 1 = 7

---: 0

 

이를 user, group, other 에게 각각 세팅하려면 아래와 같이 입력한다.

chmod {user permission set}{group permission set}{other permission set} {대상파일/디렉토리}

 

e.g.

# chmod 775 sample.txt

=> sample.txt 파일에 대해 rwxrwxr-x 권한을 세팅한다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

패스워드 관련 설정파일

1. /etc/passwd

# cut -d ":" -f 1,2 /etc/passwd

/etc/passwd 파일의 2번째 열 값이 encrypted password 를 의미하며, "x" 인 경우, 실제 encrypted password 는 /etc/shadow 파일에 저장되어있음

 

2. /etc/shadow

# cat /etc/shadow

test:$6$2i(...생략):20158:0:99999:7:10:20239:
  • 2번째 열 값: encrypted password
    이 값에 "*", "!" 가 들어가는 경우는 로그인 불가 계정을 의미하며, 아래와 같다.
    • *: 시스템 계정
    • !: 잠긴 계정 또는 아직 패스워드를 설정하지 않은 계정
  • 3번째 열 값: date of last password change
    패스워드가 마지막으로 수정된 날짜. 1970.01.01 기준으로 지난 일 수.
  • 4번쨰 열 값: minimum password age
    수정된 패스워드를 사용해야하는 최소 일 수(기본값: /etc/login.defs 의 PASS_MIN_DAYS 값)
    즉, 3번째 열 값 + 4번째 열 값 날짜까지 수정된 패스워드를 사용해야 한다.
    passwd -n {일수} {유저명}
    으로 수정 가능
  • 5번째 열 값: maximum password age
    수정된 패스워드를 사용할 수 있는 최대 일 수(기본값: /etc/login.defs 의 PASS_MAX_DAYS 값)
    즉, 3번째 열 값 + 5번째 열 값 날짜까지 수정된 패스워드를 사용할 수 있다.(273년으로 사실상 영구라고 봐도 됨)
    passwd -x {일수} {유저명}
    으로 수정 가능
  • 6번째 열 값: password warning period
    패스워드 만료 경고를 알릴 일 수(기본값: /etc/login.defs 의 PASS_WARN_AGE 값)
    즉, 3번째 열 값 + 5번째 열 값 - 6번째 열 값 일 부터 경고를 띄운다.(maximum password age 에 도달하기 전 경고를 띄울 일 수)
    password -w {일수} {유저명}
    으로 수정 가능
  • 7번째 열 값: passowrd inactivity period
    패스워드 만료일이 지난 후 계정이 비활성화 되기까지의 일 수(패스워드 변경을 하지 않을시)
    즉, 3번째 열 값 + 5번째 열 값 + 7번째 열 값 일 부터 계정이 비활성됨.
    (패스워드 만료일이 지나가면 로그인 시 강제로 패스워드를 수정하게 유도되는데, 계정이 비활성화되면 아예 로그인이 제한됨.)
  • 8번째 열 값: account expiration date
    (패스워드 만료일과 관계 없는)계정 만료일
    useradd -e {YYYY-MM-DD} {유저명}
    으로 설정 가능
  • 10번째 열 값: reserved field
    예약된 필드(빈값)

e.g.

# passwd -x 30 -w 5 -n 1 -i 10 test

=> test 계정에 대해 오늘을 기준으로 최소 1일, 최대 30일 후 까지 현재 패스워드를 사용할 수 있게 하되, 만료 5일 전 부터 경고를 띄우며, 만료일이 지나도 10일 동안 패스워드를 변경하지 않으면 계정을 비활성화한다.

 

3. /etc/login.defs

계정생성, 패스워드 할당시 default 로 적용되는 값

# cat /etc/login.defs

ENCRYPT_METHOD SHA512 # password 를 암호화 할 때 쓰인 알고리즘

PASS_MAX_DAYS 99999 # password 최대 유효 일 수(만료까지의 일 수)
PASS_MIN_DAYS 0 # password 최소 유지 일 수
PASS_WARN_AGE 7 # password 만료 전 경고를 띄울 일 수

UID_MIN  1000 # uid 최소값
UID_MAX 60000 # uid 최대값

GID_MIN  1000 # gid 최소값
GID_MAX 60000 # gid 최대값

USERGROUPS_ENAB yes # 유저계정 삭제시 primary group 도 값이 삭제할지 여부

 

ENCRYPT_METHOD 암호화 알고리즘 별로 encrypted password 의 시작하는 값이 아래와 같다.

  • SHA256: $5$
  • SHA512: $6$ 
  • MD5: $1$

 

 

패스워드 관리 명령어

1. passwd

특정 계정에 패스워드를 할당하거나 패스워드 정책을 수정

Options:
  -d, --delete: 패스워드 삭제
  -e, --expire: 로그인할 때 새로운 패스워드를 설정하도록 유도. date of last password change 을 0 으로 세팅
  -i, --inactive {일수}: 패스워드 만료 후 계정 비활성화 유예 일 수 세팅
  -l, --lock: 패스워드 잠금(로그인 불가)
  -n, --mindays {일수}: 현재 패스워드 사용 최소 일 수 세팅
  -u, --unlock: 패스워드 잠금 해제
  -w, --warndays {일수}: 패스워드 만료 전 경고를 띄울 일 수 세팅
  -x, --maxdays {일수}: 현재 패스워드 사용 최대 일 수 세팅

 

2. chage

패스워드 만료 정책 수정

Options:
  -E, --expiredate {YYYY-MM-DD}: 계정 만료 일 세팅
  -I, --inactive {일수}: 패스워드 만료 후 계정 비활성화 유예 일 수 세팅
  -l, --list: 패스워드 만료 관련 정보 출력
  -m, --mindays {일수}: 현재 패스워드 사용 최소 일 수 세팅
  -M, --maxdays {일수}: 현재 패스워드 사용 최대 일 수 세팅
  -W, --warndays {일수}: 패스워드 만료 전 경고를 띄울 일 수 세팅

 

e.g.

# chage -M 90 -m 0 -W 7 -I 20 test

=> test 계정에 대해 오늘을 기준으로 최소 0일, 최대 90일 후 까지 현재 패스워드를 사용할 수 있게 하되, 만료 7일 전 부터 경고를 띄우며, 만료일이 지나도 20일 동안 패스워드를 변경하지 않으면 계정을 비활성화한다.

 

3. usermod

계정 정보 수정, 패스워드 만료 정책 수정

Options:
  -e, --expiredate {YYYY-MM-DD}: 계정 만료 일 세팅
  -f, --inactive {일수}: 패스워드 만료 후 계정 비활성화 유예 일 수 세팅
  -L, --lock: 패스워드 잠금(로그인 불가)
  -U, --unlock: 패스워드 잠금 해제
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

리눅스 배포판마다 조금씩 다르므로, 본 포스팅에서는 데비안 계열을 기본으로 합니다.(필요시 코멘트 달았음)

 

1. /etc/passwd 설명

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

 

":" 을 구분자로 7개의 필드로 이루어져 있으며, 각 필드는 아래와 같은 데이터를 지님

{유저이름}:{암호화된패스워드}:{numeric uid}:{numeric gid}:{use name or comment}:{home directory}:{login shell}

  • 암호화된패스워드: x 로 숨겨져있으며, 실제 값은 /etc/shadow 파일에 존재한다.
  • numeric uid:
    • 0: root
    • 1~999: system account(데비안 계열인 경우)
    • 1000~60000: local user(사용자 계정)
    • 60000~65535: system account
  • numeric gid: 기본적으로 user 마다 개인그룹이 생성되며, numeric uid 와 동일한 숫자를 가짐
  • login shell: nologin 인 경우 시스템 계정으로, 로그인이 차단된 계정이다.

 

2. /etc/shadow 설명

root:*:20007:0:99999:7:::
daemon:*:20007:0:99999:7:::
bin:*:20007:0:99999:7:::

 

2번째 필드가 패스워드를 의미하며, *, ! 가 들어있는 경우는 login lock 걸린 유저임.(로그인 불가)

 

3. /etc/group 설명

root:x:0:
daemon:x:1:
bin:x:2:
sample:x:3:test1,test2,test3

 

 

":" 을 구분자로 4개의 필드로 이루어져 있으며, 각 필드는 아래와 같은 데이터를 지님

{그룹명}:{그룹패스워드}:{gid}:{본 그룹을 추가그룹으로 가지는 유저들}

 

4. 계정 추가

useradd[ options] {유저명}

 

자주 사용하는 옵션 설명

  • -u: uid 지정
  • -g: gid 지정. 지정하지 않으면 1000번부터 auto increment 로 uid 가 할당됨
  • -c: 코멘트 작성
  • -d: home directory 지정
  • -e: 로그인 가능한 최대 날짜 지정
  • -G: 추가그룹 지정. 여러개 지정시 "," 로 구분자 사용
  • -m: home directory 자동 생성(레드헷 계열에서는 옵션을 지정하지 않아도 자동생성됨)
  • -o: uid 중복가능하도록 함
  • -p: 패스워드 지정. 지정 안할시 로그인 불가능 유저로 생성됨
  • -r: 시스템 계정임을 명시
  • -s: login shell 지정. 기본값 /bin/sh

 

5. 패스워드 지정

passwd {유저명}

 

패스워드를 지정하면 로그인 가능한 계정이 된다.

/etc/shadow 파일에 암호화된 패스워드가 추가된다.

 

6. 계정 정보 변경

usermod[ options] {유저명}

 

기본적으로 useradd 와 동일한 옵션을 가지며, 아래 옵션이 추가적으로 존재한다.

  • -a: 추가그룹 추가(새로 지정이 아닌 추가임. -G 옵션과 항상 같이 쓴다.)
  • -l: 유저명 수정
  • -L: 계정 잠그기. /etc/shadow 의 패스워드 앞에 "!" 문자가 추가된다.
  • -U: 계정 잠금 풀기

 

7. 계정 삭제

userdel[ options] {유저명}

 

  • -r: 메일 사서함과 home directory 까지 지우기

 

8. 그룹 추가

groupadd[ options] {그룹명}

 

  • -g: gid 지정

 

9. 그룹 변경

groupmod[ options] {그룹명}

 

  • -g: gid 변경

 

10. 그룹 삭제

groupdel {그룹명}

 

추가그룹만 삭제 가능하며, 해당 그룹을 추가그룹으로 가지고 있던 계정에게서 해당 추가그룹이 삭제된다.

 

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

파일을 압축할 때는 한개의 파일씩 압축할 수 있다.

그러므로, 여러개의 파일 또는 여러개의 파일이 포함된 디렉토리를 압축하고자 할 때는, 먼저 한개의 파일로 합쳐야 한다.

이때, 한개의 파일로 합치는 작업을 archiving 이라고 하고, 압축하는 작업을 compression 이라고 한다.

 

1. 파일 및 디렉토리 archiving 하기

  • 명령어: tar -cf {결과파일명}.tar {대상파일명1}[ {대상파일명2} [...{대상파일명n}]]
  • 설명: 여러개의 디렉토리나 파일을 하나의 파일로 합치는 명령어로, 파일 권한이나 생성, 수정 날짜 모두 유지된다.
  • 예시:
    log_1.log log_2.log 파일을 log.2025-03-01.tar 으로 합치기.
# tar -cvf log.2025-03-01.tar log_1.log log_2.log


2. archiving 된 파일 내용 확인하기

  • 명령어: tar -tvf {대상파일명}.tar
  • 설명: 합쳐진 tar 파일의 내용을 출력한다.
  • 예시:
# tar -tvf log.2025-03-01.tar

 

3. archiving 된 파일 복구하기

  • 명령어: tar -xvf {대상파일명}.tar
  • 설명: 합쳐진 tar 파일의 내용을 합치기 이전으로 복구한다.
  • 예시:
# tar -xvf log.2025-03-01.tar

 

4. 파일 compression 하기

파일 compression 에는 gzip, bzip2, xz, zip 유틸리티 중 하나가 사용된다.

gzip, bzip2, xz 는 파일 단위로만 압축 가능하다.(따라서, 여러개의 파일을 압축하고자 할 때는 archiving 을 먼저 해줘야 한다.)

 

  • gzip 명령어: gzip {대상파일명}
    => {대상파일명}.gz 으로 압축됨.
    => 원본파일이 삭제됨.
    => 파일 단위로만 압축 가능함.

 

  • bzip2 명령어: bzip2 {대상파일명}
    => {대상파일명}.bz2 으로 압축됨.
    => 원본파일이 삭제됨.
    => 파일 단위로만 압축 가능함.

 

  • xz 명령어: xz {대상파일명}
    => {대상파일명}.xz 으로 압축됨.
    => 원본파일이 삭제됨.
    => 파일 단위로만 압축 가능함.

 

  • zip 명령어: zip {압축파일명}.zip {대상파일명}
    => {대상파일명}.zip 으로 압축됨.
    => 원본파일 유지됨.
    => 디렉토리 압축 가능함.(-r 옵션 필요)

 

5. compression 된 파일 내용 확인

gzip, bzip2, xz, zip으로 compression 된 압축파일의 내용을 압축을 풀지 않고도 확인할 수 있다.

 

  • zcat 명령어: zcat {대상파일명}.gz
    => gzip 압축파일 내용 확인

 

  • bzcat 명령어: bzcat {대상파일명}.bz2
    => bzip2 압축파일 내용 확인

 

  • xzcat 명령어: xzcat {대상파일명}.xz
    => xz 압축파일 내용 확인

 

  • unzip 명령어: unzip -l {대상파일명}.zip
    => zip 압축파일 내용 확인

 

6. compression 된 파일 압축 풀기

gzip, bzip2, xz, zip 로 compression 된 압축파일을 푼다.

 

  • gunzip 명령어: gunzip {대상파일명}.gz
    => gzip -d {대상파일명}.gz 와 동일
    => 압축파일이 삭제됨.

 

  • bunzip2 명령어: bunzip2 {대상파일명}.bz2
    => bzip2 -d {대상파일명}.bz2 와 동일
    => 압축파일이 삭제됨.

 

  • unxz 명령어: unxz {대상파일명}.xz
    => xz -d {대상파일명}.xz 와 동일
    => 압축파일이 삭제됨.

 

  • unzip 명령어: unzip {대상파일명}.zip
    => zip -d {대상파일명}.zip 와 동일
    => 압축파일 유지됨.

 

요약

  압축 명령어 압축파일 확장자 원복파일 삭제 여부 압축파일 내용보기 명령어 압축풀기 명령어 압축파일 삭제 여부 디렉토리 압축가능 여부
gzip gzip {대상파일} gz O zcat {대상파일}.gz gunzip {대상파일}.gz

gzip -d {대상파일}.gz
O X
bzip2 bzip2 {대상파일} bz2 O bzcat {대상파일}.bz2 bunzip2 {대상파일}.bz2

bzip2 -d {대상파일}.bz2
O x
xz xz {대상파일} xz O xzcat {대상파일}.xz unxz {대상파일}.xz

xz -d {대상파일}.xz
O X
zip zip[ -r] {압축파일}.zip {대상파일 or 디렉토리} zip X unzip -l {대상파일}.zip unzip {대상파일}.zip

zip -d {대상파일}.zip
X O

 

7. archiving + compression

tar 커맨드의 옵션을 주어 archiving 과 compression 을 한번에 할 수 있다.

  • tar + gzip 커맨드: tar -czvf {압축파일명}.tar.gz {대상디렉토리명}
  • tar + bzip2 커맨드: tar -cjvf {압축파일명}.tar.bz2 {대상디렉토리명}
  • tar + xz 커맨드: tar -cJvf {압축파일명}.tar.xz {대상디렉토리명}

 

8. decompression + unarchiving

tar 커맨드의 옵션을 주어 decompression 과 unarchiving 을 한번에 할 수 있다.

  • tar + gzip 커맨드: tar -xzvf {대상파일명}.tar.gz
  • tar + bzip2 커맨드: tar -xjvf {대상파일명}.tar.bz2
  • tar + xz 커맨드: tar -xJvf {대상파일명}.tar.xz
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,
VAR="AAA"
VAR2="BBB"
if [  ]

1. 문자열, 숫자 동일여부 비교시 "=" 보다는 "==" 를 사용한다.

VAR="AAA"
if [ "AAA" == "$VAR" ]; then
	echo "권장되는 방법"
fi

 

2. 다중 비교시 "-a" 보다는 "&&"을, "-o" 보다는 "||" 을 사용한다.

3. 다중 비교시 단일 대괄호("[", "]") 보다는 쌍 대괄호("[[", "]]") 를 사용한다.

VAR1="AAA"
VAR2="BBB"
if [[ "AAA" == "VAR1" && "BBB" == "VAR2" ]]; then
	echo "권장되는 방법"
fi

 

  • "[": (single bracket)는 POSIX 표준의 일부로, 전통적인 조건문 구문임.
  • "[[" (double bracket)는 Bash의 확장 기능으로, 더 강력하고 유연한 조건문을 제공함. 패턴 매칭(=~* 등)을 지원.
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,