문서의 이전 판입니다!


Linux 명령어 기초

리눅스에서 파일을 저장하고 다루는 방식은 일반적인 컴퓨터 환경인 Windows에서와 크게 다르다.
다만 Windows에서는 불가능하거나 활용하기 어려운 많은 기능들을 더 쉽게 살려낼 수 있어
더욱 강력한 파일 활용이 가능하다.

1.1.1. Windows와 비교

모든 파일들이 C 드라이브 아니면 D 드라이브 내에 저장되는 윈도우와 달리,
리눅스에는 C 드라이브, D 드라이브 등이 아예 없다. 파일이 저장되는 장소부터 완전히 다르다.

모든 파일은 / 바로 이 슬래쉬라는 장소 아래에 저장된다.
이 슬래쉬는 root라고 부른다. (말그대로 “근본”이다.)

하지만 여기에 저장된 파일들이 사실 모두 정상적인 파일은 아니다.

1.1.2. 파일 권한

윈도우는 파일이라고 하면 워드 파일, 파워포인트 파일 등 진짜 데이터가 담긴 파일들 뿐이지만
리눅스에서는 정말 데이터가 담긴 파일이 아닌 것들도 파일로 취급한다.
(이상 자세한 설명은 리눅스 시스템의 깊은 곳으로 들어가므로 생략한다)
또한 이렇게 모든 파일들이 루트 한 곳 아래 몰려 있는데
한 컴퓨터에서 여러 사람이 동시에 사용할 수 있게 하려다 보니
파일 각각에 누가 만들었는지, 누가 어떻게 사용 가능한지를 기록하게 되었다.
이것이 파일 권한이다.


위 사진은 파일 목록을 확인한 것이다.
목록 맨 앞줄 drwxrwxrwx, 그 뒤 root root가 여기에 해당하는 것이다.

알파벳 권한 기능
r Read(읽기) 4 파일/폴더의 내용을 읽음
w Write(쓰기) 2 파일/폴더를 수정하거나 삭제함
x eXecute(실행) 1 파일을 실행하거나 폴더 내 내용물을 확인함1)

윈도우와 달리 리눅스는 파일마다 이렇게 권한 설정이 되어있고,
내가 만든 파일이라도 권한이 누락되어있을 경우 나조차 사용할 수 없다.

drwxrwxrwx 한 글자씩 그 의미를 따져보면,

d r w x r w x r w x
d=폴더, -=파일 읽기 쓰기 실행 읽기 쓰기 실행 읽기 쓰기 실행
Read Write eXecute Read Write eXecute Read Write eXecute
4 2 1 4 2 1 4 2 1
소유자 소유자 그룹 외부인

하이픈(-)표시가 되어있는 것이 바로 그 누락된 권한이다. 즉, 위 사진에서 rwxr-xr-x
- 소유자는 읽고 수정하고 실행 가능(rwx) - 소유자 그룹에 속한 유저는 읽고 실행 가능(r-x) (수정w 불가) - 외부인은 읽고 실행 가능(r-x) 여기서 위 사진에서와 같이 파일을 ls -alh로 모두 표시해보았을 때 root root라고 뜨는 것이 각각 소유자=root소유자 그룹=rootㄹㄴㅇㅁㄹㅈ 를 확인한 것입니다. 이런 방식대로 하면 “이 파일은 실행할 수 있는거야”를 명시적으로 표시할 수 있을 뿐더러
지정된 일부 유저 외 나머지는 접근을 제한하는 보안(보호) 조치를 겸하게 된다.

다음 경우에서 test.shtest2.sh는 실행 가능한 내용이 들어있는 같은 내용의 파일이지만
test.sh는 x권한이 있는 반면 test2.sh는 없다. 이 경우 각각을 실행했을 때,

이와 같이 test.sh는 정상적으로 실행되지만 test2.shPermission denied, 즉 권한 부족 오류가 발생한다.
만약 이 상황에서 사용하려 하는 파일이 test2.sh였다면 다음 명령을 이용한다.

1
2
3
chmod 권한 (설정할 파일/폴더)
chmod +x test2.sh   # x권한을 추가(+)한다
chmod 755 test2.sh  # 권한값을 변경한다
여기서 +xx권한을 파일에 추가한다는 의미로, x(실행) 권한을 추가한다는 의미다.
만약 r이나 w권한을 추가하고자 한다면 +r, +w 등으로 사용하면 된다.
755는 권한을 추가/제거가 아니라 직접 통째로 설정하는 것으로, 위 표에서 “값”을 이용한다.
예를들어, r, w, x권한이 모두 필요한 경우 4+2+1 = 7이고,
x권한을 제외한 r, w 권한만 필요하면 4+2+0 = 6이 되는 식이다.
이것을 소유자,

리눅스 배포판에 따라 차이가 있다. 이 문서에서는 가장 널리 사용되는 Ubuntu 배포판을 기준으로 설명한다.

1.2.1. 패키지(APT) 설치

1.2.1.1. 패키지 업데이트
1.2.1.2. 패키지 삭제

1.2.2. 실행파일 직접 이용

1.2.3. 소스코드를 컴파일하여 이용(고급)

화면을 오래 써서 지저분하고 정신없다면

1
clear
를 눌러 청소할 수 있다.

명령어를 입력하는 곳에서 상/하 방향키를 누르면 이전에 입력한 명령어 목록을 탐색할 수 있다.
위로 올라갈수록 옛날, 아래로 내려올수록 최근 사용한 명령어이고
맨 마지막은 현재 입력하고 있는 명령어, 즉 (아무것도 입력하지 않았던 상태라면) 빈칸이다.

ROS 프로그래밍 등 리눅스를 사용한 작업을 하다보면 모니터를 통한 그래픽 환경보다는 SSH 등을 통한 터미널 환경을 더 자주 접하게 된다.
리눅스는 라즈베리파이와 같은 초저사양 환경이나 머신러닝 학습 등 (극)고사양 장치의 성능을 극한으로 사용해야 할 때 주로 사용하는데,
그래픽 환경은 장치의 리소스를 많이 잡아먹기도 하고, 모니터가 반드시 필요한 탓에 제약사항이 많아 터미널 환경을 쓰게 되는 것이다.
그래서 리눅스가 설치된 장치에서 마우스 없이 작업파일을 직접 처리해야 할 때가 자주 있다.
또한, 일일이 작업하기 어려울 정도로 대량의 반복되는 작업을 “쉘 스크립트”로 자동화한다던지,
그래픽 환경이 제공되지 않는 프로그램을 사용해야 하는 경우에
파일을 조작하는 기초적인 명령어를 알고 있으면 큰 도움이 되므로 잘 알아두자.

3.1.1. 폴더 내에 목록 보기: ls

현재 작업중인 위치에 있는 파일과 폴더 목록(list)을 표시한다. List를 줄여 ls가 되었다.
아무런 부가 옵션 없이 ls만 실행하면 파일 명만 나오는데,

1
ls -alh
이렇게 하이픈(-)뒤에 알파벳으로 옵션을 주면(각 글자별로 의미가 있음) 좀 더 자세한 파일 정보가 포함된 파일 목록을 볼 수 있다. 여기서

옵션 기능
a 숨겨진 파일(파일명이 .으로 시작하는 파일들)까지 보기
l 자세한 목록(파일 크기, 만들어진 날짜, 권한 등) 보기
h 파일 크기를 몇 바이트가 아니라, 사람(human)이 읽을 수 있는 단위를 붙여 보기
R 현재 위치에 하위 폴더가 있다면, 그 폴더 안에있는 파일까지 모두 표시.
3.1.1.1. 우분투 한정 단축 명령어

아래 명령어들은 각각 같다.

1
la  # ls -a 와 동일한 명령
1
ll  # ls -l 과 동일한 명령

3.2.1. 파일 만들기: touch

1
touch 파일명
현재 작업중인 위치에 크기가 0인, 아무 내용 없는 빈 파일을 만든다. 이 때
1
touch /전체/경로/파일명
이렇게 전체 경로를 다 포함하면, 현재 작업 중인 위치에 관계 없이 지정된 경로에 주어진 파일명으로 빈 파일을 만든다. 이 때, 파일명 앞 /전체/경로/라는 폴더가 모두 존재해야 한다. 즉, /전체 폴더가 없거나 /전체는 있는데 /전체/경로가 없으면 안된다.

3.2.2. 폴더 만들기: mkdir

Make Directory를 줄여 mkdir이 되었다.

1
2
mkdir 폴더명
mkdir -p /전체/경로/폴더명
현재 작업중인 위치에 크기가 0인, 아무 내용 없는 빈 파일을 만든다. 여기서 -p는, /전체/경로/이라는 2 단계의 경로가 존재하는지에 관계없이 폴더명 폴더를 만든다. -p 없이 실행할 경우 touch 명령과 마찬가지로, 폴더를 만드려는 곳인 /전체/경로/가 존재하지 않으므로 명령이 실행되지 않는다.

3.2.3. 복사하기: cp

Copy를 줄여 cp가 되었다.

1
cp 원본파일 새파일

3.2.4. 이동/이름바꾸기: mv

Move를 줄여 mv가 되었다.

1
mv 기존파일(폴더) 새파일(폴더)
파일(폴더)의 위치와 이름을 바꾼다. 사용법이 매우 다양해 실제 예를 통해 알아보자.

3.2.4.1. 이름바꾸기

1
2
mv memo.txt note.txt
mv folder directory
memo.txt파일을 위치 이동 없이 이름만 note.txt로 바꾸었다. folder라는 폴더(또는 파일일수도)를 위치 이동 없이 이름만 directory로 바꾸었다.

3.2.4.2. 위치 이동

1
mv /home/kasimov/memo.txt /home/kasimov/note.txt
/home/kasimov라는 폴더 내에 있는 memo.txt파일을 위치 이동 없이 이름만 note.txt로 바꾸었다. 현재 작업공간이 /home/kasimov가 아니어도 작동한다.
1
mv /home/kasimov/memo.txt /home/kasimov/note/
새파일(폴더) 이름을 적는 대신 어떤 폴더를 적으면 그 폴더에 집어넣게 된다(맨 마지막의 슬래쉬/는 적지 않아도 무방). 이 때 파일(폴더)명 자체는 유지된다(위 사례처럼 파일 이름이 바뀌는 것이 아니다.)

3.2.4.3. 둘 다

위 두 경우를 동시에 사용하면, 위치 이동과 이름 변경을 동시에 할 수 있다.

1
mv /home/kasimov/test1/memo.txt /home/kasimov/test2/note.txt
test1 폴더에 있던 memo.txt 파일을 test2폴더에 옮김과 동시에 note.txt라는 이름으로 바꾸었다.


1)
폴더 “내부” 내용물을 확인하는 것은 Read 권한이 아니라 eXecute 권한의 영역이다. 따라서 r 권한이 있더라도 x 권한이 없다면 폴더가 어떤 파일을 포함하고 있는지 확인할 수 없다. 다만 이것과 별개로 폴더 내 파일에 r, w, x 권한이 있다면 그 파일을 직접 읽기/수정/실행은 가능하다.
  • activity/public/reference/linux/basic-commands.1631809234.txt.gz
  • 마지막으로 수정됨: 4년 전
  • 저자 bkparks12