본문 바로가기
Computer/Linux

[리눅스 기초] 2장. 리눅스 기본 명령어 : 도움말, 디렉토리와 파일, 압축하기 (feat. 사용권한, 환경변수(Path))

by injeolmialmond 2021. 7. 8.

이 글은 리눅스를 비롯해 컴퓨터 공학을 처음 접하는 비전공자를 위해 쉽게 풀어쓴 글입니다. 제가 처음 리눅스를 배울 때를 생각하며

작성한 것이기도 합니다. 비전공자이기 때문에 적합하지 않은 표현이 있을 수 있습니다. 실수가 있다면 지적 부탁드립니다.


지난 게시물에서는 리눅스란 무엇인지를 운영체제에 대한 설명과 함께 다루었습니다. 이번 게시물에서는 리눅스의 기본 명령어에 대해서 다루겠습니다.

리눅스의 명령어는 기본 명령어와, 그 뒤에 붙는 옵션이 있습니다. 기본 명령어와 옵션, 옵션 여러 개 사이에는 띄어쓰기를 한 번씩 하면 되고, 옵션은 기본 명령어에 어떤 조건을 붙여서 실행하기 위해 사용합니다. 옵션은 주로 '-' 또는 '--' 뒤에 알파벳 (소문자 혹은 대문자)이 붙은 형태로, 기본 명령어마다 옵션이 뜻하는 바가 다릅니다. 이에 대해서는 후술하겠습니다.


* 참고: 디렉토리명, 파일명

리눅스 명령어 중에서는 인자로 디렉토리나 파일명을 입력해야 하는 경우가 대부분입니다. 

인자가 2개이고 옵션도 사용하는 경우, '(명령어) (옵션) (인자1) (인자2)' 와 같은 형태로 입력하게 됩니다.

 

디렉토리에는 상대 디렉토리와 절대 디렉토리가 있습니다. 상대 디렉토리는 현재 존재하는 디렉토리에 있어서 상대적인 위치를 나타냅니다. 상위 디렉토리를 나타내는 '..', 현재 디렉토리를 나타내는 '.'이 있습니다. 절대 디렉토리는 현재 디렉토리와 상관없이, 시스템 내의 절대적인 위치를 나타냅니다. 따라서 디렉토리 이름을 직접 입력해줘야 합니다.

 

그런데 절대 경로를 적기 위해 최상위 폴더부터 다 표기하면 경로가 너무 길어집니다. 따라서 현재 디렉토리의 하위 디렉토리라면, 현재까지의 경로는 './'로 표시하거나 아예 생략해도 됩니다. 홈 디렉토리의 하위 디렉토리부터 표기하는 방법은 '~/'로 시작하는 것입니다.

 

파일명의 경우 동일하게 생각하면 됩니다.예시를 들어 설명하겠습니다. 다음과 같은 디렉토리 구조가 있다고 봅시다. 우리가 작업하는 디렉토리가 볼드체로 표시된 현재 디렉토리로 설정되어 있다고 봅시다.

 

상위 디렉토리

           파일

           다른 디렉토리

                      파일

           현재 디렉토리

                      파일

                      하위 디렉토리 

                                 파일

 

각각의 파일명은 다음과 같이 표현하는 것이 일반적입니다. 파일명 앞에 경로를 써야 하는 경우가 있다는 것입니다. 후술할 명령어들을 사용하여 직접 이 구조를 만든 뒤, 리눅스 명령어들을 사용하면서 현재 위치를 고려했을 때 어떤 파일을 어떤 이름으로 입력해야 할지 감을 익히시면 좋겠습니다.

 

파일 : 상위 디렉토리(절대경로)/파일명

파일 : 상위 디렉토리(절대경로)/다른 디렉토리/파일명

파일 : 파일명

파일 : 하위 디렉토리명/파일명


1. 도움말

어떤 명령어를 사용하고 싶은데, 어떤 옵션을 붙여야 내가 원하는 작업을 할 수 있을지 모르겠을 때는 원하는 명령어 뒤에 도움말 옵션을 붙여서 사용하면 됩니다. 명령어 뒤 한 칸을 띄우고, '-h' 또는 '--help' 등을 붙여서 사용하면 됩니다. 보통 전자는 짧은 도움말, 후자는 긴 도움말을 제공하지만, 명령어에 따라서 도움말이 제공되지 않을수도 있습니다. 하지만 배시 셸은 친절합니다. 어떻게 하면 도움말을 얻을 수 있을 지 알려줍니다. 일례로 뒤에서 다룰 명령어 하나를 끌고 오겠습니다.

'rm -h'를 치니, rm에 대해서 해당 옵션이 없다고 뜹니다. 'rm --help'를 치면 더 많은 정보를 얻을 수 있다고 합니다. 이를 따라 입력하니, 해당 명령어 뒤에 쓸 수 있는 옵션들과 옵션에 대한 설명이 나옵니다. 정말 친절하죠?

 

조금 더 상세한 설명이 필요할 때는 'man' 명령어를 사용합니다.

man 명령어

한 페이지씩 명령어에 대한 매뉴얼이 제공됩니다. 방향키를 사용해서 페이지를 넘기거나, '/검색 키워드'를 입력하고 엔터를 눌러 원하는 키워드로 검색할 수도 있습니다. 이 외에도 다양한 단축키가 존재합니다만 이 게시물에서 다루지는 않겠습니다.

 

이 외에도 'info' 명령어도 있습니다만 이 역시 생략하겠습니다. 

2. 디렉토리와 파일, 사용권한: ls, cd, pwd, mkdir, rm, rmdir, cp, mv

지난 게시물에서 디렉토리가 무엇인지도 다루었습니다. 작업의 대상이 되는 파일들의 위치라고 했습니다. 리눅스의 기본 명령어들을 통해서 디렉토리 안에 어떤 파일이 있는지 구경하고, 또 디렉토리 사이를 돌아다닐 수 있습니다.

2.1 ls

ls

ls는 현재 디렉토리 안에 들어있는 파일들의 목록을 보기 위한 명령어입니다. $는 커서가 어디 있는지 알려주는 기호라고 했습니다. $ 표시 옆에 'ls'라고 치고 엔터를 눌러보세요.

현재 디렉토리에 있는 파일들을 보여줍니다. GUI를 이용해서 내 홈 디렉토리에 들어갔을 때는 보이지 않는 파일들도 보여줍니다.

ls -l

ls 뒤에 '-l' 옵션을 붙인 명령어는 각 파일에 대한 자세한 정보를 알려줍니다. 

각 열에 있는 정보는 순서대로

1. 사용 권한

2. 링크 카운터

3. 파일의 소유자

4. 파일그룹 소유자

5. 파일 사이즈

6. 최종 변경 일시

7. 파일 이름 입니다.

(출처: https://securityspecialist.tistory.com/40 )

 

2.1.1 사용권한

맨 왼쪽에 나오는 문자열은 해당 파일의 종류와 권한을 나타냅니다. 이 부분을 자세히 보면 '-'로 시작하는 것이 있고, 'd'로 시작하는 것이 있고 'l'로 시작하는 것이 있죠? 여기엔 없지만 'c'로 시작하는 것도 있습니다. 맨 뒤의 이름이 적힌 색상도 각각 흰색, 남색, 민트색으로 다르게 나타납니다. 

'-'로 시작하는 것은 일반 파일

'd'로 시작하는 것은 폴더(즉 디렉토리)

'l'로 시작하는 것은 링크 파일

'c'로 시작하는 것은 장치 파일입니다.

그 뒤에 적히는 r, w, x는 권한을 나타냅니다. 

r 은 읽기

w 는 쓰기

x 는 실행

을 나타내는데, 이 세 개의 문자가 나타날 수 있는 자리는 세 번 있습니다.

맨 위의 example 파일을 예시로 볼까요?

drwxr-xr-x

핑크색은 파일소유자에게 부여되는 권한

노란색은 파일소유자 그룹에게 부여되는 권한

파란색은 그 외의 계정에 부여되는 권한을 나타냅니다

 

여기서 잠깐! 소유자, 소유자 그룹, 그 외의 계정... 이게 다 무슨 뜻일까요?

리눅스는 다중 사용자 시스템(Multi-User System)입니다. 여러 사용자가 파일/디렉토리에 접근할 수 있기 때문에, 보안을 위해서 파일/디렉토리 별로 권한을 다르게 부여할 필요가 있는 경우가 있겠습니다. 쉽게 예시를 들어서 설명해볼게요.

 

학생들이 만드는 모든 파일을 저장하는 학교 폴더가 있습니다. 학교에는 동아리가 있고, 모든 학생들이 하나 이상의 동아리에 가입해야 합니다. 학생들은 자신이 만든 문서를 폴더에 넣으면서, 누가 이 문서에 접근할 수 있는지 지정할 수 있습니다. 나만 보고 싶은 문서도 있고, 나랑 같은 (특정)동아리에 속한 학생들만 볼 수 있는 문서도 있고, 모든 학생들이 볼 수 있는 문서도 있겠습니다.

 

여기서 학교=시스템, 학생=사용자, (특정)동아리=사용자 그룹 이라고 보면 됩니다. 

다시 위에서 예시로 든 파일권한을 가지고 설명하자면,

 

d : 디렉토리입니다.

rwx : 이 파일을 만든 사용자는 읽고 쓰고 실행하는 것이 모두 가능합니다.

r-x : 이 파일을 만든 사용자와 같은 (특정)그룹에 속한 사람은 읽고 실행하는 것만 가능합니다. 수정 권한은 없습니다.

r-x : 이 파일을 만든 사용자와 같은 (특정)그룹이 아니더라도 읽고 실행할 수 있습니다. 수정 권한은 없습니다.

 

그런데 이 파일을 만든 사용자가 누구인지, 그리고 이 사용자가 속한 여러 개 그룹 중 어떤 그룹에게 접근 권한이 주어지는지는 이 권한만 보고서 알 수 없습니다. 앞서 ls -l을 실행했을 때 나타나는 일곱 개 정보 중, 세 번째와 네번째가 이를 나타냅니다.

 

다시 쓰자면, example 폴더의 경우

'sheom'이라는 사용자에게 읽기, 쓰기, 실행권한,

'sheom'이라는 사용자가 속한 그룹 중 '197609'라는 그룹에게 읽고 실행하는 권한,

그 외 계정에게는 읽고 실행하는 권한이 주어집니다.

 

ls -a

-a 옵션은 숨겨진 파일 ('.' 또는 '..'로 파일명이 시작하는 파일)도 보여주는 옵션입니다.

ls -al

-al 옵션은 -a 옵션과 -l 옵션을 합쳐서 나타내는 옵션입니다. 숨겨진 파일의 상세 정보를 보여줍니다.

 

2.2 cd

cd 디렉토리

 

cd 명령어는 디렉토리 사이를 이동하기 위해서 사용하는 명령어입니다. cd 뒤에 이동하고 싶은 디렉토리를 쓰면 그 디렉토리로 이동합니다.

 

cd 뒤에 아무런 인자를 주지 않으면, 홈 디렉토리로 돌아옵니다.

 

2.3 pwd

pwd

pwd는 현재 디렉토리의 이름을 보여주는 명령어입니다.

 

2.4 mkdir

mkdir 디렉토리이름

mkdir은 현재 디렉토리 하위에 새로운 디렉토리를 만드는 명령어입니다. 

 

2.5.1 rm

rm 파일이름

rm은 파일을 삭제하는 명령어입니다. 주의할 점은, 디렉토리를 삭제할 수 없다는 것입니다.

 

2.5.2 rmdir

rmdir 디렉토리이름

rmdir은 디렉토리를 삭제하는 명령어입니다. 또 주의할 점은, 디렉토리가 비어있는 경우에만 사용할 수 있다는 점입니다.

 

2.5.3 rm -r

rm -r

그렇다면 안에 파일이 존재하는 디렉토리를 삭제하려면 어떻게 해야 할까요? rmdir이 아닌, rm에 옵션을 붙여서 사용하면 됩니다.

 

2.6 cp 

cp 파일 디렉토리

파일을 복사하고 싶을 때는 cp 명령어를 사용합니다. 이 때 해당 파일이 현재 디렉토리에 위치해있다면 경로를 생략해도 되지만, 그렇지 않다면 경로를 붙인 파일 이름을 사용해야 합니다. 파일 이름 뒤에는 한 칸을 띄우고 복사하고 싶은 디렉토리를 적으면 됩니다.

 

2.7 mv

mv 파일 디렉토리

원본 파일을 그대로 두고 새로운 디렉토리에 동일한 파일을 복사하는 cp와는 달리, 원본 파일을 이동하는 명령어는 mv이입니다. 파일 이름 뒤에 이동시키고 싶은 디렉토리를 적으면 됩니다.

mv 기존파일이름 새로운파일이름

파일 이름을 바꾸고 싶은 경우에도 사용할 수 있습니다. 기존 이름과 새로운 이름을 순서대로 입력하면 됩니다.

 

3. 압축하기 : 7z, unzip, tar, gzip

3.1 7z

리눅스를 사용하면서 대부분의 경우 인터넷에 연결되어있다면 셸에서 바로 웹에서 제공하는 패키지들을 설치할 수 있습니다. 7-Zip 도 그렇습니다. 하지만 우리는 웹사이트에서 직접 다운로드 받아보도록 하겠습니다. sudo apt ~ 명령어를 사용하여 다운로드받으려 했으나 계속해서 오류가 났기 때문에 부득이하게 이렇게 진행하는 점 양해해 주세요.

Download (7-zip.org) 

 

Download

Download .7z Any / x86 / x64 LZMA SDK: (C, C++, C#, Java)

www.7-zip.org

위 링크에 접속하여 본인의 로컬 컴퓨터에 맞는 버전을 다운로드받으세요. 32bit, 64bit, 그리고 본래 운영체제를 고려하여 다운로드 받으면 됩니다. 

그리고 프로그램을 실행시켜 패키지를 다운로드 받으시면 됩니다.

마지막 단계가 가장 중요한데요, 환경 변수 (PATH)에 7zip을 추가해야 합니다. 로컬 컴퓨터 GUI에 '시스템 환경 변수 편집'을 검색하면 다음과 같은 창이 뜹니다.

'환경 변수' 버튼을 누르고, '(사용자이름)에 대한 환경 변수' 칸에서 'Path'를 클릭하고 '편집'버튼을 누릅니다. 오른쪽에 뜨는 버튼 중 '찾아보기' 버튼을 누르고, 다운로드 받은 프로그램들이 들어가는 'Program Files'파일에서 7zip 폴더를 찾아 추가해줍니다.

이렇게 추가해준 뒤에야 7z 명령어를 사용할 수 있습니다.

 

환경변수? Path? 그게 뭐야?!

우리가 7-zip이라는 프로그램을 설치하면서, GUI상으로 직접 7-Zip 프로그램을 실행하여 원하는 디렉토리를 압축할 수도 있습니다. 하지만 우리는 CLI 콘솔 상에서 압축을 하려고 합니다. 앞서 배운 'ls', 'pwd'와 같은 명령어는 기본적으로 시스템이 인식하고 있는 명령어입니다. 하지만 '7z'는 실행해 보면 'command not found'라는 메세지가 뜹니다. 시스템이 모르는 이름입니다.

콘솔을 통해서 어떤 명령어(7z)를 입력하면 자동으로 해당 프로그램(7-Zip)을 실행시키는 방법이 필요합니다. 그걸 가능하게 하는 것이 환경변수입니다. 우리가 환경변수를 편집하면서 누른 디렉토리가 바로 실행하고자 하는 프로그램이 들어있는 경로(Path)입니다. Path에 이 디렉토리를 추가했기 때문에, 7z라는 명령어가 7-Zip라는 프로그램을 실행시키는 것입니다.

 

 

7z a 압축파일이름.zip 디렉토리이름/

7z 뒤에 옵션 a를 추가하고 압축파일이름, 디렉토리 이름/을 입력하면, 해당 디렉토리 안에 있는 파일들이 하나의 압축파일로 저장됩니다. 만약 현재 디렉토리에 있는 파일들을 압축하고 싶다면, '디렉토리/' 대신 '*'를 입력하면 됩니다. '*'는 '모든 파일'이라는 뜻입니다. '디렉토리/*'는 디렉토리에 있는 모든 파일, 그냥 '*'는 현재 디렉토리에 있는 모든 파일을 뜻합니다.

 

3.2 unzip

unzip 파일이름.zip

압축된 '.zip' 파일의 압축을 풀려면 unzip 명령어를 사용하면 됩니다.

 

3.3 tar, gzip

일반적으로 접하게 되는 '.zip'형태의 압축파일은 GUI 환경에서도 쉽게 압축하거나 압축을 해제할 수 있다는 장점이 있지만, 다른 압축방법보다 압축률이 낮습니다. 따라서 리눅스 환경에서는 다른 형태의 압축파일을 자주 사용합니다. tar, gzip 명령어를 사용하여 만들 수 있습니다. 결과적으로 얻고자 하는 형태는 '파일.tar.gz'입니다. 이를 위해서는 tar과 gz를 차례대로 실행해야 하며, 해제하고 싶을 때는 gz 해제 후 tar를 해제하면 됩니다.

각각의 명령어를 설명하겠습니다. 

 

3.3.1.1 tar cf 

tar cf 압축파일이름.tar 디렉토리이름

먼저 여러 개의 파일들을 묶어줘야 합니다. tar 명령어가 그 역할을 수행합니다.

tar 뒤에 옵션으로 cf 를 넣어주고, 만들고 싶은 압축파일의 이름, 압축하려는 디렉토리의 이름을 순서대로 입력합니다.

 

3.3.1.2 tar xvf

tar xvf 압축파일이름.tar

tar로 묶인 파일은 뒤에 xvf 옵션을 추가하면 해제할 수 있습니다.

 

3.3.2.1 gzip

gzip 파일이름

gzip 뒤에 파일이름을 입력하면 .gz 파일로 압축됩니다.

 

3.3.2.2 gzip -d

gzip -d 파일이름.gz

gzip을 해제하려면 gzip 뒤에 -d 옵션을 넣어주면 됩니다,

 

종합하면, .tar.gz 를 만들기 위해서는 'tar cf', 'gzip' 명령어를 써주면 되고, 해제할 때는 'gzip -d', 'tar xvf'를 사용하면 됩니다.

그런데 tar 명령어에 있어서 xzvf 옵션을 붙여주면 gzip 해제, tar 해체를 동시에 해줍니다.

tar xzvf 파일이름.tar.gz

 

 


이번 게시글에서는 리눅스의 여러 기본적인 명령어들을 알아보았습니다. 처음에는 생소한 명령어들이지만, 어려운 개념이 아니기 때문에 계속해서 사용하다 보면 쉽게 사용하실 수 있을 것입니다. 겁먹지 마시고 직접 실습해가면서 연습해보시길 추천드립니다. 다음 게시물에서는 웹에서 제공하는 파일을 다운로드할 수 있는 명령어인 wget, 그리고 텍스트를 다루는 명령어들 cat, tac, more, less, head, tail, wc, nl, grep, tr, sed, sort, uniq, cut, paste, join에 대해 다뤄보도록 하겠습니다. 

댓글