catsridingCATSRIDING|OCEANWAVES
Dev

백엔드 개발자를 위한 Linux 필수 명령어 정리하기

jynn@catsriding.com
Dec 07, 2023
Published byJynn
999
백엔드 개발자를 위한 Linux 필수 명령어 정리하기

Linux Command Line Cheat Sheet for Backend Developers

웹 서버는 주로 리눅스 기반을 사용하기 때문에 백엔드 개발자는 리눅스 환경에서 작업하는 일이 많습니다. 그래서 리눅스 환경에 반드시 익숙해져야 합니다. 환경이라는 용어의 범위는 개인 또는 상황에 따라 다르겠지만 작업 수행을 지시하는 명령어를 익히는 것은 리눅스 운영체제에 다가가기 위한 좋은 출발점이라는 것에 모두 동의할 것입니다.

이번 포스팅에서는 백엔드 개발 파트에서 자주 사용하는 리눅스 명령어에 대해 살펴봅니다.

Linux Commands

리눅스 명령어는 리눅스(Linux)나 유닉스(Unix) 기반 시스템의 셸에서 실행되는 명령어를 말합니다. 이 명령어들은 파일과 디렉토리 관리, 프로세스 관리, 네트워크 관리, 시스템 설정 등 다양한 작업을 수행하는 데 사용됩니다.

ls

ls 명령어는 "list"의 줄임말로 리눅스나 유닉스 시스템에서 디렉토리의 내용을 나열해주는 일반적인 명령어입니다. 파일 및 디렉토리 이름뿐만 아니라 시간, 날짜, 유형, 권한 등의 정보도 표시할 수 있습니다.

# Linux ls Command Syntax  
  
ls [option]... [file]...  
  • -l: 파일 및 디렉토리에 대한 자세한 정보(타입, 권한, 소유자, 크기, 시간 등)을 함께 출력합니다.
  • -a 또는 --all: 숨겨진 파일 ( .으로 시작하는 파일) 또는 디렉토리를 포함하여 모든 파일과 디렉토리를 출력합니다.
  • -h 또는 --human-readable: 파일 크기를 바이트가 아닌 KB, MB, GB 등의 단위로 표시합니다. 보통 -l과 함께 사용됩니다.
  • -r 또는 --reverse: 출력 결과를 역순으로 표시합니다.
  • -S: 파일 크기 순으로 결과를 정렬합니다.
  • -t: 파일 수정 시간 순으로 결과를 정렬합니다.

실제 사용하는 예시는 다음과 같습니다.

$ ls
Desktop  Documents  Downloads  Music  Pictures  Videos
  
# To display the list in long format:
$ ls -l
total 24
drwx------+ 6 user group 2048 Mar 14 13:53 Desktop
drwx------+ 2 user group  640 Mar 14 13:53 Documents
drwx------+ 3 user group  960 Mar 14 13:53 Downloads
drwx------+ 2 user group  640 Mar 14 13:53 Music
drwx------+ 3 user group  960 Mar 14 13:53 Pictures
drwx------+ 2 user group  640 Mar 14 13:53 Videos

# To display all files including the hidden ones:
$ ls -a
.   ..  .hidden   Desktop    Documents  Downloads  Music  Pictures  Videos

pwd

pwd 명령어는 "print working directory"의 줄임말로, 리눅스나 유닉스 계열의 시스템에서 현재 작업 중인 디렉토리의 절대 경로를 출력하는 데 사용됩니다.

# Linux pwd Command Syntax

pwd [-L | -P]
  • -L (기본값): pwd는 현재 디렉토리를 심볼릭 링크로 출력하며, 이것은 기본 동작입니다. 즉, 현재 디렉토리가 심볼릭 링크일 경우 심볼릭 링크 경로를 출력합니다.
  • -P: pwd는 심볼릭 링크를 우회하고 실제 물리적인 경로를 출력합니다.

실제 사용하는 예시는 다음과 같습니다:

# Print current directory  
$ pwd  
/catsriding/Storms/blog  

cd

cd 명령어는 "change directory"의 줄임말로, 유닉스 계열의 운영 체제(Linux, MacOS 등)에서 현재 작업 중인 디렉토리를 변경하는데 사용됩니다.

# cd Command Syntax

cd [option]... [directory]...
  • -L (기본값): 심볼릭 링크를 실제 디렉토리로 간주하고 이동하며, .. 연산을 사용할 때 심볼릭 링크를 무시합니다.
  • -P: 이동할 때 심볼릭 링크를 심볼릭 링크로 취급하며, .. 연산을 사용할 때도 심볼릭 링크를 인식합니다.

cd 명령어 다음에 이동할 경로를 입력하고 실행하면 작업 디렉토리를 해당 위치로 이동합니다. 절대 경로(Absolute Path)를 입력하면 현재 작업 디렉토리 위치에 상관없이 해당 디렉토리 이동합니다.

#  ⚡ cd [absolute path]
$ pwd
/catsriding

$ cd /catsriding/Storms/blog
$ pwd
/catsriding/Storms/blog

상대 경로(Relative Path)를 입력하는 경우에는 현재 작업 디렉토리를 기준으로 이동합니다.

#  ⚡ cd [relative path]
$ pwd
/catsriding/Storms

$ cd blog
$ pwd
/catsriding/Storms/blog

절대 및 상대 경로를 직접 입력해도 되지만 뒤로 가기 처럼 반복적인 패턴을 일일이 입력하는 것은 불편합니다. 이를 위해 리눅스에서 특수하게 사용되는 기호들이 있습니다.

  • ~: 홈 디렉토리
  • /: 루트 디렉토리
  • -: 이전 디렉토리
  • .: 현재 디렉토리
  • ..: 상위 디렉토리
# Change to home directory
$ cd
  
# Move to /tmp directory
$ cd /tmp
  
# Move up one directory level
$ cd ..
  
# Move to the previous directory
$ cd -
  
# Treat symbolic links as symbolic links when moving
$ cd -P
  
# Treat symbolic links as actual directories when moving
$ cd -L

mkdir

mkdir 명령어는 "make directory"의 줄임말로, 리눅스나 유닉스 계열 시스템에서 새로운 디렉토리를 생성하는 데 사용되는 명령어입니다.

# Linux mkdir Command Syntax

mkdir [option]... [directory]...
  • -m, --mode: 생성할 디렉토리의 권한을 설정합니다. 예를 들어, -m 755로 설정하면 사용자에게 읽기/쓰기/실행 권한, 그룹 및 기타 사용자에게 읽기/실행 권한을 부여합니다.
  • -p, --parents: 필요한 경우 부모 디렉토리도 함께 생성합니다. 예를 들어, /a/b/c와 같은 경로에서 b 또는 a 디렉토리가 없다면 해당 디렉토리를 생성하고 난 후 c 디렉토리를 생성합니다.
  • -v, --verbose: 각 디렉토리가 생성될 때마다 메시지를 출력합니다.

실제 사용 예시는 다음과 같습니다.

# Create a new directory named "newdir"
$ mkdir newdir

# Create new directories and any necessary parent directories
$ mkdir -p dir1/dir2/dir3

# Create a new directory with specific permissions
$ mkdir -m 755 securedir

# Display a message for each created directory
$ mkdir -v dir4 dir5 dir6
mkdir: created directory 'dir4'
mkdir: created directory 'dir5'
mkdir: created directory 'dir6'

mv

mv 명령어는 "move"의 줄임말로, 리눅스와 유닉스 시스템에서 파일이나 디렉토리를 다른 위치로 이동하거나 이름을 변경하는 데 사용되는 명령어입니다.

# Linux mv Command Syntax

mv [option]... [-T] source target
mv [option]... source... directory
  • -i, --interactive: 파일을 덮어쓰기 전에 확인 메시지를 표시합니다.
  • -u, --update: 대상 파일이 원본 파일보다 오래됐거나 존재하지 않을 때만 원본 파일을 이동 또는 복사합니다.
  • -v, --verbose: 파일이 이동되는 과정을 나타냅니다.
  • -b, --backup: 기존에 같은 이름의 파일이 존재할 경우 백업을 생성하고 이동합니다.

실제 사용 예시는 다음과 같습니다.

# Move file1.txt to the /tmp directory
$ mv file1.txt /tmp

# Rename file1.txt to file2.txt
$ mv file1.txt file2.txt

# Ask before overwrite
$ mv -i file1.txt /tmp

# Do not overwrite an existing file at target
$ mv -n file1.txt /tmp

# Move all .txt files to /tmp directory
$ mv *.txt /tmp

# Verbose output for all moved files
$ mv -v file1.txt file2.txt /tmp
'file1.txt' -> '/tmp/file1.txt'
'file2.txt' -> '/tmp/file2.txt'

cp

cp 명령어는 "copy"의 줄임말로, 리눅스나 유닉스 계열의 시스템에서 파일이나 디렉토리를 복사하는 데 사용되는 명령어입니다.

# Linux cp Command Syntax

cp [options] source destination
  • -i, --interactive: 기존의 파일을 덮어쓰기 전에 사용자의 확인을 받습니다.
  • -r, -R, --recursive: 디렉토리와 그 내용을 재귀적으로 복사합니다.
  • -v, --verbose: 실시간으로 복사 상황을 보여줍니다.
  • -a, --archive: 파일의 소유권, 퍼미션, 타임스탬프 등을 보존하면서 복사합니다.

실제 사용 예시는 다음과 같습니다.

# Copy file1.txt to the /tmp directory  
$ cp file1.txt /tmp  
  
# Copy all .txt files in the current directory to /tmp  
$ cp *.txt /tmp  
  
# Copy directory1 to directory2, if directory2 exists, it copies directory1 into directory2  
$ cp -R directory1 directory2  
  
# Copy all files and directories from directory1 to directory2  
$ cp -R directory1/. directory2/  
  
# Copy file1.txt to /tmp and prompt before overwrite  
$ cp -i file1.txt /tmp  

touch

touch 명령어는 리눅스나 유닉스 계열의 시스템에서 파일의 접근 및 수정시간을 변경하거나, 새로운 빈 파일을 생성하는데 사용되는 명령어입니다.

# Linux touch Command Syntax

touch [option] file...
  • -a: 파일의 접근 시간만 변경합니다.
  • -m: 파일의 수정 시간만 변경합니다.
  • -t: 지정한 시간으로 파일의 접근 및 수정 시간을 설정합니다. 시간은 [[CC]YY]MMDDhhmm[.ss] 형식으로 지정합니다.
  • -c, --no-create: 존재하지 않는 파일에 대해 아무것도 하지 않습니다.

실제 사용 예시는 다음과 같습니다.

# Create a new empty file named "newfile.txt"
$ touch newfile.txt

# Update the access and modification times of existingfile.txt to the current time
$ touch existingfile.txt

# Change the access time of existingfile.txt
$ touch -a existingfile.txt

# Change the modification time of existingfile.txt
$ touch -m existingfile.txt

# Set the access and modification times of existingfile.txt to a specific time
$ touch -t 202112181530 existingfile.txt

rm

rm 명령어는 "remove"의 줄임말로, 리눅스나 유닉스 계열의 시스템에서 파일이나 디렉토리를 삭제하는 데 사용되는 명령어입니다.

# Linux rm Command Syntax

rm [option]... [file]...
  • -i: 삭제하기 전에 사용자의 확인을 받습니다.
  • -r 또는 -R: 디렉토리 및 그 하위 디렉토리에 포함된 파일을 재귀적으로 삭제합니다.
  • -f: 강제로 파일을 삭제합니다. 존재하지 않는 파일에 대한 에러를 무시하며, 삭제할 수 없는 파일에 대해 경고도 보여주지 않습니다.
  • -v: 어떤 파일이 삭제되고 있는지 정보를 출력합니다.

실제 사용 예시는 다음과 같습니다.

# Delete file1.txt
$ rm file1.txt

# Prompt before removing each file
$ rm -i file1.txt

# Delete all .txt files in the current directory without confirmation
$ rm -f *.txt

# Delete directory1 and its contents recursively
$ rm -R directory1

# Verbose output for every removed file
$ rm -v file1.txt file2.txt
removed 'file1.txt'
removed 'file2.txt'

rm 명령어를 사용할 때는 주의해야 합니다. 재귀적 옵션 또는 강제 옵션을 사용할 경우 원하지 않는 파일이나 디렉토리를 삭제할 가능성이 있습니다. 따라서, 이 명령어는 신중하게 사용해야합니다.

rmdir

rmdir 명령어는 "remove directory"의 줄임말로, 리눅스나 유닉스 계열의 시스템에서 비어있는 디렉토리를 삭제하는데 사용되는 명령어입니다.

# Linux rmdir Command Syntax

rmdir [option]... [directory]...
  • -p, --parents: 지정한 디렉토리와 그 부모 디렉토리가 비어있을 경우 함께 삭제합니다.
  • --ignore-fail-on-non-empty: 디렉토리가 비어있지 않은 경우에도 에러 메시지를 출력하지 않습니다.
  • -v, --verbose: 어떤 디렉토리가 삭제되는지 정보를 출력합니다.

실제 사용 예시는 다음과 같습니다.

# Delete an empty directory named "emptydir"
$ rmdir emptydir

# Remove directory dir1 and its parent directories if they are empty
$ rmdir -p dir1/dir2/dir3/emptydir

# Verbose output for every removed directory
$ rmdir -v emptydir1 emptydir2
rmdir: removing directory, 'emptydir1'
rmdir: removing directory, 'emptydir2'

chmod

chmod는 "change mode"를 의미하며, 리눅스와 같은 Unix 기반 시스템에서 파일 또는 디렉토리의 권한을 변경하는 데 사용되는 명령어입니다. 이 명령어는 파일이나 디렉토리에 대한 읽기(read), 쓰기(write), 실행(execute) 권한을 사용자(user), 그룹(group), 그리고 기타 사용자(others)에게 부여하거나 복구하는 데 사용됩니다.

$ chmod [options] mode[,mode]... file...

chmod에서 모드는 기호(symbolic) 또는 숫자(numeric) 형태로 권한을 설정할 수 있지만, 이 중에서 숫자 형태가 더 직관적이며 일괄적으로 권한을 설정하는 데 효율적입니다.

숫자 형태의 권한 설정에서 각 자리의 숫자는 다음을 의미합니다:

  • 첫 번째 자리: 사용자(owner)의 권한
  • 두 번째 자리: 그룹(group)의 권한
  • 세 번째 자리: 다른 사용자(others)의 권한

그리고 이들 숫자는 다음의 합을 통해 생성됩니다:

  • 4: 읽기(read)
  • 2: 쓰기(write)
  • 1: 실행(execute)

예를 들어 다음과 같이 권한을 설정할 수 있습니다:

# 모든 사용자에게 모든 권한을 부여
$ chmod 777 filename

# 소유자에게 모든 권한을 부여하고, 그룹 및 다른 사용자는 읽기 및 실행 권한 부여
$ chmod 755 filename

# 소유자에게만 읽기 및 쓰기 권한을 부여
$ chmod 600 filename

chmod 명령어는 시스템의 보안을 관리하고 특정 파일이나 디렉토리에 대한 접근을 제어하는 중요한 도구입니다.

chown

chown은 "change owner"를 의미하며, 리눅스와 같은 Unix 기반 시스템에서 파일 또는 디렉토리의 소유자 또는 그룹을 변경하는 데 사용하는 명령어입니다.

$ chown [option]... [owner][:group] file...

chown에서 [owner]는 새 소유자의 사용자 이름을, [group]은 새 그룹의 이름을 나타냅니다. 파일의 소유자 또는 그룹만 변경하려는 경우, 다른 하나는 생략할 수 있습니다.

다음은 chown 명령의 사용 예시입니다:

# 파일의 소유자를 'ongs'으로 변경
$ chown ongs filename

# 파일의 소유자 및 그룹을 'ongs' 및 'cats'으로 변경
$ chown ongs:cats filename

# 디렉토리 및 그 하위 디렉토리/파일의 소유자를 'mongs'으로 변경 (-R 옵션은 재귀적으로 적용)
$ chown -R mongs directoryname

chown 명령어는 파일이나 디렉토리의 소유 권한을 관리하는 데 중요한 도구입니다. 하지만 이 명령어는 일반 사용자가 사용할 수 없으며, root 사용자만이 사용할 수 있어 보통 sudo 명령어와 함께 사용됩니다.

sudo

sudo는 "superuser do"의 줄임말로, 리눅스와 같은 Unix 기반 시스템에서 다른 사용자(기본적으로는 root 사용자)의 권한으로 명령을 실행하는 데 사용하는 명령어입니다.

$ sudo [option]... command

sudo에서 command는 root 권한으로 실행하려는 명령어를 나타냅니다. sudo는 시스템 관리 작업을 수행할 때 중요하게 사용되지만, 신중하게 사용해야 합니다. 그 이유는 sudo 명령을 통해 실행되는 모든 명령어는 시스템에 대한 완전한 접근 권한을 갖기 때문입니다.

다음은 sudo 명령의 사용 예시입니다:

# 파일의 소유자를 'username'으로 변경
$ sudo chown username filename

# 새로운 사용자 'newuser'를 추가
$ sudo adduser newuser

# 시스템 업데이트
$ sudo apt-get update

# root 사용자의 권한으로 파일 'filename'의 소유자를 'mongs'로 변경
$ sudo chown mongs filename

# root 사용자의 권한으로 디렉토리 'directoryname'과 그 하위 파일/디렉토리의 소유자를 'ongs'로 변경
$ sudo chown -R ongs directoryname

sudo 명령어는 시스템 관리자의 핵심 도구이며, 시스템에 대한 완전한 제어를 가능하게 합니다. 그러나 위험한 명령이므로 사용에 주의해야 합니다.

clear

clear 명령어는 리눅스나 유닉스 계열 운영체제의 터미널에서 화면을 깨끗이 지우는 명령어입니다.

# clear Command Syntax

clear

현재까지 입력한 모든 명령어와 그 결과가 화면에서 사라지지만, 실제로 터미널의 히스토리에서는 사라지지 않습니다. 스크롤 업을 하거나 이전 명령어를 검색하는 것이 가능합니다.

# Clear terminal screen
$ clear

별도의 옵션 없이 clear 명령어를 입력하고 실행하면 즉시 터미널 화면이 초기화됩니다. 이는 여러 명령어를 실행하거나, 긴 출력을 생성한 후에 화면을 깔끔하게 정리하고 싶을 때 유용합니다.

ps

ps 명령어는 "process status"의 줄임말로, 리눅스나 유닉스 계열 운영체제에서 현재 실행 중인 프로세스 정보를 확인할 때 사용합니다.

# ps Command Syntax

ps [options]
  • -a: 사용자와 터미널에 연결된 모든 프로세스를 보여줍니다. 현재 사용자가 소유하지 않은 프로세스는 보여주지 않습니다.
  • -e, -A, --all: 시스템의 모든 프로세스 정보를 표시합니다.
  • -f, --forest: 실행중인 프로세스의 풀 리스트를 표시합니다. 부모 프로세스와 자식 프로세스의 관계를 확인할 수 있습니다.
  • -p: 작성된 프로세스 ID의 프로세스들만 표시합니다.
  • -u: 프로세스의 사용자 및 소유자에 대한 정보를 포함한 상세 정보를 표시합니다.
  • -x: 유저에 의해 실행되지 않은 것들까지 표시합니다.

ps 명령어 다음에 옵션을 입력하면 해당 옵션에 따라 실행중인 프로세스 정보를 확인할 수 있습니다.

# Display all current running processes
$ ps -e

# Display a full list of all current running processes
$ ps -f

# Display all the processes which were not been started by a user
$ ps -x

# Display a detailed report of specific process
$ ps -u

# Display information about specific PID
$ ps -p <PID>

특히, ps aux 조합은 운영체제에서 현재 실행 중인 모든 프로세스들의 정보를 확인할 수 있어 자주 사용됩니다.

# Find all process
$ ps aux
USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
root                 1   0.0  0.1  4399252   6492   ??  Ss   Thu09AM   1:55.49 /sbin/launchd
root                44   0.0  0.1  4404164   6492   ??  Ss   Thu09AM   0:20.90 /usr/libexec/UserEventAgent (System)
root                45   0.0  0.2  4406500  12844   ??  Ss   Thu09AM   0:01.67 /usr/libexec/kextd
root                47   0.0  0.4  4416960  24820   ??  Ss   Thu09AM   0:13.19 /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mds_stores
_windowserver     1023   0.9  0.9  5194240  58616   ??  Ss   Thu09AM  42:42.94 /System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServer -daemon
user_name        38328   0.1  0.7  5085444  46880 s007  S+    9:39PM   0:00.9 /Applications/iTerm.app/Contents/MacOS/iTerm2
user_name        38334   0.0  0.0  4277544    796 s007  R+    9:39PM   0:00.0 ps -aux

각 열에 대한 설명은 다음과 같습니다.

  • USER: 프로세스를 시작한 사용자의 이름입니다.
  • PID: 프로세스 ID입니다.
  • %CPU: 프로세스가 사용중인 CPU의 백분율입니다.
  • %MEM: 프로세스가 사용하는 메모리의 백분율입니다.
  • VSZ: 프로세스가 사용하는 가상 메모리의 크기(Virtual Memory Size)이며, 단위는 킬로바이트입니다.
  • RSS: 프로세스가 사용하는 물리 메모리의 크기(Resident Set Size)이며, 단위는 킬로바이트입니다.
  • TTY: 프로세스가 실행되고 있는 터미널입니다.
  • STAT: 프로세스의 상태입니다.
  • START: 프로세스가 시작된 시각입니다.
  • TIME: 총 CPU 사용 시간입니다.
  • COMMAND: 실행된 명령어입니다.

ps는 특정 프로세스의 상태를 확인하거나, 시스템 자원을 가장 많이 사용 중인 프로세스를 확인하는 데도 유용한 도구입니다. grep, awk 등 다른 명령어와 함께 사용하여 특정 프로세스를 필터링하거나, 정보를 파싱하는 데 사용됩니다.

# Find specific process
$ ps aux | grep <process_name>

실행중인 Java 프로세스들에 대한 정보를 다음과 같이 조회할 수 있습니다.

# Find Java process
$ ps aux | grep java
USER        PID  %CPU %MEM     VSZ    RSS TTY      STAT START   TIME COMMAND
user_name  2872  0.5  1.2  7492556 200932 pts/1 Sl   09:20   1:48 /usr/bin/java -jar /path/to/catsriding.jar
user_name  3312  0.0  0.0   17664   1060 pts/2 S+   09:41   0:00 grep --color=auto java

kill

kill 명령어는 특정 프로세스에 신호를 보내는데 사용됩니다.

kill [options] <pid(s)>
  • -l : 사용 가능한 신호 목록을 출력합니다.
  • -a : 현재 프로세스가 소유하지 않은 프로세스에게도 신호를 보냅니다.
  • -s : 특정 신호를 보냅니다.

kill 명령어는 프로세스에 여러 가지 신호를 보낼 수 있습니다. 그 중 일부는 다음과 같습니다.

  • 1 SIGHUP: 행동은 프로세스에 따라 다릅니다. 일반적으로 프로세스를 다시 시작하는 데 사용됩니다.
  • 2 SIGINT: 인터럽트, 터미널에서 Ctrl+C를 누르는 것과 동일합니다.
  • 9 SIGKILL: 프로세스를 강제 종료합니다. 이 신호는 무시하거나 인식할 수 없습니다.
  • 15 SIGTERM: 프로세스를 종료하려고 시도합니다. 기본값입니다.
  • 20 SIGTSTP: 인터랙티브 또는 잡 제어용 일시 중단, 터미널에서 Ctrl+Z를 누르는 것과 동일합니다.

kill 명령어는 시스템, 사용자 및 신호 종류에 따라 작동 방식이 다릅니다. 프로세스가 신호를 받아들이기로 선택한 경우 거부할 수도 있습니다. SIGKILL 및 SIGSTOP은 예외적으로 받아들여집니다.

일반적으로 첫 번째로 시도해야 할 신호는 SIGTERM입니다. SIGKILL은 마지막 수단으로 사용해야 하며, 그 계획에 따라 무언가가 문제가 생길 수 있음을 이해해야 합니다.

# 프로세스(PID 1234)를 정상 종료
$ kill 1234

# 프로세스(PID 1234)를 강제 종료
$ kill -9 1234

sleep

sleep 명령어는 일정 시간 동안 쉘 스크립트의 실행을 일시 중지하는 데 사용됩니다.

sleep NUMBER[SUFFIX]

sleep 명령어에서 사용하는 시간 단위는 다음과 같습니다.

  • s : 초
  • m : 분
  • h : 시간
  • d : 일
# 3.5초 동안 대기
$ sleep 3.5
$ sleep 3.5s

# 2분 동안 대기하려면:
$ sleep 2m

sleep 명령어는 프로세스를 종료하거나 중단하지 않고 일정 시간 동안 대기하도록 합니다. 이는 스크립트 내에서 다른 명령의 완료를 대기하거나 루프 간의 일정 시간 간격을 유지하는 데 유용할 수 있습니다.

sleep 명령어는 시스템이나 네트워크 지연 등 외부요인에 대응하기 위한 일시적인 해결책으로 종종 사용되지만, 상황에 따라서는 더 진보된 도구나 방법을 사용하는 것이 더 적절할 수 있습니다.

date

date 명령어는 시스템의 날짜와 시간을 표시하거나 수정하는 데 사용됩니다.

date [options]
  • -d, --date: 지정된 날짜/시간 문자열의 날짜와 시간을 표시합니다.
  • -u, --utc, --universal: 출력을 UTC(Universal Time Coordinated)로 표시합니다.
  • -R, --rfc-email: 날짜와 시간을 RFC 5322 형식으로 출력합니다. 이 형식은 이메일 헤더에서 사용됩니다.
  • -I, --iso-8601: 날짜를 ISO 8601 형식으로 출력합니다. 이 형식은 국제 표준입니다.

date 명령어에서 사용될 날짜 및 시간 형식을 지정하려면 % 기호를 다음과 같이 사용하고, 특정 대문자 또는 소문자 문자를 씁니다.

  • %Y : 4자리 년도 (ex. 2020)
  • %m : 2자리 월 (ex. 07)
  • %d : 2자리 일 (ex. 01)
  • %H : 24시간 형식의 시간 (ex. 13)
  • %M : 분 (ex. 45)
  • %S : 초 (ex. 05)
# 현재 날짜와 시간 표시
$ date

# UTC로 현재 날짜와 시간 표시
$ date -u

# 특정 날짜/시간 문자열 표시
$ date -d "next Friday"

# 특정 날짜/시간 형식으로 출력
$ date '+%Y-%m-%d %H:%M:%S'

df

df 명령어는 "disk filesystem"의 줄임말로, 리눅스나 유닉스 계열 운영체제에서 파일 시스템의 디스크 사용량을 확인할 때 사용됩니다.

# df Command Syntax

df [options] [file...]
  • -a, --all: 모든 파일 시스템의 디스크 사용량을 표시합니다.
  • -h, --human-readable: 디스크 사용량을 사람이 읽기 편한 단위로 표시합니다 (예: K, M, G).
  • -T, --print-type: 각 파일 시스템의 유형을 표시합니다.
  • -x, --exclude-type: 특정 유형의 파일 시스템을 제외하고 디스크 사용량을 표시합니다.

df 명령어 다음에 옵션을 입력하면 해당 옵션에 따라 파일 시스템의 디스크 사용량을 확인할 수 있습니다.

# Display disk usage of all filesystems
$ df -a

# Display disk usage in human-readable form
$ df -h

# Display the filesystem type
$ df -T

# Exclude filesystem types
$ df -x <type>

특히, df -h 명령어는 파일 시스템의 디스크 사용량을 사람이 읽기 편한 형태로 보여줘서 자주 사용됩니다.

# Find disk usage in human-readable form
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            3.8G     0  3.8G   0% /dev
tmpfs           769M  1.6M  767M   1% /run
/dev/sda1        46G   12G   32G  27% /
tmpfs           3.8G  172K  3.8G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup

각 열에 대한 설명은 다음과 같습니다.

  • Filesystem: 파일 시스템의 이름입니다.
  • Size: 파일 시스템의 총 크기입니다.
  • Used: 파일 시스템에서 사용 중인 공간입니다.
  • Avail: 파일 시스템에서 사용 가능한 공간입니다.
  • Use%: 파일 시스템 공간의 사용률입니다.
  • Mounted on: 파일 시스템이 마운트된 위치입니다.

df는 파일 시스템의 디스크 사용량을 확인하거나, 특정 파일 시스템의 사용률을 모니터링하는 데 유용한 도구입니다. 또한, grep 또는 awk 등 다른 명령어와 함께 사용하여 특정 파일 시스템을 필터링하거나 정보를 파싱하는 데 사용됩니다.

# Find specific filesystem disk usage
$ df -h | grep <filesystem_name>

예를 들어, / 위치에 마운트된 파일 시스템의 사용량을 다음과 같이 조회할 수 있습니다.

# Find root filesystem disk usage
$ df -h | grep /
/dev/sda1        46G   12G   32G  27% /

위 예제에서는 / 위치에 마운트된 파일 시스템(/dev/sda1)이 총 46GB의 크기를 가지며, 그 중 12GB를 사용 중이고, 32GB의 공간이 남아있음을 보여주고 있습니다.

du

du 명령어는 "disk usage"의 줄임말로, 리눅스나 유닉스 계열 운영체제에서 디렉토리나 파일이 사용하는 디스크 공간의 크기를 확인할 때 사용합니다.

# du Command Syntax

du [options] [file...]
  • -a, --all: 파일과 디렉토리 모두의 디스크 사용량을 표시합니다.
  • -h, --human-readable: 디스크 사용량을 사람이 읽기 편한 단위로 표시합니다 (예: K, M, G).
  • -s, --summarize: 각 인자의 총합만 표시합니다.
  • -x, --one-file-system: 주 파일 시스템에 있는 파일만을 포함하여 사용량을 계산합니다.

du 명령어 다음에 옵션을 입력하면 해당 옵션에 따라 디스크 사용량을 확인할 수 있습니다.

# Display disk usage of all files and directories
$ du -a

# Display disk usage in human-readable form
$ du -h

# Display the total disk usage
$ du -s

# Only include files on the same file system
$ du -x

특히, du -sh 명령어는 디렉토리나 파일의 총 디스크 사용량을 사람이 읽기 편한 형태로 보여줘서 자주 사용됩니다.

# Find files/directories disk usage in human-readable form
$ du -sh <file/directory_name>

예를 들어, 'ongs_directory' 디렉토리의 총 디스크 사용량을 확인하려면 다음과 같이 수행합니다.

$ du -sh ongs_directory
1.5G        ongs_directory

이렇게 하면 지정한 디렉토리가 사용하는 디스크 공간의 총량이 사람이 읽기 쉬운 형태로 출력됩니다. 예를 들어, 위 예제의 출력 결과는 디렉토리가 1.5GB의 디스크 공간을 사용하고 있음을 의미합니다. 출력된 크기는 파일과 하위 디렉토리가 사용하고 있는 디스크 공간의 합계입니다.

참고로, df 명령어("disk filesystem")는 파일 시스템의 디스크 사용량을 확인하고, du 명령어("disk usage")는 특정 파일이나 디렉토리가 사용하고 있는 디스크 공간을 확인하는 데 사용됩니다. 즉, df는 전체적인 디스크 공간에 대한 정보를 제공하고 du는 파일 및 디렉토리의 크기를 계산하여 각각이 디스크에 얼마나 많은 공간을 사용하고 있는지를 보여줍니다.

두 명령어 모두 디스크 사용량을 확인하는 데 중요한 도구이지만, 그 사용 방법과 표시되는 내용이 다르므로 상황에 따라 적절한 명령어를 선택하여 사용해야 합니다.


  • 📚 Linux Manuals
  • Linux
  • Shell