목차

Linux 명령어 기초

1. Linux 구조

1.1. 저장소 구조

리눅스에서 파일을 저장하고 다루는 방식은 일반적인 컴퓨터 환경인 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였다면 다음 명령을 이용한다.

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이 되는 식이다.
이것을 소유자,

1.2. 프로그램(앱) 이용하기

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

1.2.1. 패키지(APT) 설치

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

1.2.2. 실행파일 직접 이용

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

2. 화면 다루기

2.1. 화면 내용 지우기: clear

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

clear
를 눌러 청소할 수 있다.

2.2. 이전에 실행한 것 불러오기

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

2.3. 관리자 권한으로 실행하기

3. 파일 다루기

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

3.1. 파일 조회하기

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

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

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

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

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

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

3.2. 파일 생성/삭제/복사/이동

3.2.1. 파일 만들기: touch

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

3.2.2. 폴더 만들기: mkdir

Make Directory를 줄여 mkdir이 되었다.

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

3.2.3. 복사하기: cp

Copy를 줄여 cp가 되었다.

cp 원본파일 새파일

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

Move를 줄여 mv가 되었다.

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

3.2.4.1. 이름바꾸기

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

3.2.4.2. 위치 이동

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

3.2.4.3. 둘 다

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

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 권한이 있다면 그 파일을 직접 읽기/수정/실행은 가능하다.