Ls (유닉스)

ls는 POSIX 및 단일 유닉스 규격에 규정되어 있는 유닉스 계열 운영 체제의 명령어 가운데 하나로, ‘list segments’의 약자이며, 파일의 목록을 표시하는 기능을 수행하는 명령어이다. 도스에서의 dir과 유사한 명령어이다.

역사 
ls는 AT&T의 유닉스 초기 버전부터 존재하던 명령어였다. 이 명칭은 멀틱스에 존재하고 있었던 비슷한 커맨드에서 계승되었다. 현재 사용되고 있는 ls는 자유 소프트웨어 재단에서 구현된 판과 FreeBSD, OpenBSD, NetBSD 및 다윈 등의 BSD 계열 유닉스 시스템에서 사용되고 있는 판 등이 있으며, 양쪽 다 자유 소프트웨어이며 오픈 소스이기도 하다.

작동 형태 
유닉스 계열의 운영 체제에서는 현재 사용자가 작업을 수행하고 있는 파일 시스템상의 위치를 나타내는 ‘현재 디렉터리’(current directory)라는 개념이 존재한다. (이 개념은 도스 등에서도 존재한다.) ls를 옵션 없이 기동시킬 경우, 현재 디렉터리에 있는 파일의 목록이 표시되게 된다. 또한, 디렉터리 또는 파일의 목록을 매개 변수로 지정하였을 경우, 지정된 파일 또는 디렉터리 안에 소속되어 있는 파일의 목록이 표시된다.

이때, 명칭이 ‘.’로 시작되는 파일은 보통은 표시되지 않으며, 이런 종류의 파일 또한 표시하기 위해서는 -a를 옵션으로 지정해야 한다.

옵션을 지정하지 않고 ls를 실행시켰을 경우, 파일 이름만 표시되나, 이 경우 파일의 종류와 크기, 퍼미션 등의 부가 정보가 표시되지 않는다. ls에는 표시의 형식을 변경할 수 있는 옵션들이 많이 존재하고 있다.

파일 종류를 가리키는 색을 사용하는 옵션을 적용하면 다음과 같이 출력된다:

  brw-r--r--    1 unixguy staff 64,  64 Jan 27 05:52 block         
  crw-r--r--    1 unixguy staff 64, 255 Jan 26 13:57 character     
  -rw-r--r--    1 unixguy staff     290 Jan 26 14:08 compressed.gz 
  -rw-r--r--    1 unixguy staff  331836 Jan 26 14:06 data.ppm      
  drwxrwx--x    2 unixguy staff      48 Jan 26 11:28 directory     
  -rwxrwx--x    1 unixguy staff      29 Jan 26 14:03 executable    
  prw-r--r--    1 unixguy staff       0 Jan 26 11:50 fifo          
  lrwxrwxrwx    1 unixguy staff       3 Jan 26 11:44 link -> dir   
  -rw-rw----    1 unixguy staff     217 Jan 26 14:08 regularfile

옵션 
명령어 ls 뒤에 한 칸을 띄우고 옵션을 입력하여 출력형태를 바꿀 수 있다. 모든 파일과 폴더를 출력하라는 -a, 목록의 각 항목에 대해 수정시간, 파일 용량 등의 세부적인 내용을 제시하라는 -l등의 옵션이 있다.

옵션 없이 ls를 사용하면 단순 형식으로 파일을 보여준다. 일반적인 옵션은 다음과 같다:
 -l 롱 포맷.
 -f 정렬 안 함. 많은 수의 파일을 포함하고 있는 디렉터리에 유용함.
 -F 파일의 본질을 나타내는 문자 추가.
 -a “.”으로 시작하는 이름을 포함, 관련 디렉터리의 모든 파일 나열.
 -R 하부 디렉터리를 반복하여 나열. 그러므로 ls -R / 명령은 모든 파일을 나열.
 -d 심볼 링크나 디렉터리에 대한 정보 표시.
 -t 수정 시간에 따라 파일 목록을 나열,
 -h 사람이 인지할 수 있는 형태로 크기를 출력. (예: 1K, 234M, 2G, 등)

사용의 예 
다음의 예는, 두 개의 옵션 (-l, -F)를 파라미터로 지정하여 ls를 각각 실행시켰을 때의 다른 출력 결과이다.
$ pwd
/home/fred
$ ls -l
drwxr--r--   1 fred  editors   4096  drafts
-rw-r--r--   1 fred  editors  30405  edition-32
-r-xr-xr-x   1 fred  fred      8460  edit
$ ls -F
drafts/
edition-32
edit*
여기서, fred 사용자의 홈 디렉터리에는 drafts라고 하는 디렉터리와 edition-32라는 이름의 보통 파일, 여기에 edit라는 이름의 실행 가능한 파일이 존재함을 확인할 수 있다. ls는 사용자(user), 사용자의 소속 그룹(group), 파일의 소유자 외의 다른 사용자들(other)이 파일에 대해 어떤 권한(퍼미션)을 가지고 있는가를 표시하기 위해 몇 가지 문자를 채용하고 있다.

퍼미션 부분의 최초의 문자는 파일의 종류를 가리킨다.

첫 번째 문자 이후의 9개의 문자열은 각각 3문자씩의 세 묶음으로 나뉘어 있으며, 3문자에는 - 또는 각각 r, w, x가 표시될 수 있어, 각각 읽기, 쓰기, 실행의 권한을 가지고 있음을(-의 경우 없음을) 나타낸다. 첫 번째 묶음은 파일의 소유자인 사용자, 두 번째 묶음은 사용자가 속한 그룹, 세 번째는 다른 사용자들을 의미한다. 위의 예에서, fred 사용자는 edition-32을 읽고 쓸 수는 있으나, 실행은 할 수 없음을 알 수 있다. editors 그룹의 소속 사용자는 그 밖의 다른 사용자와 마찬가지로, edition-32을 읽을 수 있으나, 파일을 쓰거나 실행시키는 작업은 할 수 없다.

외부 링크 
  
  
 ls.c AT&T Ver. 5 UNIX의 ls 소스 코드.
 GNU ls 소스 코드

표준 유닉스 프로그램
유닉스 SUS2008 유틸리티