안녕하세요 문쑹입니다 :)
오늘은 리눅스 기본 명령어와 디렉토리에 대하여 포스팅해보겠습니다.
쉘(Shell) 이란?
우리가 윈도우의 도스에서 내리는 대부분 명령은 command.com이라는 파일이 처리합니다. 이 파일을 운영체제의 쉘(Shell)프로그램이라고 말합니다. 쉘 프로그램은 사용자가 내린 명령을 운영체제가 수행할 수 있는 명령어로 해석하여 운영체제에게 전달하는 일을 합니다. 그래서 명령어 해석기라고 불립니다. 정리하자면 리눅스는 커널이라고 불리는 하드웨어를 직접 제어하는 부분과 그 위에서 커널에 명령을 주는 쉘로 구성이 됩니다.
기본 명령어
date 명령어
현재 날짜 및 시간을 확인할 수 있습니다.
hostname 명령어
호스트의 이름을 확인할 수 있습니다.
ls 명령어
현재 디렉터리안에 존재하는 모든 것들을 확인할 수 있습니다.
clear 명령어
화면을 깨끗하게 지울수 있습니다.
passwd 명령어
사용자 비밀번호를 변경할 수 있습니다.
파일 및 디렉터리
home 디렉토리
리눅스 시스템은 다중 사용자 시스템이기 때문에 각 사용자마다 별도의 홈 디렉터리가 있습니다. 홈 디렉터리 이름은 일반적으로 사용자명과 같으며 로그인할 때 환경 변수 $HOME은 사용자의 홈 디렉터리의 이름으로 설정되어 있습니다.
아래와 같이 / 디렉터리로 이동한 뒤 cd $HOME을 통해 /home/pi 디렉터리로 이동이 가능합니다.
cd 명령어
cd 명령어는 change directory입니다. 말 그대로 디렉토리를 변경해주는 명령어 입니다. home 디렉토리로 이동하는 몇 가지 방법을 사용해보겠습니다.
pwd 명령어
현재 작업 디렉터리를 보여줍니다.
mkdir 명령어
새 디렉터리를 만드는 명령어 입니다.
touch 명령어
빈 파일을 생성해주는 명령어 입니다. 파일안에 내용은 없습니다.
ls 명령어
디렉터리의 내용을 출력하는데 사용됩니다.
ls -l 명령어를 통해 파일을 상세히 볼 수 있습니다.
read.txt가 폴더인지 파일인지, 권한은 어떻게 되어 있는지 소유자는 누구인지 생성된 날짜는 언제 인지 확인할 수 있습니다.
ls -a 명령어를 통해 숨겨진 폴더와 파일의 리스크를 확인할 수 있습니다.
숨김 파일을 touch명령어를 통해 만들어 보겠습니다. 숨김 파일을 생성할 때 파일명 앞에 .을 추가해주면 됩니다.
밑의 예제를 보면 ls -a 와 ls의 차이를 좀 더 쉽게 파악할 수 있겠죠?
ls -al 명령어를 통해 숨겨진 폴더나 파일의 리스트를 상세히 볼 수 있습니다.
리눅스에서는 명령어 뒤의 옵션을 동시에 붙여서 사용 가능합니다.
cat 명령어
파일의 내용을 화면에 바로 출력할 수 있습니다.
head 명령어
파일의 앞 10줄을 출력해줍니다.
tail명령어
파일의 맨 뒤 10줄을 출력해 줍니다.
head 와 tail 명령어의 옵션을 조정하여 원하는 줄만큼 출력할 수도 있습니다.
tail -f 옵션을 사용하면 실시간으로 변경된 내용을 확인할 수 있습니다.
두개의 터미널을 열어줍니다.
첫 번째 터미널에서 다음과 같이 입력하고 대기합니다.
두 번째 터미널에서는 nano 에디터를 사용합니다. 입력이 다되었으면 저장 후 nano 에디터를 종료해주세요.
ctrl + x 를 해주시면 됩니다. 저장하시겠습니까? 라고 물어보는데 그냥 y를 입력하고 엔터를 치시면됩니다.
저장이 되는 동시에 첫 번째 터미널에서 입력한 내용이 출력됩니다.
파일 이동, 삭제, 복사 명령어
cp명령어
파일을 복사해주는 명령어 입니다.
cp <복사할 대상> <복사될 위치>
파일을 복사하는데 다른 이름으로 저장하고 싶다면 cp <복사할 대상> <복사될 위치/파일명> 으로 하시면 됩니다.
mv명령어
파일을 이동하는 명령어 입니다.
mv <파일명> <이동할 위치>
mv명령어를 통해 파일명을 변경하고 싶다면 mv <파일명> <다른이름> 으로 해주시면됩니다.
rm명령어
파일을 삭제해주는 명령어입니다. rm <파일명>
-r 옵션을 사용하면 디렉토리를 삭제할 수 있습니다. rm -r <디렉토리명>
파일 찾기 명령어
which 명령어
특정 명령어의 위치를 전체 경로로 찾아주는 명령어 입니다. witch <명령어>
which 명령어를 통해 python 실행파일들이 어디있는지 찾아 보겠습니다. 그리고 which 명령어를 통해 일반 파일을 찾을 수는 없습니다.
whereis 명령어
실행파일, 소스파일, man 페이지 파일의 위치를 찾아주는 명령어 입니다. whereis <명령어>
find 명령어
python3.7이라는 이름을 가진 모든 파일과 디렉토리를 찾을 수 있습니다.
앞에 sudo를 붙이는 이유는 pi사용자가 아닌 root사용자의 권한을 대행 받아서 모든 폴더를 탐색하기 위해서입니다.
권한
리눅스(Linux)는 하나의 컴퓨터를 여러 사람이 사용할 수 있는 멀티유저 운영체제(OS)이기 때문에 권한 관리가 매우 중요합니다. 특정 파일이나 디렉토리를 생성한 뒤 그 파일에 접근할 수 있는 권한을 설정하여 다른 유저가 접근할 수 없게 할 수 있습니다.
ls -l 명령어를 통해 파일을 자세히 보겠습니다.
<1> file1.txt를 살펴보기
1. -
파일의 타입
- 일반파일 | d 폴더 | l 링크파일 |
2. rw-r--r--
퍼미션 정보
r | read 권한 | 4 |
w | write 권한 | 2 |
x | execute 권한 | 1 |
- | 권한없음 | 0 |
소유자 | rw- | 6 | 읽고 쓰는 권한 |
소유그룹 | r-- | 4 | 읽기 권한 |
모든유저 | r-- | 4 | 읽기 권한 |
3. 1
링크수
윈도우에 비유하면 "바로가기"와 같습니다. 생성 방법은 in [대상파일] [링크파일] 입니다.
4. root <첫 번째>
소유자
5. root <두 번째>
소유그룹
6. 0
용량
7. 7월 22 11:45
생성날짜
8. file1.txt
파일이름
<2> chmod명령어를 이용하여 file1.txt권한 변경하기
소유자와 소유그룹이 root이고 다른 모든 유저는 읽기(r--)권한만 있는 상태입니다. 그렇기 때문에 pi 사용자로 해당 파일을 읽는 것은 가능하지만 쓰기는 불가능합니다.
1. file1.txt 파일 읽어보기
nano 에디터를 사용하여 file1.txt를 읽었습니다.
2. file1.txt 수정하기
아래와 같이 "hello pi"를 입력하고 ctrl + x -> Y -> Enter 을 하면 저장이 되지 않습니다. 그 이유는 write의 권한인 w가 없기 때문입니다. 이제 권한을 수정하여 글을 쓸 수 있도록 해보겠습니다.
저장하지 않고 nano 에디터를 빠져나오려면 Ctrl + x -> N을 입력하면 됩니다.
3. file1.txt 권한 수정하기
수정 권한 있을 때
chmod <수정번호> <파일명>
수정 권한 없을 때
sudo chmod <수정번호> <파일명>
pi가 file1.txt 파일에 수정권한이 없기 때문에 sudo를 붙여줍니다.
file1.txt의 모든 유저 권한이 rw-으로 변경된 것을 확인할 수 있습니다.
4. file1.txt 파일 수정 재시도
수정이 잘 된것을 확인 했습니다.
<3> chmod명령어
권한을 변경해주는 명령어이며 숫자를 통해서 권한을 변경할 수 있습니다.
- chmod <수정번호> <파일명>
- rwx 3가지 권한을 다 주려면 7을 주면 됩니다.
- r-- 권한만 주려면 4를 주면 됩니다.
- -w- 권한만 주려면 2를 주면 됩니다.
- --x 권한만 주려면 1을 주면 됩니다.
- read의 약자 r은 4로 표현됩니다.
- write의 약자 w는 2로 표현됩니다.
- execute의 약자 x는 1로 표현됩니다.
file2.txt 파일에 소유그룹 권한에 실행 권한을 줘보겠습니다. 아래 예제와 같이 실행권한이 생기면서 초록색으로 변경이 되었습니다.
<4> chown 명령어
파일의 소유자와 소유그룹을 변경할 수 있습니다. chown <소유자> <소유그룹> <파일명 or 디렉토리명>
현재 file1.txt는 소유자와 그룹소유자가 모두 root입니다. 저는 현재 pi로 로그인해 있기 때문에 해당 파일의 소유권을 변경할 권한이 없습니다. 이때는 sudo 명령어를 통해서 권한을 대행받고 소유권을 변경해 보겠습니다.
입출력 재 지정 IO Readirection
리다이렉션은 표준 입출력의 방향을 바꿔줍니다. 표준 입력은 키보드, 표준 출력은 모니터이지만 이를 파일로 처리하고 싶을 때 주로 사용합니다. 모든 명령어에 대한 결과가 모니터화면에 출력되는 것을 당연하게 생각할 수 있지만 이것은 기본 표준 입출력이 모니터라는 것을 의미하기 때문입니다.
<1> '>' 사용법
> 을 다시 사용하면 이전에 내용은 사라지고 덮어쓰게 됩니다.
<2> '>>' 사용법
다음에는 윈도우랑 라즈베리파이랑 파일을 공유할 수 있도록 설정하는 방법을 포스팅 해보겠습니다. 감사합니다 :)
Hasta Luego~!
'IoT' 카테고리의 다른 글
라즈베리파이 #8 (wget, git clone, apt-get) (0) | 2020.07.23 |
---|---|
라즈베리파이 #7 (윈도우 & 라즈베리 연동하기) (0) | 2020.07.23 |
라즈베리파이 #5 (WinSCP 설치 방법) (0) | 2020.07.21 |
라즈베리파이 #4 (PuTTY SSH 자동 로그인 접속 설정) (0) | 2020.07.21 |
라즈베리파이 #3 (한글 / 폰트 설치 및 설정 방법) (0) | 2020.07.21 |