======Linux 명령어 기초===== {{youtube>AKLm3Z9ELEA?medium}} =====1. Linux 구조===== ====1.1. 저장소 구조==== 리눅스에서 파일을 저장하고 다루는 방식은 일반적인 컴퓨터 환경인 Windows에서와 크게 다르다.\\ 다만 Windows에서는 불가능하거나 활용하기 어려운 많은 기능들을 더 쉽게 살려낼 수 있어\\ 더욱 강력한 파일 활용이 가능하다. ===1.1.1. Windows와 비교=== 모든 파일들이 C 드라이브 아니면 D 드라이브 내에 저장되는 윈도우와 달리,\\ 리눅스에는 C 드라이브, D 드라이브 등이 **아예 없다**. 파일이 저장되는 장소부터 완전히 다르다.\\ {{https://thesagediary.files.wordpress.com/2018/09/linuxfile.png?900}}\\ **모든** 파일은 ''/'' 바로 이 슬래쉬라는 장소 아래에 저장된다.\\ 이 슬래쉬는 ''root''라고 부른다. (말그대로 "근본"이다.)\\ \\ 하지만 여기에 저장된 파일들이 사실 **모두 정상적인 파일은 아니다**.\\ ===1.1.2. 파일 권한=== 윈도우는 **파일**이라고 하면 워드 파일, 파워포인트 파일 등 진짜 데이터가 담긴 파일들 뿐이지만\\ 리눅스에서는 정말 데이터가 담긴 파일이 아닌 것들도 파일로 취급한다.\\ (이상 자세한 설명은 리눅스 시스템의 깊은 곳으로 들어가므로 생략한다)\\ 또한 이렇게 모든 파일들이 ''루트'' 한 곳 아래 몰려 있는데\\ 한 컴퓨터에서 여러 사람이 동시에 사용할 수 있게 하려다 보니\\ 파일 각각에 누가 만들었는지, 누가 어떻게 사용 가능한지를 기록하게 되었다.\\ 이것이 **파일 권한**이다. {{https://img.kasimov.synology.me/reference/linux/basic-commands/ll.jpg?500|}}\\ 위 사진은 파일 목록을 확인한 것이다.\\ 목록 맨 앞줄 ''drwxrwxrwx'', 그 뒤 ''root root''가 여기에 해당하는 것이다. ^ 알파벳 ^ 권한 ^ 값 ^ 기능 ^ | r | Read(읽기) | 4 | 파일/폴더의 내용을 읽음 | | w | Write(쓰기) | 2 | 파일/폴더를 수정하거나 삭제함 | | x | eXecute(실행) | 1 | 파일을 실행하거나 폴더 내 내용물을 확인함((폴더 "내부" 내용물을 확인하는 것은 Read 권한이 아니라 eXecute 권한의 영역이다. 따라서 r 권한이 있더라도 x 권한이 없다면 폴더가 어떤 파일을 포함하고 있는지 확인할 수 없다. 다만 이것과 별개로 폴더 내 파일에 r, w, x 권한이 있다면 그 파일을 직접 읽기/수정/실행은 가능하다.)) | 윈도우와 달리 리눅스는 파일마다 이렇게 권한 설정이 되어있고, \\ 내가 만든 파일이라도 권한이 누락되어있을 경우 나조차 사용할 수 없다.\\ \\ ''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.sh''와 ''test2.sh''는 실행 가능한 내용이 들어있는 같은 내용의 파일이지만\\ ''test.sh''는 x권한이 있는 반면 ''test2.sh''는 없다. 이 경우 각각을 **실행**했을 때,\\ {{https://img.kasimov.synology.me/reference/linux/basic-commands/x.jpg?500|}}\\ 이와 같이 ''test.sh''는 정상적으로 실행되지만 ''test2.sh''는 ''Permission denied'', 즉 권한 부족 오류가 발생한다.\\ 만약 이 상황에서 사용하려 하는 파일이 ''test2.sh''였다면 다음 명령을 이용한다. chmod 권한 (설정할 파일/폴더) chmod +x test2.sh # x권한을 추가(+)한다 chmod 755 test2.sh # 권한값을 변경한다 여기서 ''+x''는 ''x''권한을 파일에 추가한다는 의미로, ''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)을 표시한다. **L**i**s**t를 줄여 ''ls''가 되었다.\\ 아무런 부가 옵션 없이 ''ls''만 실행하면 파일 명만 나오는데, ls -alh 이렇게 하이픈(''-'')뒤에 알파벳으로 옵션을 주면(각 글자별로 의미가 있음) 좀 더 자세한 파일 정보가 포함된 파일 목록을 볼 수 있다. 여기서 ^ 옵션 ^ 기능 ^ | a | 숨겨진 파일(파일명이 ''.''으로 시작하는 파일들)까지 보기 | | l | 자세한 목록(파일 크기, 만들어진 날짜, 권한 등) 보기 | | h | 파일 크기를 몇 바이트가 아니라, 사람(''h''uman)이 읽을 수 있는 단위를 붙여 보기 | | R | 현재 위치에 하위 폴더가 있다면, 그 폴더 안에있는 파일까지 모두 표시. | ==3.1.1.1. 우분투 한정 단축 명령어== 아래 명령어들은 각각 같다. la # ls -a 와 동일한 명령 ll # ls -l 과 동일한 명령 ====3.2. 파일 생성/삭제/복사/이동==== ===3.2.1. 파일 만들기: touch=== touch 파일명 현재 작업중인 위치에 크기가 0인, 아무 내용 없는 빈 **파일**을 만든다. 이 때 touch /전체/경로/파일명 이렇게 전체 경로를 다 포함하면, 현재 작업 중인 위치에 관계 없이 지정된 경로에 주어진 파일명으로 빈 파일을 만든다. 이 때, 파일명 앞 ''/전체/경로/''라는 폴더가 모두 존재해야 한다. 즉, ''/전체'' 폴더가 없거나 ''/전체''는 있는데 ''/전체/경로''가 없으면 안된다. ===3.2.2. 폴더 만들기: mkdir=== **M**a**k**e **Dir**ectory를 줄여 ''mkdir''이 되었다. mkdir 폴더명 mkdir -p /전체/경로/폴더명 현재 작업중인 위치에 크기가 0인, 아무 내용 없는 빈 **파일**을 만든다. 여기서 ''-p''는, ''/전체/경로/''이라는 2 단계의 경로가 존재하는지에 관계없이 ''폴더명'' 폴더를 만든다. ''-p'' 없이 실행할 경우 ''touch'' 명령과 마찬가지로, 폴더를 만드려는 곳인 ''/전체/경로/''가 존재하지 않으므로 명령이 실행되지 않는다. ===3.2.3. 복사하기: cp=== **C**o**p**y를 줄여 ''cp''가 되었다. cp 원본파일 새파일 ===3.2.4. 이동/이름바꾸기: mv=== **M**o**v**e를 줄여 ''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''라는 이름으로 바꾸었다.