드림핵. 대학교에서 배운 리눅스에 관해 실습하며 끄적 어볼 예정
sudo: 리눅스 및 유닉스 기반으로 관리자 권한을 일시적으로 부여하는 명령어
apt: 소프트웨어 패키지의 설치, 업데이트, 삭제 등을 편리하게 관리할 수 있도록 해줌
1: 기초 명령어
#sudo apt update : 설치가능한 소프트웨어 패키지 목록을 업데이트한다
#sudo apt upgrade : 소프트웨어 패키지의 버전을 업그레이드한다 오래된 소프트웨어 패키지에 존재하는 취약점은 보안문제를 일으킬 수 있기 때문에 주기적으로 소프트웨어 패키지를 업그레이드하여 보안문제게 예방하는 것이 좋다.
#ls list의 줄임말로 디렉토리의 내용을 출력하는 명령어
-l 을추하가면 #ls -l 자세한 정보를 함께 출력한다.
#cd:(Change Directory)의 줄임말 작업 중인 디렉토리를 변경하는 명령어
cd엔 절대경로 상대경로에 대해 알아야 한다
pwd: 현제 작업 중인 디렉토리 경로를 출력
절대 경로: 루트 디렉토리 / 를 시작으로 모든 경로를 적어서 표현하는 경로 ex) /home/user
상대 경로: 현제 디렉토리 기준으로 상위 디렉토리 또는 하위 디렉토리로 뻗어 나가는 경로로 말한다
cd .. , cd /
#mkdir(Make directory)의 줄임말 디렉토리를 생성하는 명령어 ex) mkdir new1 현제 디렉토리에 new1 이라는 디렉토리를 생성
#touch: 새로운 파일을 만드는 데 사용함
예시)
user@user-VirtualBox:~$ cd new_dir
user@user-VirtualBox:~/new_dir$ ls -l
total 0
user@user-VirtualBox:~/new_dir$
ls -l 실행해 보면 아무런 파일이 존재하지 않음
예시) touch 사
user@user-VirtualBox:~/new_dir$ touch new_file
user@user-VirtualBox:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 9월 1 20:59 new_file
user@user-VirtualBox:~/new_dir$
touch new_file 명령어 실행한 후 ls-l을 실행하면 파일이 생성되었음을 알 수 있다.
#mv: (move)의 줄임말 파일이나 디렉토리의 위치를 옮길 때 사용하는 명령어 또한 이름을 변경할 때에도 사용할 수 있다.
예시) 이름변경
user@user-VirtualBox:~/new_dir$ ls -l
total 0
-rw-rw-r-- 1 user user 0 9월 1 20:59 new_file
user@user-VirtualBox:~/new_dir$ mv new_file old_file
user@user-VirtualBox:~/new_dir$
예시 ) 파일 옮기기
user@user-VirtualBox:~/new_dir$ ls
old_file
user@user-VirtualBox:~/new_dir$ ls ..
Desktop Downloads new_dir Public Templates
Documents Music Pictures snap Videos
user@user-VirtualBox:~/new_dir$ mv old_file ..
user@user-VirtualBox:~/new_dir$ ls
user@user-VirtualBox:~/new_dir$ ls ..
Desktop Downloads new_dir Pictures snap Videos
Documents Music old_file Public Templates
user@user-VirtualBox:~/new_dir$
#rm : (Remove)의 줄임말 파일이나 디렉토리를 삭제하는 명령어
+ -r 를 추가하면 디렉토리를 삭제
#cat : 파일의 내용을 출력하는 명령어
#file : 파일의 유형을 출력하는 명령어 [#file 파일경로] 형식으로 사용할 수 있음
#echo: 셸에서 유저가 입력한 텍스트를 출력
예시) echo 사용
user@user-VirtualBox:~/new_dir$ echo "Hello world!"
Hello world!
user@user-VirtualBox:~/new_dir$
추가로 echo 명령문에 > 파일명을 이어 붙이면 파일명 이름가지는 파일을 생성한다
예시) echo로 파일생성
user@user-VirtualBox:~/new_dir$ ls -l
total 0
user@user-VirtualBox:~/new_dir$ echo "Hello world!" > hello
user@user-VirtualBox:~/new_dir$ ls -l
total 4
-rw-rw-r-- 1 user user 13 9월 2 13:05 hello
user@user-VirtualBox:~/new_dir$ cat hello
Hello world!
user@user-VirtualBox:~/new_dir$
#cp : (copy)의 줄임말로 파일이나 디렉토리를 복사하는 명령어
디렉토리를 복사할 땐 -r 플래그를 붙인 cp -r 을 사용하면 된다
#grep : 전체에서 특정 문자열을 찾을 때 사용 [#grep 문자열 파일] 형식으로 사용가능
예시) grep 사용
user@user-VirtualBox:~/new_dir$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
nm-openvpn:x:121:127:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
#man : 명령어의 매뉴얼을 보여주는 명령어입니다. 명령어 사용법, 옵션,예제 등 유용한정보를 담고있습니다.
man cp를 하면 ...
예시) man cp
CP(1) User Commands CP(1)
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options
too.
-a, --archive
same as -dR --preserve=all
--attributes-only
don't copy the file data, just the attributes
--backup[=CONTROL]
Manual page cp(1) line 1 (press h for help or q to quit)
#curl : (client URL) 의 줄임말로 서버에 데이터를 보내거나 서버로부터 데이터를 받는 데이터 전송 명령어
[# curl 옵션 URL ] 형식으로 사용할수있고 HTTP, HTTPS, FTP등 다양한 프로토콜을 지원
옵션종류
-o file : 전송받은 데이터를 파일에 저장
-i : 결과 값에 HTTP응답헤더를 포함
-x "method" : HTTP 요청메소드를 지정
-d "key=value" : HTTP POST 메소드로 데이터를 전송
2. 와일드카드
? , *, [] : 와일드카드 는 리눅스에서 임이의 다른 문자를 나타낼 수 있는 특수 문자들을 의미
? : a-z, 0-9 범위 내 임의의 1개 문자로 대체된다.
예시) ? 사용
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 9월 2 13:05 hello
-rw-rw-r-- 1 user user 13 9월 2 13:08 world
user@user-VirtualBox:~/new_dir$ cat he?lo
Hello world!
user@user-VirtualBox:~/new_dir$
* : a-z, 0-9 범위 내 임의의 0개 이상 문자로 대체된다.
user@user-VirtualBox:~/new_dir$ cat h*
Hello world!
user@user-VirtualBox:~/new_dir$
[] : [문자1-문자2] 혹은 [문자1, 문자2, …] 형태로 범위를 지정합니다. 범위 내 모든 문자로 대체될 수 있습니다.
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 9월 2 13:05 hello
-rw-rw-r-- 1 user user 13 9월 2 13:08 world
user@user-VirtualBox:~/new_dir$ touch test1 test2 test3
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 9월 2 13:05 hello
-rw-rw-r-- 1 user user 0 9월 2 13:10 test1
-rw-rw-r-- 1 user user 0 9월 2 13:10 test2
-rw-rw-r-- 1 user user 0 9월 2 13:10 test3
-rw-rw-r-- 1 user user 13 9월 2 13:08 world
user@user-VirtualBox:~/new_dir$ ls test[0-9]
test1 test2 test3
user@user-VirtualBox:~/new_dir$
3: 리다이렉션
Redirection 은 모니터에 나타나는 표준 출력 혹은 키보드로 입력하는 표준 입력을 다른곳으로 변경하는 작업
명령어론 >, >>, <이 있다
명령어 > 파일
예시) >사용
user@user-VirtualBox:~/new_dir$ ls test[0-9]
test1 test2 test3
user@user-VirtualBox:~/new_dir$ ls test[0-9] > world
user@user-VirtualBox:~/new_dir$ cat world
test1
test2
test3
user@user-VirtualBox:~/new_dir$
요약: ">"기존 파일을 덮어쓰고 새롭게 기록
">>" 기존 파일에 내용을 추가해서 기록
명령어 >> 파일
예시) >> 사용
user@user-VirtualBox:~/new_dir$ cat hello
hello
user@user-VirtualBox:~/new_dir$ cat hello >> world
user@user-VirtualBox:~/new_dir$ cat world
test1
test2
test3
hello
user@user-VirtualBox:~/new_dir$
요약: ">>" 기존 파일에 내용을 추가해서 기록
명령어 < 파일
예시) <사용
user@user-VirtualBox:~/new_dir$ cat world
test1
test2
test3
hello
user@user-VirtualBox:~/new_dir$ grep test < world
test1
test2
test3
user@user-VirtualBox:~/new_dir$
입력 리다이렉션이라고 부르기도하며 파일에서 입력받아 명령어에 전달할 때 사용된다
파이프(Pipe)는 리다이렉션의 한 형태로 명령어결과 표준 출력을 다른 명령어의 표준 입력으로 보낼때 사용한다.
파이프는 "|" (\)을 사용
user@user-VirtualBox:~/new_dir$ ls -l
total 8
-rw-rw-r-- 1 user user 13 9월 2 13:05 hello
-rw-rw-r-- 1 user user 0 9월 2 13:10 test1
-rw-rw-r-- 1 user user 0 9월 2 13:10 test2
-rw-rw-r-- 1 user user 0 9월 2 13:10 test3
-rw-rw-r-- 1 user user 13 9월 2 13:08 world
user@user-VirtualBox:~/new_dir$ ls -l | grep hello
-rw-rw-r-- 1 user user 13 9월 2 13:05 hello
user@user-VirtualBox:~/new_dir$
4:권한
리눅스에서는 각 유저의 이름과 고유한 사용자ID(UID)를 가지고 있다. 여러유저가 속할수 있는 그룹으로 이역시
고유한 그룹ID(GID)를 가지고있다.
#cat /etc/passwd은 유저 정보를 담고있는 텍스트 파일이다. 각 사용자 이름, 사용자ID 속해있는그룹ID등의 정보를 내포하고있다.
#cat /etc/group 은 리눅스의 그룹정보를 저장하는 텍스트 파일이다. 위와같이 각그룹의이름, 그룹ID, 그룹에 속한유저목록등을 내포하고있다
예시)
예시)
lrwxrwxrwx 1 root root
drwxr-xr-x 4 root root 4096
먼저 앞 첫글자를 보면 된다
l = 은 심볼릭링크를 나태 난다(심볼릭링크 = 바로가기와 같은 링크파일)
d = 디렉토리임을 나타낸다.
그 후 나머지 총 9개의 문자로 나눠지는데 각 3자리씩 소유자(owner), 그룹(group), 기타 사용자(others)에 대한 권한을 나타낸다.
r |
w |
x |
- |
읽기 권한 |
쓰기 권한 |
실행 권한(디렉토리일경우 내용에 접근할 수 있도록 허용) |
권한없음 |
예시로 d rwx r-x r-x를 풀어서 해석해 보겠다
위치 |
설명 |
첫 문자 (d) |
디렉토리 |
첫 번쨰 그룹 (rwx) |
소유자(OWNER)의 권한 [r읽기][w쓰기][x실행] |
두 번째 그룹 (r-x) |
그룹(GROUP)의 권한 [r읽기][-][x 실행] |
세 번째 그룹 (r-x) |
기타 사용자(OTHERS) [r읽기][-][x 실행] |
참고로 4096은 파일의 크기이다 (바이트단위)
첫 번째 열 : d , l [drwxr-xr-x 1 root root]
위 참조표 확인
두번 째 열 : 권한 [drwxr-xr-x 1 root root]
위 참조표 확인
세 번째 열 user: 소유자 [drwxr-xr-x 1 root root]
세 번째 열이 파일또는 디렉토리의 소유자를 나타낸다
네 번째 열 user : 소유 그룹 [drwxr-xr-x 1 root root]
소유 그룹은 그룹단위로 파일또는 디렉토리에 관한 권한을 부여할 때 사용한다.
5. 파일 및 디렉토리 권한 명령어
chmod : chomd는 파일 권한을 변경하는 명령어이다. root 유저 혹은 소유자만이 실행할수있습니다.
명령어 으론 [chmod 권한 파일명] 형식으로 사용합니다. 권한을 표현할때는 10진수나 기존 권한에 문자를 더하거나 뺍니다.
---------- 1 user user 13 9월 2 21:23 hello //현제 권한이 부여되어 있지 않는 상태
소유자 권한은 rwx이므로 111=7 그룹권한은 rw- 110=6 일반 유저권한은 r-- 100=4 이므로
#chmod 764 hello 를 실행하면 아래와 같이 변경된다
-rwxrw-r-- 1 user user 13 9월 2 21:23 hello
tip: 쉽게 생각해서 rwx 중 -가 없으면 1로 지칭 -은 0으로 지칭
예시로 r-x 이면
권한 |
r |
- |
x |
2진수 |
1 |
0 |
1 |
4+1=6 |
4 |
2 |
1 |
hello 파일 소유 그룹에 실행권한을 부여할시 다음고 같은 명령어를 입력하면된다
#chmod g+x hello
-rwxrwxr-- 1 user user //결과
권한을 제거 하고싶으면
#chmod g-wx hello
-rwxrwxr-- 1 user user //결과
chown (사용자명) chgrp(그룹명): chown은 파일 소유자 혹은 소유 그룹을 변경하는 명령어 입니다. 단 root 유저만 실행할 수 있습니다.
[#chown [사용자명or그룹명] 파일명] 형식으로 됩니다.
소유 그룹만 변경하고 싶은경우 chgrp 명령어를 사용하면 된다.
예시)
user@user-VirtualBox:~/new_dir$ sudo chown root hello // 명령어 실행
-rwxr--r-- 1 root user 13 12월 2 13:05 hello // 결
setuid(특수권한) : 일반 사용자가 파일을 실행하면 파일 소유자 권한으로 실행된다
소유자의 실행권한에 x대신 s문자로 나타낸다
단 대문자 S일경우 setuid가 걸려있으나 실행권한이 없다
setgid : 일반 사용자가 파일을 실행하면 소유그룹권한으로 실행된다. 소유그룹의 실행 권한에 x 대신 s문자로 표시됩니다. 마찬가지로 setgid가 걸려있지만 실행권한이 없는경우는 대문자 S로 표시된다.
sticky bit : sticky bit 를 설정하면 소유자와 root 사용자 외에 일반 사용자가 파일을 삭제 할수없다 주로 공용디렉토리에 사용 일반사용자의 실행 권한에 x 대신 t로 나타낸다 이 역시 실행권한이 없는 경우에는 대문자 T로 표시됨
setuid = 4
setgid = 2
sticky bit = 1
예시) world 파일 권한 변경
#chmod 4755 world //실행 setuid 설정
-rwsrwxr-x 1 user user //결과
setgid는 chmod g+s world,
sticky bit는 chmod o+t world로 설정할 수 있다.
5. 디렉토리 구조
/bin
일반 유저가 사용할 수 있는 기본적인 명령어나 프로그램을 담고 있는 디렉토리입니다.
/boot
시스템 부팅에 필요한 파일들을 담고 있는 디렉토리입니다.
/dev
리눅스에서는 컴퓨터에 부착된 물리적인 장치들을 디바이스 드라이버를 거쳐 파일 형태로 접근 가능합니다. 그러한 장치들을 나타내는 파일들을 담고 있는 디렉토리입니다.
/etc
운영체제나 운영체제 위에서 동작하는 서비스의 설정 파일들을 담고 있는 디렉토리입니다.
/home
각 일반 유저의 홈 디렉토리를 담고 있는 디렉토리입니다. 일반 유저들은 각기 자신만의 홈 디렉토리를 가지고 있습니다. 예를 들어 dream 유저의 홈 디렉토리는 /home/dream 입니다.
/lib
시스템에 필요한 라이브러리 파일들을 담고 있는 디렉토리입니다. /bin 이나 /sbin 에 존재하는 프로그램이 필요로 하는 동적 라이브러리 파일이 /lib 디렉토리에 존재합니다.
/opt
소프트웨어 패키지들을 담는 디렉토리입니다.
/proc
리눅스 커널 자원에 접근할 수 있는 파일과 프로세스를 나타내는 파일을 담고 있습니다.
/root
root 유저의 홈 디렉토리입니다.
/sbin
/bin 디렉토리와 마찬가지로 기본적인 유저 명령어나 프로그램을 가지고 있는 디렉토리입니다. /sbin은 root 유저가 사용할 수 있는 명령어나 프로그램을 가지고 있습니다.
/tmp
유저나 프로그램이 임시로 파일을 생성해야할 때 사용할 수 있는 디렉토리입니다. 본 디렉토리에 오래 존재했던 파일들은 자동으로 삭제되므로 주의하여 사용해야 합니다.
/usr
사용자 바이너리, 문서, 라이브러리, 헤더 파일 등을 담고 있는 디렉토리입니다.
/var
프로그램이나 시스템이 실시간으로 가변적인 파일을 사용하고 저장해야 할 때 활용하는 디렉토리입니다. 예를 들어 /var/log에는 다양한 로그 파일이 저장됩니다.
+추가로 vi명령어는 블로그 참조하였음
https://potato-yong.tistory.com/132