본문 바로가기
서버/리눅스

리눅스(Linux) 파일과 디렉토리 (feat. 현업에서 사용하는 명령어)

by 유.독 2023. 10. 21.
반응형

안녕하세요 유.독입니다!

리눅스를 다루기 위한 두번째 시간입니다. 윈도우에 익숙한 우리가 리눅스를 이해하기 위해서는 먼저 중요한 개념을 알고 가야할 것 같은데, 이 부분부터 설명 드릴게요.


리눅스의 중요한 특징

 

Everythig is File
(리눅스는 모든 것을 파일로 취급한다.)

유닉스 계열 운영체제의 핵심 철학은 파일을 통해서 모든 것을 일관되게 관리하는 것입니다. 이는 문서, 하드 드라이브, 키보드, 프린터 그리고 프로세스간 통신까지도 파일로 관리된다는 것을 의미하지요. 이로인해 다양한 프로그램에서 파일시스템 내에 존재하는 파일들을 쉽게 활용할 수 있다는 이점이 있습니다.


파일과 디렉토리

리눅스에서 루트 디렉토리는 "/"입니다. 루트 디렉토리에는 /usr, /var, /etc, /home와 같은 디렉토리들이 위치합니다. 이 경로에는 root사용자(슈퍼 사용자)만 접근이 가능하며, 사용자는 /home/[사용자명]/ 폴더에서 작업합니다.

 

사용자 별로 디렉토리를 분류하는 이유는 리눅스는 다중 사용자환경에서 동작하도록 설계되었기 때문입니다. 또한 사용자는 루트 경로에 접근하지 못하게 함으로써 시스템 구성을 변경하지 못하도록하여 보안을 유지할 수 있습니다.


명령어 ls와 옵션들

ls는 list를 의미하며, 파일 및 디렉토리를 사용자에게 보여줍니다. 자주 사용하고 알아둘게 많은 명령어이기 때문에 따로 설명드리겠습니다.

짧은옵션 긴옵션 설명 출력 예시
-a --all 모든 파일을 보여준다.
마침표(.)로 시작하는 숨김파일도 보여준다.
drwxr-xr-x. 2 username username  6 10월 18 23:14 .
drwxr-xr-x. 2 username username  6 10월 18 23:14 ..

drwxr-xr-x. 2 username username  6 10월 18 23:14 dir1
-rw-r--r--. 1 username username 2219 10월 10 14:35 file1
-d --directory 디렉토리에 대한 정보를 보여준다. dir1
-F --classify 파일이름 뒤에 파일유형 기호를 추가한다. 파일.txt
디렉토리/
실행파일*
심볼릭링크@
-h --human-readable 바이트 크기가 아닌, 읽기 쉬운 형태로 가공하여 보여준다.( 1024 => 1K)
ex) $ ls -ah
-rw-r--r--. 1 username username 2.2K 10월 10 14:35 file1
-i --inode inode번호를 보여준다. 34664131 dir1  51894433 file1
-l --format=long 파일정보를 자세히 보여준다. drwxr-xr-x. 2 username username  6 10월 18 23:14 dir1
-rw-r--r--. 1 username username 2.2K 10월 10 14:35 file1
-r --reverse 알파벳 오름차순이 아닌, 내림차순으로 리스트에 표시한다. file1 dir1
-R --recursive 재귀적으로 수행하여, 서브디렉터리 내용도 나열한다. [생략]
-S --sort=size 파일 크기 오름차순 정렬 [생략]
-t --sort=time 최종 수정시간 순서대로 정렬 [생략]

 

유용한 조합

$ ls -al

ls명령어에 -al옵션을 사용하면 파일과 디렉토리 그리고 숨김파일까지 확인할 수 있습니다. 파일의 자세한 내용까지 확인할 수 있어서 업무에서 유용하게 사용할 수 있습니다. 그렇다면 어떤 내용이 표시되는지 자세히 알아볼까요?

drwxr-xr-x. 3 username username   31 10월 18 23:19 .                  #현재디렉토리
drwxr-xr-x. 3 username username   19 10월 10 14:35 ..                 #부모디렉토리
drwxr-xr-x. 2 username username    6 10월 18 23:14 dir1               #현재 디렉토리 내 디렉토리
-rw-r--r--. 1 username username 2219 10월 18 23:19 file1              #현재 디랙토리 내 파일

먼저 간략한 내용을 #주석처리를 하여 코드블록에 표시했습니다. 

 

자세한 내용을 더 알아볼게요. 먼저 1번은 파일 종류를 뜻합니다. -파일 d디렉토리이고 i는 심볼릭 링크입니다. 심볼링 링크와 3번 하드링크는 다음포스트에서 다루겠습니다. 4번과 5번은 권한을 뜻합니다.


디렉토리 관련 명령어

디렉토리 이동, 생성

명령어 설명
cd [파일경로] change directory
현재 작업디렉토리를 사용자가 지정한 디텍토리로 변경한다.
mkdir [디렉토리명 ...] make directory
디렉토리를 만들기 위해 사용된다. 한번에 여러개 생성가능하다.

옵션
-p : 디렉토리가 없더라도 생성에 필요한 디렉토리들을 모두 생성한다.
ex) mkdir -p 하위디렉토리1/하위디렉토리2
rmdir [디렉토리명] remove directory
디렉토리를 삭제한다. 단, 비어있는 디렉토리만 삭제 가능
rm [디렉토리명] remove
파일이나 디렉토리를 삭제한다.
디렉토리 내의 파일과 하위 디렉토리를 삭제하려면 rm -r dir, rm -rf dir을 사용한다. (하지만 복구가 안되므로 주의가 필요하다)

alias rm='rm -i' 명령어를 실행하여 alias를 등록해두면, rm명령어를 실행할 때마다 '파일을 삭제할 지 묻는 메시지가 발생한다'

 

파일 복사 및 이동

명령어 설명
cp copy
파일 또는 디렉토리를 복사한다.

파일 복사
$ cp [option...] fromfile tofile
    => fromfiletofile로 복사한다.
         (tofile이 이미 존재하는 경우 덮어씌우므로 안전하게 -i옵션을 사용하여 덮어씌워지지 않도록 주의한다.)

파일 이동
$ cp -r [option...] file... dir 
   => file을 dir 디렉토리 하위로 복사한다.
$ cp -r [option...] dir1 dir2 
    => 명령어를 사용해, dir디렉토리 하위의 모든 내용을 dir2하위로 복사한다.
mv move
파일 또는 디렉토리를 이동시키거나, 이름을 변경한다.

이름변경
$ mv [option...] fromfile  tofile 
    => tofile이 이미 존재하는 경우 덮어씌운다.

이름변경 및 이동
$ mv [option...] fromdir todir
    => todir가 이미 존재하는 경우, fromdir이 todir의 서브디렉터리로 이동된다.
$ mv [option...] file... dir
   
=> 마지막 인자가 존재하는 디렉토리라면, 여러 파일들을 지정 디렉터리로 이동시킨다.

 

파일 읽기 명령어

리눅스에서는 모든 것이 파일로 되어 있어, 파일을 읽는 명령어가 발달했습니다. 상황에 맞게 아래의 명령어들을 골라서 사용할 줄 알아야합니다.

명령어 설명
more [파일명] 파일 내용이 큰 경우 한화면을 보여주고 일단 멈춘다.
- 다음화면 보기 : space bar
- 다음라인 보기 : enter
- 종료 : q
more -20 +10 /etc/services => 20라인 단위로 보여주며, 10번째 라인부터 보여줌
less more의 개선된 버전
방향키나, page up, page down으로 스크롤 할 수 있다.
head 파일의 맨 앞부분을 출력한다.
head -n -5 /etc/services => -n 옵션을 사용하여 맨 앞 5줄을 출력한다.
tail 파일의 맨 뒷부분을 출력한다.

tail -f  /server/logs/catalina.out
=> 파일 맨 뒷부분을 출력하고 변화하는 파일 내용을 추적하여 화면에 표시한다. 파일을 실시간 모니터링 할 때 자주 사용하는 명령어다.
cat 파일의 내용 모두 화면에 출력된다.

 

같이 알면 유용한 grep

이 명령어들과 함께 사용하면 좋은 명령어로 grep이 있습니다.

$ grep "error" errorfile.txt

위 명령은 errorfile.txt에서 "error"테스트를 가진 행을 추출합니다. 

 

$ tail -f catalinalog.out | grep "error"
$ cat file1.txt file2.txt file3.txt | grep "findtext"

위의 표에 있는 명령어들과 결합하여 사용할 수 있는데요, 첫번째는 tail명령어와 함께 사용하여 에러 발생 로그만 확인하는 것이고, 두번째는 파일세개에서 원하는 텍스트를 찾는 명령어입니다. 

 

파일의 크기가 작으면 grep명령어를 사용할 필요가 없지만, 실무에서는 눈으로 찾기에는 한계가 있는 큰 용량의 파일들을 많이 다루다 보니 알아두면 좋은 명령어 입니다.


마무리하며

파일과 디렉토리에 대한 기본적인 내용이었습니다. 뒤이어 파일 종류와 접근권한, 하드링크와 소프트링크에 대해 다루겠습니다.

 

 

반응형

'서버 > 리눅스' 카테고리의 다른 글

리눅스와 리눅스 셸 (feat. Rocky Linux)  (0) 2023.10.09