ls 명령을 사용하여 Linux에서 파일 및 디렉토리를 나열하는 방법

우리는 매일 리눅스 환경에서 ls 명령어를 아무 생각 없이 사용합니다. 하지만, 조금만 주의를 기울이면 이 명령어 안에 숨겨진 수많은 유용한 옵션들을 발견할 수 있습니다. 이는 여러분의 명령줄 활용 능력을 한층 더 끌어올릴 수 있는 좋은 기회가 될 것입니다.

ls 명령어, 파일과 디렉토리 목록의 기본

ls 명령어는 리눅스를 처음 접하는 사용자들에게 가장 먼저 소개되는 명령어 중 하나입니다. 많은 사용자들이 이 명령어를 마치 습관처럼 사용하며, 그 기본적인 기능 외에 더 많은 가능성을 간과하는 경우가 많습니다. ls 명령어는 단순히 디렉토리 내 파일들을 나열하는 것 이상의 역할을 수행합니다. 파일의 상세 정보, 권한 등을 확인하는 데에도 사용될 수 있습니다.

ls 명령어는 다양한 옵션을 제공하지만, 그 수가 너무 많아 오히려 사용자들이 필요한 옵션을 찾고 기억하는 데 어려움을 느낄 수 있습니다. 하지만, 이러한 옵션들을 잘 활용하면 명령어 사용 효율성을 크게 높일 수 있습니다. ls 명령어의 유용한 조합은 별칭(alias)으로 설정하여 사용할 수 있습니다. 대부분의 리눅스 배포판에서 기본적으로 사용되는 ‘ls’ 명령어는 실제로는 별칭으로 설정되어 있는 경우가 많습니다. type 명령어를 통해 ls 명령어의 실제 정의를 확인할 수 있습니다.

type ls

위 이미지에서 볼 수 있듯이, --color=auto 옵션은 ls 명령어 사용 시 자동으로 적용되어 파일 형식을 색상으로 구분하여 보여줍니다.

기본적인 파일 목록 표시

리눅스 터미널을 사용해 본 경험이 있다면, ls 명령어가 기본적으로 현재 디렉토리의 파일과 디렉토리 목록을 보여준다는 것을 알 것입니다.

ls

만약 목록을 한 줄에 하나의 파일만 표시하도록 변경하고 싶다면, -1 옵션을 사용하면 됩니다.

ls -1

위 이미지에서 보이는 특이한 파일 이름에 대해서는 잠시 후에 설명하겠습니다.

다른 디렉토리의 파일 목록 보기

ls 명령어를 사용하여 현재 디렉토리 외 다른 디렉토리의 파일 목록을 보려면, 명령행에 해당 디렉토리의 경로를 입력하면 됩니다. 여러 개의 디렉토리를 동시에 입력하여 각각의 내용을 확인할 수도 있습니다. 아래 예시는 “Help”와 “gc_help” 두 디렉토리의 파일 목록을 보여줍니다.

ls Help gc_help

ls 명령어는 입력된 순서대로 디렉토리의 내용을 나열하며, 각 디렉토리의 이름을 함께 출력합니다.

파일 패턴 매칭

특정 패턴에 맞는 파일들을 선택적으로 나열하고 싶을 때는 와일드카드 문자를 사용합니다. 물음표 ?는 단일 문자를 나타내고, 별표 *는 임의의 문자열을 나타냅니다. 예를 들어, 이름이 “ip_”로 시작하는 파일이나 디렉토리 목록을 보려면 다음과 같이 입력합니다.

ls ip_*

확장자가 “.c”인 파일만 나열하려면 아래와 같이 입력합니다.

ls *.c

ls 명령어와 함께 grep 명령어를 사용하여 더욱 강력한 패턴 매칭을 수행할 수도 있습니다. 예를 들어, 이름에 “_pin_” 문자열이 포함된 파일을 찾으려면 다음을 입력합니다.

ls | grep _pin_

이는 ls 명령어에서 와일드카드를 사용하여 검색하는 것과 유사하지만, grep은 출력을 한 줄에 하나의 파일 이름으로 강제한다는 차이점이 있습니다.

ls *_pin_*

인쇄 불가능한 문자 처리

때로는 파일 이름에 인쇄 불가능한 제어 문자가 포함될 수 있습니다. 이는 웹에서 다운로드한 압축 파일이나, 다른 사용자가 생성한 파일에서 종종 발생합니다. 이러한 문자는 파일 브라우저에서 특수 기호로 표시됩니다.

이러한 문자를 실제로 확인하려면, ls 명령어에 -b (이스케이프) 옵션을 사용해야 합니다. 이 옵션은 C 프로그래밍 언어에서 제어 문자를 표현하는 이스케이프 시퀀스를 사용하여 파일 이름을 표시합니다.

ls -b a*

위 예시에서 숨겨진 문자는 개행 문자이며, C 언어에서는 \n으로 표현됩니다.

특정 파일 숨기기

ls 명령어의 출력에서 특정 파일을 제외하고 싶다면 --hide 옵션을 사용할 수 있습니다. 예를 들어, 백업 파일(확장자 .bak)을 숨기려면 다음과 같이 입력합니다.

ls
ls --hide=*.bak

두 번째 출력 결과에서 .bak 확장자를 가진 파일이 숨겨진 것을 확인할 수 있습니다.

상세 정보 출력

-l (긴 목록) 옵션을 사용하면 ls 명령어는 파일에 대한 상세 정보를 출력합니다.

ls -l

출력되는 각 정보에 대해 자세히 살펴보겠습니다.

가장 먼저 출력되는 것은 목록에 있는 모든 파일의 총 크기입니다. 그 다음부터는 각 파일 또는 디렉토리 정보가 한 줄씩 출력됩니다.

각 줄의 첫 번째 부분은 10개의 문자로 구성되어 있으며, 이는 파일 유형과 권한을 나타냅니다.

첫 번째 문자는 파일 유형을 나타내며, 다음과 같은 종류가 있습니다.

  • -: 일반 파일
  • b: 블록 특수 파일
  • c: 문자 특수 파일
  • d: 디렉토리
  • l: 심볼릭 링크
  • n: 네트워크 파일
  • p: 명명된 파이프
  • s: 소켓

나머지 9개의 문자는 읽기(r), 쓰기(w), 실행(x) 권한을 나타내는 3개의 그룹으로 나뉩니다. 각 그룹은 소유자, 그룹 구성원, 그 외 사용자의 권한을 나타냅니다.

때로는 소유자 실행 권한이 s로 표시되는 경우가 있습니다. 이는 setuid 비트가 설정되었음을 의미하며, 해당 파일을 실행하는 사용자의 권한이 아닌 파일 소유자의 권한으로 실행됨을 의미합니다. 또한, 그룹 실행 권한이 s로 표시되는 경우 setgid 비트가 설정되었음을 의미하며, 파일이 소유자 그룹의 권한으로 실행되거나, 디렉토리에 적용 시 생성된 파일이 해당 디렉토리의 그룹 권한을 상속받게 됩니다.

그 외 다른 사람들의 실행 권한이 t로 표시되는 경우에는 스티키 비트가 설정된 것입니다. 디렉토리에 스티키 비트가 설정되면, 파일 소유자, 디렉토리 소유자, 또는 루트 사용자만이 디렉토리 내 파일의 이름을 바꾸거나 삭제할 수 있습니다.

스티키 비트는 일반적으로 /tmp와 같은 폴더에서 사용됩니다. /tmp 디렉토리는 모든 사용자가 사용할 수 있지만, 스티키 비트는 각 사용자가 자신의 임시 파일만 수정 또는 삭제할 수 있도록 제어합니다.

/tmp 디렉토리에서 스티키 비트를 확인할 수 있습니다. 이 때, -d (디렉토리) 옵션을 사용하여 디렉토리 자체의 정보를 출력해야 합니다.

ls -l -d /tmp

권한 정보 다음에 출력되는 숫자는 파일 또는 디렉토리에 대한 하드 링크의 수입니다. 일반 파일의 경우 1이지만, 다른 하드 링크가 생성되면 증가합니다. 디렉토리는 일반적으로 2개 이상의 하드 링크를 가지고 있습니다.

그 다음에는 소유자와 그룹의 이름, 파일 크기, 파일이 마지막으로 수정된 날짜 및 시간, 그리고 파일 이름이 순서대로 출력됩니다.

사람이 읽기 쉬운 파일 크기

파일 크기가 바이트 단위로 표시되는 것이 불편할 때가 있습니다. -h (사람이 읽을 수 있는 크기) 옵션을 사용하면 파일 크기가 킬로바이트, 메가바이트 등 적절한 단위로 표시됩니다.

ls -l -h

숨겨진 파일 표시

숨겨진 파일(이름이 .으로 시작하는 파일)을 보려면 -a (all) 옵션을 사용합니다.

ls -l -a

출력 결과에서 ... 항목은 각각 현재 디렉토리와 상위 디렉토리를 나타냅니다. 또한 .base_settings와 같은 숨겨진 파일이 표시됩니다.

. 및 .. 항목 제외

숨겨진 파일은 보고 싶지만 ... 항목은 제외하고 싶을 때 -A (almost all) 옵션을 사용합니다.

ls -l -A

이제 숨겨진 파일들은 계속 표시되지만, ... 항목은 제외된 것을 확인할 수 있습니다.

하위 디렉토리까지 재귀적으로 출력

ls 명령어가 모든 하위 디렉토리의 파일들을 나열하도록 하려면 -R (recursive) 옵션을 사용합니다.

ls -l -R

ls 명령어는 시작 디렉토리 아래의 모든 하위 디렉토리들을 탐색하며 각 디렉토리의 파일 목록을 보여줍니다.

숫자 UID 및 GID 표시

사용자 이름 및 그룹 이름 대신 사용자 ID(UID)와 그룹 ID(GID)를 표시하려면 -n (numeric uid and gid) 옵션을 사용합니다.

ls -n

목록 정렬

파일 이름, 크기, 수정 시간 등을 기준으로 목록을 정렬할 수 있습니다. 파일 크기별로 정렬하는 경우에는 긴 목록 형식을 사용하는 것이 유용하며, 확장자별로 정렬할 때는 긴 목록 형식이 필수는 아닙니다.

확장자별로 정렬하려면 -X (extension) 옵션을 사용합니다.

ls -X -1

디렉토리가 먼저 나열되고, 나머지 파일들은 확장자에 따라 알파벳 순서로 정렬됩니다.

파일 크기별로 정렬하려면 -S (size) 옵션을 사용합니다.

ls -l -h -S

가장 큰 파일부터 작은 파일 순서로 정렬됩니다.

수정 시간별로 정렬하려면 -t (time) 옵션을 사용합니다.

ls -l -t

가장 최근에 수정된 파일부터 먼저 출력됩니다.

파일 수정 시간이 현재 년도 이내이면 월, 일, 시간이 표시되고, 현재 년도가 아니면 월, 일, 연도가 표시됩니다.

ls 명령어와 head, tail 명령어를 함께 사용하면 디렉토리에서 가장 최근에 수정된 파일과 가장 오래된 파일을 빠르게 찾을 수 있습니다.

가장 최근에 수정된 파일 또는 디렉토리를 찾으려면:

ls -t | head -1

가장 오래된 파일 또는 디렉토리를 찾으려면:

ls -t | tail -1

정렬 순서 반전

정렬 순서를 반대로 하려면 -r (reverse) 옵션을 사용합니다.

ls -l -h -S -r

파일 크기별 정렬 시, 가장 작은 파일부터 가장 큰 파일 순서로 정렬됩니다.

더 많은 옵션들

ls 명령어의 더 많은 옵션을 알고 싶다면 man 페이지를 참고하십시오. 예를 들어, 파일 타임스탬프를 최대한 정밀하게 보고 싶다면 --full-time 옵션을 사용합니다.

ls --full-time

파일의 inode 번호를 보고 싶다면 -i 옵션을 사용합니다.

ls -i

흑백 디스플레이 환경에서 디렉토리와 심볼릭 링크 등을 쉽게 구분하고 싶다면, -F (classify) 옵션을 사용하여 각 항목에 다음과 같은 기호를 추가할 수 있습니다.

  • /: 디렉토리
  • @: 심볼릭 링크
  • |: 명명된 파이프
  • =: 소켓
  • *: 실행 파일
ls -F

ls 명령어는 매우 다양한 옵션을 제공하는 강력한 명령어입니다. 이 글에서 소개된 내용 외에도 더 많은 기능들이 존재하므로, 꾸준히 탐구하면 새로운 유용한 기능들을 발견할 수 있을 것입니다.