ls는 디렉터리 안의 이름과, 옵션에 따라 권한과 크기와 시각을 보여 준다. 인자가 없으면 현재 디렉터리다. 이 글의 동작은 GNU ls 기준이다. `ls --version`으로 확인할 수 있다.
ls
ls /var/log
ls -l
ls -a
ls -al
ls -alh기본 출력
터미널에 직접 나오면 여러 열로 보여 준다. 파이프나 파일로 보내면 한 줄에 하나다. `-1`은 항상 한 줄, `-C`는 열로 보여 준다.
기본 정렬은 이름이다. 순서는 로캘을 따른다. 같은 파일이라도 언어 설정에 따라 숫자와 한글의 자리가 달라진다. 순서를 바이트 기준으로 고정하려면 `LC_ALL=C ls`를 쓴다.
점으로 시작하는 이름은 숨김 파일이다. `-a`는 숨김 파일과 `.`, `..`까지 보여 준다. `-A`는 숨김 파일은 보여 주되 `.`와 `..`는 빼 준다.
`-d`는 디렉터리 내용을 풀지 않고 그 디렉터리 자체만 보여 준다.
ls -ld /var
ls -ld */둘째는 현재 위치의 디렉터리만 고른다. `*/` 패턴은 셸이 디렉터리 이름으로 바꾼 뒤 ls에 넘긴다.
ls -al이 보여 주는 것
`-l`은 한 항목을 한 줄로 푼다. `-al`은 숨김 파일까지 포함한 긴 목록이다. 한 줄은 이런 꼴이다.
drwxr-xr-x 2 user user 4096 Oct 24 17:00 notes맨 앞 한 글자는 종류다.
- `-`는 일반 파일이다. - `d`는 디렉터리다. - `l`은 심볼릭 링크다. - `c`는 문자 장치, `b`는 블록 장치다. - `s`는 소켓, `p`는 파이프(FIFO)다.
다음 아홉 글자는 소유자, 그룹, 그 밖의 사용자 순이다. 각 칸은 읽기 `r`, 쓰기 `w`, 실행 `x`다. `-`는 그 권한이 없다는 뜻이다. 디렉터리의 `x`는 그 안으로 들어갈 수 있다는 뜻이다.
`x` 자리에 `s`가 있으면 setuid(소유자 칸) 또는 setgid(그룹 칸)다. 실행 권한이 없는 특수 비트는 `S`로 보인다. 마지막 칸의 `t`는 sticky bit다. `/tmp`에서 흔하다. 실행 권한이 없으면 `T`로 보인다.
그다음 숫자는 하드 링크 개수다. ext4 같은 파일시스템에서 디렉터리 숫자는 보통 2에 바로 아래 디렉터리 개수를 더한 값이다. 하위 디렉터리마다 `..`가 있기 때문이다. btrfs처럼 이 숫자를 1로만 보여 주는 파일시스템도 있다.
이어서 소유자, 그룹, 크기가 온다. `-l`의 크기는 바이트다. `-h`를 붙이면 `1K`, `234M`처럼 읽기 쉽다. `--si`는 1024가 아니라 1000 단위다.
ls -alh시각은 내용이 바뀐 시각이다. 최근 6개월 안은 월, 일, 시, 분이고, 그보다 오래되면 연도가 나온다. 초까지 보려면 `--full-time`을 붙인다.
심볼릭 링크는 이름 뒤에 대상이 붙는다.
lrwxrwxrwx 1 user user 15 Oct 24 17:00 syslog -> /var/log/syslog목록 맨 위의 `total` 숫자는 바이트를 더한 값이 아니다. GNU ls의 기본은 1024바이트 블록 수의 합이다.
정렬과 표시
ls -altr
ls -alSh
ls -alR
ls -ali
ls -F`-t`는 수정 시각이 최근인 항목을 위로 올린다. `-r`은 순서를 뒤집는다. `-tr`은 오래된 것이 위, 최근 것이 아래다. `-S`는 크기가 큰 순이다. `-h`와 같이 쓰면 크기도 읽기 쉽다.
`-R`은 하위 디렉터리까지 내려간다. `-i`는 inode 번호다. `-n`은 소유자와 그룹을 숫자 id로 보여 준다. `-F`는 디렉터리 뒤에 `/`, 실행 파일 뒤에 `*`, 심볼릭 링크 뒤에 `@`를 붙인다.
`--color=auto`는 출력이 터미널일 때만 색을 쓴다. 파이프에는 색 문자가 섞이지 않는다. `always`는 파이프에도 색을 넣는다.
GNU ls는 터미널에서 공백이나 특수문자가 있는 이름을 따옴표로 감싸 보여 주기도 한다. 따옴표 없이 보려면 `--quoting-style=literal`을 붙인다.
스크립트에서
ls 출력은 사람이 읽기 위한 것이다. 이름에 공백이나 개행이 있으면 줄을 잘라 쓰기 어렵다. 프로그램에 파일 목록을 넘길 때는 find의 `-print0`를 쓴다. find 글에 적어 두었다.
명령줄에 적은 심볼릭 링크만 따라가려면 `-H`를 쓴다. 링크가 가리키는 쪽이 아니라 링크 자체가 필요하면 `-l`로 본다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.