윈도우Windows에서는 파일 탐색기, 맥macOS에서는 파인더를 사용하면 대상 경로의 파일과 폴더를 손쉽게 확인할 수 있는데요. 리눅스의 CLI 환경에서는 ls 명령을 이용해 대상 경로의 파일과 폴더의 정보를 확인할 수 있습니다.
ls는 리눅스의 기초가 되는 명령이고 그만큼 자주 사용하기도 하는데 옵션이 40여개 이상으로 많아 아주 간단하다고 할 수는 없지만 언제나 그렇듯 모든 옵션을 다 알 필요는 없고 아래 안내하는 내용만 알아둔다면 리눅스 활용에 도움이 될 것입니다
튜토리얼 환경: Ubuntu Server 22.04LTS
기본 구문
ls [Flags] [directory]
ls [Flags] [path]
ls
명령의 기본적인 구문은 위와 같은 형식이며 옵션 [Flags]
와 디렉토리 [directory]
, 경로 [path]
는 선택사항입니다.
root@ez:/etc/nginx# ls
conf.d koi-win nginx.conf sites-enabled
fastcgi.conf mime.types proxy_params snippets
fastcgi_params modules-available scgi_params uwsgi_params
koi-utf modules-enabled sites-available win-utf
root@ez:/etc/nginx#
위와 같이 ls
만 입력하면 현재 경로의 폴더와 파일 목록의 이름만 출력 됩니다.
자주 사용하는 옵션
ls 만으로는 해당 파일의 정보를 정확하게 알 수 없기 때문에 옵션을 사용해야 하며 별도의 경로를 지정하면 현재 경로가 아니더라도 해당 경로의 내용을 확인할 수 있습니다.
특정 경로의 폴더와 파일 목록 확인
현재 위치와 다른 경로, 루트 경로 그리고 부모 경로와 같이 특정 경로의 파일과 폴더 목록을 바로 확인할 수 있습니다.
다른 경로 디렉토리 목록 확인
ls [directory]
위와 같이 입력하면 해당 디렉토리의 파일과 폴더 목록이 출력됩니다.
root@ez:/etc/nginx# ls sites-available
default
root@ez:/etc/nginx#
위 내용으로 /etc/nginx
경로의 sites-available
폴더에는 default
라는 항목만 하나 있는 것을 확인할 수 있습니다.
루트 디렉토리 목록 확인
ls /
위와 같이 입력하면 루트 디렉토리의 파일과 폴더 목록이 출력됩니다.
root@ez:/etc/nginx# ls /
bin etc lib32 lost+found opt run srv tmp
boot home lib64 media proc sbin swap.img usr
dev lib libx32 mnt root snap sys var
root@ez:/etc/nginx#
프롬프트에 표시된 /etc/nginx
경로의 파일이 아닌 루트 경로의 파일 목록이 출력되는 것을 볼 수 있습니다.
부모 디렉토리 목록 확인
ls ..
위와 같이 입력하면 부모 디렉토리의 파일과 폴더 목록이 출력됩니다.
root@ez:/etc/nginx# ls ..
adduser.conf kernel profile.d
alternatives landscape protocols
apache2 ldap python3
apparmor ld.so.cache python3.10
apparmor.d ld.so.conf rc0.d
apport ld.so.conf.d rc1.d
apt legal rc2.d
bash.bashrc letsencrypt rc3.d
bash_completion libaudit.conf rc4.d
(생략)
ImageMagick-6 passwd- vmware-tools
init.d perl vtrgb
initramfs-tools php wgetrc
inputrc pki wpa_supplicant
iproute2 pm X11
iscsi polkit-1 xattr.conf
issue pollinate xdg
issue.net profile zsh_command_not_found
root@ez:/etc/nginx#
/etc/nginx
경로가 아닌 /etc
아래 위치한 파일과 폴더 목록이 표시됩니다.
ls ../..
위와 같이 응용하면 현재 위치에서 두 단계 위 경로의 파일과 폴더 목록이 출력됩니다.
자세한 파일 목록 확인
ls -l
ls
에서 -l
옵션을 사용하면 한줄에 하나의 항목을 자세하게 표시합니다. 아마도 가장 자주 사용하는 옵션이 아닐까 생각합니다.
root@ez:/etc/nginx# ls -l
total 64
drwxr-xr-x 2 root root 4096 Mar 7 09:35 conf.d
-rw-r--r-- 1 root root 1125 Jul 27 2022 fastcgi.conf
-rw-r--r-- 1 root root 1055 Jul 27 2022 fastcgi_params
-rw-r--r-- 1 root root 2837 Jul 27 2022 koi-utf
-rw-r--r-- 1 root root 2223 Jul 27 2022 koi-win
-rw-r--r-- 1 root root 3957 Aug 2 2022 mime.types
drwxr-xr-x 2 root root 4096 Nov 10 15:39 modules-available
drwxr-xr-x 2 root root 4096 Mar 6 17:11 modules-enabled
-rw-r--r-- 1 root root 1447 Jul 27 2022 nginx.conf
-rw-r--r-- 1 root root 180 Jul 27 2022 proxy_params
-rw-r--r-- 1 root root 636 Jul 27 2022 scgi_params
drwxr-xr-x 2 root root 4096 Mar 6 17:10 sites-available
drwxr-xr-x 2 root root 4096 Mar 6 17:10 sites-enabled
drwxr-xr-x 2 root root 4096 Mar 6 17:10 snippets
-rw-r--r-- 1 root root 664 Jul 27 2022 uwsgi_params
-rw-r--r-- 1 root root 3071 Jul 27 2022 win-utf
root@ez:/etc/nginx#
위와 같이 긴 목록 형식long listing format으로 출력되고 다음과 같은 정보들을 모두 확인할 수 있습니다.
- 전체 파일, 폴더의 수량
- 파일, 폴더, 링크 구분
- 권한 수준
- 링크된 개수
- 소유자
- 그룹 소유자
- 바이트 단위
- 마지막으로 수정한 날짜 및 시간
- 파일 또는 폴더의 이름
참고: 일반적으로 `ls -l`은 `ll`이라는 별칭alias 으로 등록되어 `ll` 이라고 두 글자만 입력하면 동일한 결과를 얻을 수 있습니다.
리눅스에서는 bash 셸에서 alias를 사용하여 명령어를 단축하여 사용할 수 있습니다. 데비안 배포판에서는 다음과 같은 순서로 ll
명령에 ls -l
이 동작하도록 alias를 등록할 수 있습니다.
- 터미널에서
vi ~/.bashrc
명령을 실행해 파일을 열어줍니다. alias ll='ls -l'
이라고 작성합니다. 또는alias 지정할 별칭='사용할 명령'
과 같은 형식으로 다른 명령과 옵션을 등록합니다.wq;
로 파일을 저장하고 닫은 뒤ll
을 입력하면ls -l
명령어가 실행됩니다.
alias를 통해 자주 사용하는 명령을 등록해두면 상당히 편리하게 사용할 수 있습니다.
참고: 이 방식은 현재 사용자 계정에서만 동작합니다. 모든 사용자 계정에서ll
을 사용하려면/etc/bash.bashrc
파일에 alias를 추가해야 합니다.
리눅스에서는 bash 셸에서 alias를 사용하여 명령어를 단축하여 사용할 수 있습니다. 레드햇 계열 배포판에서는 다음과 같은 순서로 ll
명령에 ls -l
이 동작하도록 alias를 등록할 수 있습니다.
- 터미널에서
vi ~/.bash_profile
명령을 실행해 파일을 열어줍니다. alias ll='ls -l'
이라고 작성합니다. 또는alias 지정할 별칭='사용할 명령'
과 같은 형식으로 다른 명령과 옵션을 등록합니다.wq;
로 파일을 저장하고 닫은 뒤ll
을 입력하면ls -l
명령어가 실행됩니다.
alias를 통해 자주 사용하는 명령을 등록해두면 상당히 편리하게 사용할 수 있습니다.
참고: 이 방식은 현재 사용자 계정에서만 동작합니다. 모든 사용자 계정에서ll
을 사용하려면/etc/profile
파일에 alias를 추가해야 합니다.
숨김 파일 포함한 전체 목록 확인
ls -a
이전 설명의 ls -l
옵션 다음으로 자주 사용하는 옵션으로, 숨겨진 파일과 폴더도 모두 포함된 상태의 목록을 확인할 수 있습니다. 리눅스에서는 파일과 폴더 명 앞에 .
이 추가되어 있다면 숨김 파일로 간주되는데 이렇게 숨겨진 항목을 모두 확인할 수 있는 것 입니다.
root@ez:/etc/nginx# ls -a
. koi-utf nginx.conf snippets
.. koi-win proxy_params uwsgi_params
.HiddenFiles conf.d mime.types scgi_params
win-utf fastcgi.conf sites-available fastcgi_params
modules-available modules-enabled sites-enabled
root@ez:/etc/nginx#
.HiddenFiles
과 같이 숨겨진 목록과 파일들이 존재한다면 모두 포함해서 표기 됩니다.
숨겨진 파일 포함 자세한 목록 확인
ls -l -a
ls -a -l
ls -la
ls -al
다음과 같이 -l
과 -a
옵션을 함께 사용하면 숨겨진 파일과 폴더를 포함한 전체 목록을 자세하게 확인할 수 있습니다. 필자의 경우 ls -la
라고 사용하며 이외의 다른 옵션들도 동일하게 조합해서 활용할 수 있습니다.
root@ez:/etc/nginx# ls -la
total 73
drwxr-xr-x 8 root root 4096 Mar 6 17:24 .
drwxr-xr-x 109 root root 4096 Mar 9 06:47 ..
-rw-r--r-- 2 root root 1096 Mar 10 09:40 .HiddenFiles
drwxr-xr-x 1 root root 4096 Mar 7 09:35 conf.d
-rw-r--r-- 1 root root 1125 Jul 27 2022 fastcgi.conf
-rw-r--r-- 1 root root 1055 Jul 27 2022 fastcgi_params
-rw-r--r-- 1 root root 2837 Jul 27 2022 koi-utf
-rw-r--r-- 1 root root 2223 Jul 27 2022 koi-win
-rw-r--r-- 1 root root 3957 Aug 2 2022 mime.types
drwxr-xr-x 2 root root 4096 Nov 10 15:39 modules-available
drwxr-xr-x 2 root root 4096 Mar 6 17:11 modules-enabled
-rw-r--r-- 1 root root 1447 Jul 27 2022 nginx.conf
-rw-r--r-- 1 root root 180 Jul 27 2022 proxy_params
-rw-r--r-- 1 root root 636 Jul 27 2022 scgi_params
drwxr-xr-x 2 root root 4096 Mar 6 17:10 sites-available
drwxr-xr-x 2 root root 4096 Mar 6 17:10 sites-enabled
drwxr-xr-x 2 root root 4096 Mar 6 17:10 snippets
-rw-r--r-- 1 root root 664 Jul 27 2022 uwsgi_params
-rw-r--r-- 1 root root 3071 Jul 27 2022 win-utf
root@ez:/etc/nginx#
자세한 내용으로 숨겨진 항목이 포함된 모든 파일과 폴더 목록을 확인할 수 있습니다.
모든 옵션 확인
root@ez:/etc/nginx# ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print C-style escapes for nongraphic characters --block-size=SIZE with -l, scale sizes by SIZE when printing them;
e.g., '--block-size=M'; see SIZE format below -B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
modification of file status information);
with -l: show ctime and sort by name;
otherwise: sort by ctime, newest first
-C list entries by columns
--color[=WHEN] colorize the output; WHEN can be 'always' (default
if omitted), 'auto', or 'never'; more info below
-d, --directory list directories themselves, not their contents -D, --dired generate output designed for Emacs' dired mode
-f do not sort, enable -aU, disable -ls --color
-F, --classify append indicator (one of */=>@|) to entries
--file-type likewise, except do not append '*'
--format=WORD across -x, commas -m, horizontal -x, long -l,
single-column -1, verbose -l, vertical -C
--full-time like -l --time-style=full-iso
-g like -l, but do not list owner
--group-directories-first
group directories before files;
can be augmented with a --sort option, but any
use of --sort=none (-U) disables grouping
-G, --no-group in a long listing, don't print group names
-h, --human-readable with -l and -s, print sizes like 1K 234M 2G etc.
--si likewise, but use powers of 1000 not 1024
-H, --dereference-command-line
follow symbolic links listed on the command line
--dereference-command-line-symlink-to-dir
follow each command line symbolic link
that points to a directory
--hide=PATTERN do not list implied entries matching shell PATTERN
(overridden by -a or -A)
--hyperlink[=WHEN] hyperlink file names; WHEN can be 'always'
(default if omitted), 'auto', or 'never'
--indicator-style=WORD append indicator with style WORD to entry names:
none (default), slash (-p),
file-type (--file-type), classify (-F)
-i, --inode print the index number of each file
-I, --ignore=PATTERN do not list implied entries matching shell PATTERN
-k, --kibibytes default to 1024-byte blocks for disk usage;
used only with -s and per directory totals
-l use a long listing format
-L, --dereference when showing file information for a symbolic
link, show information for the file the link
references rather than for the link itself
-m fill width with a comma separated list of entries
-n, --numeric-uid-gid like -l, but list numeric user and group IDs
-N, --literal print entry names without quoting
-o like -l, but do not list group information
-p, --indicator-style=slash
append / indicator to directories
-q, --hide-control-chars print ? instead of nongraphic characters
--show-control-chars show nongraphic characters as-is (the default,
unless program is 'ls' and output is a terminal)
-Q, --quote-name enclose entry names in double quotes
--quoting-style=WORD use quoting style WORD for entry names:
literal, locale, shell, shell-always,
shell-escape, shell-escape-always, c, escape
(overrides QUOTING_STYLE environment variable)
-r, --reverse reverse order while sorting
-R, --recursive list subdirectories recursively
-s, --size print the allocated size of each file, in blocks
-S sort by file size, largest first
--sort=WORD sort by WORD instead of name: none (-U), size (-S),
time (-t), version (-v), extension (-X)
--time=WORD change the default of using modification times; access time (-u): atime, access, use;
change time (-c): ctime, status;
birth time: birth, creation;
with -l, WORD determines which time to show;
with --sort=time, sort by WORD (newest first)
--time-style=TIME_STYLE time/date format with -l; see TIME_STYLE below
-t sort by time, newest first; see --time
-T, --tabsize=COLS assume tab stops at each COLS instead of 8
-u with -lt: sort by, and show, access time;
with -l: show access time and sort by name;
otherwise: sort by access time, newest first
-U do not sort; list entries in directory order
-v natural sort of (version) numbers within text
-w, --width=COLS set output width to COLS. 0 means no limit
-x list entries by lines instead of by columns
-X sort alphabetically by entry extension
-Z, --context print any security context of each file
-1 list one file per line. Avoid '\n' with -q or -b
--help display this help and exit
--version output version information and exit
The SIZE argument is an integer and optional unit (example: 10K is 10*1024).Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.
The TIME_STYLE argument can be full-iso, long-iso, iso, locale, or +FORMAT.
FORMAT is interpreted like in date(1). If FORMAT is FORMAT1<newline>FORMAT2,
then FORMAT1 applies to non-recent files and FORMAT2 to recent files.
TIME_STYLE prefixed with 'posix-' takes effect only outside the POSIX locale.
Also the TIME_STYLE environment variable sets the default style to use.
Using color to distinguish file types is disabled both by default and
with --color=never. With --color=auto, ls emits color codes only when
standard output is connected to a terminal. The LS_COLORS environment
variable can change the settings. Use the dircolors command to set it.
Exit status:
0 if OK,
1 if minor problems (e.g., cannot access subdirectory),
2 if serious trouble (e.g., cannot access command-line argument).
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation <https://www.gnu.org/software/coreutils/ls>
or available locally via: info '(coreutils) ls invocation'
root@ez:/etc/nginx#
ls 명령의 옵션이 40여개 정도 되는데 이를 모두다 알아야 할 필요는 없으며 일반적으로 전술한 내용 정도만 알아두면 사용에 무리가 없는데요. 자주 사용하지 않는 명령을 더 알고 싶은 경우 ls --help
나 man ls
를 실행하면 ls
명령으로 사용 가능한 모든 옵션에 대한 내용을 확인할 수도 있습니다.