Linux Basic
인프라 관련 업무를 하면서 리눅스를 다루지 못한다는 건 말이 안 된다...
이번에 좋은 기회가 있어서, 5일간 Linux에 대해 기초적인 내용에 대해 배웠다.
배우면서 정말 많은 도움이 된 것 같고, 리눅스라는 OS 운영체제에 대해 좀 더 알게 되었다.
많은 사람들이 도움이 되었으면 해서 블로그에 내용을 정리해서 공유하고자 한다.
리눅스를 배우기 위해서 준비하는 사람들이 내 글을 보고 많은 도움이 되었으면 좋겠다.
정보는 공유할수록 그 가치가 높아진다.
Linux의 경우 터미널을 통해서 대부분 모든 걸 한다. 그렇다고 터미널만 있느냐? 그건 아니다.
Window나 Mac OS처럼 화면이 존재한다.(GUI 화면 : GNOME)
그러나 대부분 Linux사용자는 GUI를 통하여 사용하지 않는다. 이유는 터미널 화면에서 모든 걸 다 할 수 있기도 하고, 일반 사용자보다는 시스템 관리자를 위한 OS여서, 좀 더 빠르고 안정적인 시스템 User에게 제공해야 하기 때문에 PC나 Server의 리소스를 많이 잡아먹는 GUI를 사용하지 않고, 그 리소스를 시스템을 관리하는 것에 투자하기 위함이다.
system <- account(계정)/password 인증 접속 login이 허용된 후 여러 가지 명령을 지원 : $으로 표시된다. $으로 표시되면 user로 로그인한 것이고 #으로 표시되면 root 권한이다.
리눅스 로그인
User Login 시 [Login user name@Server host Directory]$
Root Login 시 [Login user name@Server host Directory]#
- Linux
ssh servername -------------> sshd(22)
telnet --------------------------> telnet.d(23)
- Linux system : local login
Text login : 부팅 시에 자동으로 login 프로그램 실행 -> login
GUI login: GNOME(gdm), KDE(kdm) -> Graphic login
- Remote login
Clinet ---------------------------> Server
- Windows --------------------------> linux/Unix
윈도에서 리눅스로 연결하기 위해서는 프로그램을 사용해야 하며, 보통 아래와 같은 프로그램이 있다.
Putty, SecureCRT, Netterm.. telnet.d(23)
접속 방법
server name(ip) : sshd(22)
username : XXXXX
password : XXXXXX
리눅스에는 여러 가지 커맨드들이 존재한다. 터미널 텍스트로 명령어를 입력하여 실행을 하는 방식이다.
$ command
$ command -options -options
$ command argument1 argument2... <- argument는 파일 이름/디렉터리 이름
$ command -options arg arg2...
$ whoami : 로그인한 유저 ID
henry
$ id -u : 로그인한 유저 넘버
1000
$ id -g : 로그인한 유저 그룹 넘버
1000
* 현재 로그인해서 작업하는 터미널 이름 확인
$ tty
/dev/tty1
* $ users, $ who, $ w, $ finger, $ last...
* 커널 버전 : $ uname -r
* 아키텍처 : $ arch
* 메모리 : $ free -m <- MB단위
* 배포판 종류 : cat /etc/os-release
* hostname
$ hostname
$ uname -n
* IP Address
$ ip addr
$ ifconfig
- lo(localhost), eno1(lan card) - IP
* Gateway address
$ ip route
$ route
$ netstat -nr
* DNS server
$ cat /etc/resolv.conf
* $ uptime : 현재 시스템이 최근 1분, 5분, 15분까지의 사용량을 출력
* $ w : 사용자별로 사용한 CPU 사용량
a. su - username(username으로 계정을 전환한다.)
user$ su -root
user$ su root
user$ su -l root
user$ su -
b. sudo
- 특정 관리용 명령어만 일반 유저에게 허용.
- 허용 설정 : /etc/sudoers
# vim /etc/sudoers
...
visitor ALL=/usr/sbin/useradd, /usr/sbin/userdel
visitor$ sudo useradd username
visitor$ sudo userdel -r username
- $ command --help
- $ info "keyword"
- $ man "keyword"
h : more 명령어상태에서 사용할 수 있는 키 도움말 확인
* 디스크에 파일을 어떻게 저장하고 어떻게 읽어줄지 정의.
* 종류: msdos ntfs ext2 ext3 ext4 xfs btfs ufs....
리눅스 시스템의 디렉토리 구조는 전체적으로 역 트리(tree) 구조를 하고 있습니다. 그리고 명령어의 종류와 성격, 사용권한등에 따라 각각의 디렉토리들로 구분됩니다. 리눅스 배포판들은 '리눅스 파일시스템 표준' 인 FSSTND(LINUX FILE System Standard) 라는 표준을 준수하므로 대부분의 리눅스 배포판들은 그 기본 골격이 같습니다.
/(루트)
최상의 디렉토리인 루트 디렉토리를 의미하며, 리눅스의 모든 디렉토리들의 시작점이다. 즉, 모든 디렉토리들을 절대경로로 표기할 때에 이 디렉토리로부터 시작해야 한다.
/boot
부팅에 관련된 프로그램/파일이 저장
/bin
기본적인 명령어가 저장된 디렉토리. 즉, 리눅스 시스템사용에 있어 가장 기본적이라고 할 수 있는 mv, cp, rm 등과 같은 명령어들이 이 디렉토리에 존재하며 root 사용자와 일반사용자가 함께 사용할 수 있는 명령어 디렉토리이다.
/sbin
system binary. 시스템 관리자들이 사용하는 리눅스 명령어들(halt, shutdown 등)이 모여있는 디렉토리.
/sbin(바로가기) --> /usr/sbin
/lib
커널모듈파일과 라이브러리파일 즉, 커널이 필요로하는 커널모듈파일들과 프로그램(C, C++ 등)에 필요한 각종 라이브러리 파일들이 존재하는 디렉토리.
/root
root 사용자의 홈디렉토리
/home/username
계정사용자들이 홈디렉토리
/run
동작중인 어플리케이션 프로그램들이 참조하는 디렉토리. 시스템종료시 /run 디렉토리의 내용은 모두 제거됨.
/media
USB, CDROM 등과 같이 탈부착이 가능한 장치들의 마운트포인트로 사용되는 디렉토리.
/media/cdrom : /dev/cdrom
/media/usb-disk : Usbdisk
/dev
시스템 디바이스(device)파일을 저장하고 있는 디렉토리. 하드디스크 /dev/sda, CDROM /dev/cdrom 등과 같은 장치파일이 이곳에 존재한다.
/usr
시스템이 아닌 일반 사용자들이 주로 사용하는 디렉토리.
/usr/bin
일반 사용자들이 사용 가능한 명령어 파일들이 존재하는 디렉토리.
/usr/sbin
/bin에 제외된 명령어와 네트워크 관련 명령어들이 들어있는 디렉토리.
/usr/local/bin
추가로 설치된 프로그램 명령어
/usr/lib
/lib 에 들어가지 않은 라이브러리 디렉토리.
/usr/share
공유데이터
/usr/tmp
임시로 파일을 저장
/tmp
시스템 모든 사용자들이 공동으로 사용하는 디렉토리. 일반 사용자 또는 각종 프로세서에서 사용되는 파일들이 생성되는 곳이다.
/var
자주 변하는 파일들
/var/log
모든 시스템 로그파일은 /var/log에 저장
/var/spool/mail
메일 사서함.
디렉토리 이동 명령어
Absolute(절대경로) vs. Relative(상대경로)
항상 /에서 시작 현재디렉토리에 시작
.
현재 작업중인 디렉토리
~
홈 디렉토리의 경로를 의미
..
현재 작업중인 디렉토리의 바로 상위 디렉토리
$ cd ..
상위 디렉토리로 이동.
현재 디텍로리 위치 확인
파일이다 디렉토리의 목록과 정보를 출력할때 사용하는 명령어
* 사용법 : $ ls [option] [file|dir]....
◦ ls 에서 자주 사용하는 명령어
$ ls -a
숨겨진파일을 포함해서 모든 내용을 출력
$ ls -l
자세한 내용을 표시
$ ls -R
지정한 디렉토리이하에 있는 하부디렉토리와 파일들을 모두 포함한다.(Recursive)
$ ls -S
파일 크기가 가장 큰 것부터 나열
$ ls -h
파일크기를 용량단위(KB, MB, GB)를 붙여서 출력
◦ ls 혼합 명령어
$ ls -lh
파일들을 자세히 나열하면서 파일사이즈를 붙여서 출력
$ ls -lS
파일들은 자세히 나열하면서 파일사이즈가 가장 큰 것 부터 순서대로 출력
파일시스템 사용량을 알려주는 리눅스 명령어.
$ df -h
-h 옵션(human-readable)을 주면 읽기 쉬운 단위로 표현됨
$ df -i
파일(inode) 사용량 : df -i
디렉토리/파일별로 사용량을 확인
$ du -hs 폴더
해당 폴더 용량 확인
$ du -hs *
현재폴더에 있는 폴더 및 파일 용량 확인
파일/디렉토리의 소유권, 소유그룹을 변경
$ chown [옵션] [소유자:소유그룹] [파일]
$ chown [옵션] [소유자.소유그룹] [파일]
◦ 옵션
-c: 변경된 파일만 자세하게 보여준다.
-f: 변경되지 않은 파일에 대해서 오류 메시지를 보여주지 않는다.
-v: 작업상태를 자세히 보여준다.
-R: 경로와 그 하위 파일들을 모두 변경한다.
◦ 소유권 변경 : chown -R user file
- chown user.group file
- Only root 계정에서 가능하다.
◦ 소유그룹을 변경 : chgrp -R group file
◦ 속한 다른 그룹을 기본그룹으로 설정 : newgrp group_name(속한 다른 그룹)
$ newgrp project
$ touch file2
$ ls -l file2
Permission 확인 명령어.
◦ Symbolic : r w x
◦ Numeric : 0 ~ 7
0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
default Permission 확인/설정
- 기본으로 가지는 퍼미션
- 확인 : umask or umask -S
- 변경 : umask 007
Permission 변경 명령어
u=user, g=group, o=other, a=all
+=추가, -=빼기, =전체 빼기 또는 설정에 따라 추가가능
$ chmod u+x,g-w,o-r file1 rwx r-- ---
$ chmod ug=rw,o= file1 rw- rw- ---
$ chmod 640 file1 rw- r-- ---
$ chmod 000 file1 --- --- ---
$ chmod a= file1 --- --- ---
* Set UID(SUID)
일반적으로는 파일을 실행시키면, 실행시킨 사용자의 권한으로 실행이 되지만, SetUID가 설정된 파일을 실행하면 파일의 소유자 권한으로 실행이됨.
rws r-x r-x root root prog
-rwxr-xr-x root root /usr/bin/passwd
# chmod u-s /usr/bin/passwd
# chmod u+s /usr/bin/passwd chmod 4755 /usr/bin/passwd
* Set GID(SGID)
일반적으로는 파일을 실행시키면, 실행시킨 소유그룹의 권한을 가지게 되지만, SetGID가 설정된 파일을 실행하면 파일의 소유그룹권한을 가지게됨.
rwx r-s r-x root root prog
# chmod g-s /usr/bin/passwd
# chmod g+s /usr/bin/passwd chmod 2755 /usr/bin/passwd
- 디렉토리에 SGID를 설정해 공유디렉토리 운영
rwxrwsr-x user project dir1
rw-rw-r-- user project file2
rw-rw-r-- visitor project file3
공유디렉토리의 의미임. Stick Bit이 설정된 디렉토리에 파일을 생성하면생성한 사람의 소유로 생성됨. 삭제 또한 생성한 사람과 root만이 가능함. 한마디로 공유디렉토리로 사용하기 위한 용도임.