윈도나 맥 뿐만 아니라 리눅스도 마찬가지로 정보(데이터), 문서, 이미지, 영상, 프로그램 등이 파일로 보존이 된다. 또한 리눅스에서는 사용자의 데이터뿐만 아니라 시스템을 구성하는 장치조차도 파일로 다룬다.
하드 디스크, 키보드, 프린터 같은 입출력 장치를 전부 파일로 다룬다. 심지어 리눅스 커널도 파일이고 시스템 설정도 파일에 기록된다.
윈도나 맥의 폴더 개념과 동일하다.
파일의 개수가 많아지면 종류별로 분류하는 것이 좋은데, 여러 개의 파일을 담아서 정리할 수 있는 것이 디렉터리이다.
맨 위에 있는 /
루트 디렉터리는 모든 파일과 디렉터리의 부모이다.
이 루트 디렉터리 아래에 디렉터리와 파일이 있는 계층 구조를 트리 혹은 디렉터리 트리라고 한다.
어떠한 특정 파일을 '루트 디렉터리 아래의 usr 디렉터리 아래의 bin 디렉터리 아래에 있는 perl이라는 파일' 이라고 표기하는 건 비효율적이다.
그래서 다음과 같이 디렉터리 사이에 /
를 넣어 /usr/bin/perl
과 같은 방식으로 표기한다. 이를 해당 파일에 대한 경로(path)
라 한다.
리눅스는 /
이지만 윈도에서는 ₩
를 사용한다.
윈도에서는 물리 디스크가 2개 있다면 디렉터리 트리도 2개이다.
하지만 리눅스에서는 언제나 시스템 전체에 단 하나의 트리만 가진다.리눅스에서는 디스크가 여러 개 있을 때 루트 디렉터리의 어딘가에 해당 디스크의 디렉터리가 연결된다. 이렇게 디스크의 디렉터리를 연결하는 것을 마운트라 한다.
리눅스의 디렉터리 구조는 FHS(Filesystem Hierarchy Standard)라는 표준 사양을 따른다.
/bin
- 일반 사용자 및 관리자가 사용하는 명령어의 실행 파일이 배치되어 있는 디렉터리. 특히 시스템과 관련된 중요도가 높은 명령어를 포함하고 있다.
/dev
- 디바이스 파일이 배치되어 있는 디렉터리. 디바이스 파일이란 디스크나 키보드 등 하드웨어를 다루기 위한 특수 파일
/etc
- 리눅스에서 돌아가는 다양한 애플리케이션의 설정 파일이 이 아래에 배치. 애플리케이션 뿐만 아니라 리눅스 자체의 설정 파일도 이곳에 있다. 따라서 리눅스를 운영하고 관리할 때 무척 중요한 디렉터리이다.
/home
- 사용자별로 할당되는 홈 디렉터리가 배치되는 디렉터리. 홈 디렉터리란 사용자별로 할당되는 개인용 디렉터리를 말한다. 사용자 이름이 디렉터리 이름으로 사용된다. 예를 들어 사용자 이름이 ldk라면 사용자의 홈 디렉터리는 /home/ldk가 된다. 사용자는 홈 디렉터리 안에서 자유롭게 파일이나 디렉터리를 작성해 작업할 수 있다.
/sbin
/bin
과 비슷하게 실행 파일을 포함하는 디렉터리. 그런데 이 디렉터리에는 관리자용 명령어가 포함되어 있다. 예를 들어 시스템을 종료시키는shutdown
명령어가 이 안에 있다.
/tmp
- 임시 파일이 들어 있는 디렉터리. 애플리케이션 실행 중 임시로 작업 결과를 파일로 보존할 때 보통 이 디렉터리에 저장한다. 정기적으로 이 디렉터리 안의 파일을 삭제하도록 설정된 배포판도 있으므로 중요한 파일을 보관해서는 안된다.
/usr
- 설치한 애플리케이션의 실행 파일, 문서, 라이브러리 등이 이 디렉터리에 포함된다.
/usr
아래에는bin
,sbin
,etc
등이 있어 루트 디렉터리와 구조가 비슷하다.
/var
- 변화하는(variable) 데이터를 저장하기 위한 디렉터리. 애플리케이션 실행 중에 만들어진 데이터나 로그, 메일 등이 이곳에 저장된다.
/var
에는 많은 파일이 기록되므로 용량이 부족해질 수도 있으니 시스템을 관리할 때 주의해야 한다.
리눅스를 사용하다 보면 많은 디렉터리를 이동하면서 작업하게 된다. 이때 현재 위치한 디렉터리를 현재 디렉터리, 영어로 current directory 혹은 working directory라고 한다.
리눅스에 로그인한 직후에는 사용자의 홈 디렉터리에서 시작한다.
셸에서 파일을 다룰 때는 현재 디렉터리가 기준이 된다. 따라서 작업하기 전에 먼저 pwd로 현재 디렉터리의 위치를 확인하는 것이 좋다.
pwd
: 현재 디렉터리를 표시하는 명령어
리눅스에서 디렉터리나 파일의 위치를 표시하는 두 가지 방법
/usr/bin/perl
처럼 루트 디렉터리부터 해당 파일에 이르는 경로를 표시하는 것을 절대 경로라 한다.
절대 경로는 해당 파일의 위치를 명확하게 나타내지만, 디렉터리의 깊이가 깊으면 경로가 너무 길어진다는 문제가 있다. 또한, 시스템 별로 절대 경로가 달라서 여러 시스템에서 사용하기에는 무리가 있다.
현재 디렉터리의 위치를 기준으로 표기하는 경로를 상대 경로라 한다.
/home/dongmin
현재 디렉터리에는 file-1,-2
가 들어있는 work
라는 디렉터리가 있다고 가정하자.
상대 경로 절대 경로
../../ /
.. /home
. /home/dongmin
work 혹은 ./work /home/dongmin/work
work/file-1 혹은 ./work/file-1 /home/dongmin/work/file-1
file-2 혹은 ./file-2 /home/dongmin/file-2
.
는 현재 디렉터리를 뜻한다.
현재 디렉터리에 있는 파일 file-2
의 위치를 좀 더 명확하게 표기하기 위해 ./file-2
라고 표기할 수 있다.
..
는 부모 디렉터리를 뜻한다.
즉, 현재 디렉터리의 위에 있는 디렉터리를 지정하기 위해 사용한다.
..
를 연속해서 사용하면 부모 디렉터리 위의 부모 디렉터리를 나타낸다. 가령 ../../../../
는 현재 디렉터리를 기준으로 4개 위의 디렉터리를 뜻한다.
만약 ../miyake
라고 하면 부모 디렉터리 아래의 miyake
를 뜻한다.
pwd
: 현재 디렉터리 출력
cd
: 현재 디렉터리 변경
ls
: 디렉터리 안의 파일을 출력
cd 명령어는 명령어 뒤에 지정한 디렉터리로 이동하는데, 이때 명령어 뒤에 전달하는 문자열을 커맨드 라인 인자
라고 한다. 명령어에 따라 여러 개의 인자를 받거나 옵션을 지정하는 것이 가능하다.
홈 디렉터리는 자주 방문해야 하는 디렉터리인 만큼 쉽게 돌아갈 수 있는 방법이 있다.
다음과 같이 아무런 인자를 쓰지 않은 채 cd 명령어를 실행하면 홈 디렉터리로 이동한다.
~
(틸드)를 사용해도 홈 디렉터리로 이동한다.
커맨드 라인에서 틸드는 셸에 의해 사용자의 홈 디렉터리 경로로 치환된다. 이러한 기능을 셸의 틸드 확장이라 한다.
틸드 확장을 사용하면 홈 디렉터리의 서브 디렉터리로 바로 이동할 수도 있다.
인자로 여러 경로를 지정할 수 있다.
ls 명령어의 인자로 여러 파일을 지정할 때 일일이 모든 파일을 타이핑하는 것은 번거로운 일이다. 이때 배시에 있는 경로 확장 기능으로 파일 이름의 패턴을 지정할 수 있다.
경로 확장은 와일드카드 확장
혹은 파일 이름 글로브(glob)
라고도 불리우며 *
(애스터리스크)와 ?
(물음표) 기호를 사용한다.
*
: 임의의 문자열을 의미.ls abc*
는 abc로 시작하는 파일을 출력한다.ls *.html
과 같이 특정 확장자의 파일 목록을 지정할 때도 사용이 가능하다.?
: 임의의 한 문자만을 의미.ls abc??
는 abc로 시작하는 길이가 5개인 글자를 출력한다.ls 명령어를 비롯해서 많은 명령어는 -
(하이픈)으로 시작하는 옵션을 지정할 수 있다.
예를 들어 ls
명령어에 -l
옵션을 붙이면 파일 이름뿐만 아니라 파일의 속성과 상세 정보까지 함께 출력한다.
출력된 상세 정보에는 파일 타입, 파일 모드, 링크 수, 소유자, 소유 그룹, 크기, 타임스탬프, 파일 이름 또는 디렉터리 이름 등이 출력된다.
ls -al
: -a
옵션을 추가하면 숨겨진 파일(.
로 시작하는 파일)도 함께 출력한다.
ls -alF
: -F
옵션을 붙이면 파일 이름 뒤에 파일의 종류를 의미하는 기호를 추가해 출력한다.
파일의 종류
- 보통 파일 : 표시되지 않음
- 디렉터리 : /
- 실행 가능 파일 : *
- 심볼릭 링크 : @
명령어 별로 옵션을 지정하는 규칙은 모두 다르다.
ls -alF
처럼 옵션을 묶어서 지정해도 되고 ls -a -l -F
처럼 별도로 옵션을 지정해도 된다.
ls -aF /
처럼 옵션과 인자를 동시에 지정할 수도 있다. (여기서 인자로는 /
(루트 디렉터리)가 주어졌다). 이때는 먼저 옵션을 쓰고 뒤에 인자를 작성한다.
명령어가 아닌 옵션에 대한 인자를 지정할 수도 있다. 예를 들어 ls
명령어의 -w
옵션은 지정한 값에 맞게 문자 간격을 맞춰 출력한다.
문자를 30개씩 출력하도록 지정 (여기서 30은 옵션 -w의 인자이다)
일반적인 옵션은 하이픈
+ 영숫자 한 문자
형식이지만, --
처럼 하이픈 두 개로 시작하는 옵션 형식도 있다. 예를 들면 quote-name
라는 옵션을 사용하면 파일 이름을 "
로 묶어서 출력한다.
다른 옵션과 혼동될 여지가 없으면 뒷부분 생략도 가능하다.