본문 바로가기

Learning/ └Essential & Admin

문서정리 Linux_Essential


  리눅스 기초과정 정리

 

 


----------------------
■ 리눅스 선수 지식
----------------------

1.  런레벨(Runlevel)
 런레벨 의미?
 런레벨 종류
  0 : halt
  1 : single user mode
  2 : multi user mode without NFS
  3 : multi user mode with NFS (TUI)
  4 : not defined
  5 : multi user mode with NFS (GUI)
  6 : reboot
 런레벨 확인
  # who -r  (# runlevel)
 런레벨 변경
  # init 0 (# shutdown -h now, # poweroff)
  # init 6 (# shutdown -r now, # reboot)
  (GUI -> TUI) # init 3 (# telinit 3)
  (TUI -> GUI) # init 5 (# telinit 5)
 
2.  로그인/로그아웃
 (GUI) 로그아웃 아이콘 선택(< CTRL + ALT + <- >)
 (TUI) # exit (# logout, <CTRL + D>)

3.  패스워드 변경 방법
 # passwd [사용자]
 [참고] 패스워드 복구 방법


4. 제어 문자(Control Character)
 <CTRL + C>
 <CTRL + D>
 [참고] <CTRL + U>, <CTRL + W>, <CTRL + S, CTRL + Q>

---------------------------
■ 리눅스 기본 명령어
---------------------------

1.  운영체제 기본 정보 확인 명령어
 uname CMD
  # uname -a
  # cat /etc/redhat-release
 date CMD
  # date
  # date 08301300

  # rdate -p time.bora.net (-p : peer)
  # rdate -s time.bora.net
  [참고] time-dgream, time-stream
         # chkconfig --list | grep time
  # date +%m%d  (# date --help)
 cal CMD
  # cal
  # cal 2002
  # cal 8 2002

 

2.  디렉토리 이동 관련 명령어
 pwd CMD
  # pwd
  [참고] PS1 변수(~/.bashrc)
         PS1='[\u@\h:\w]\$ ' ; export PS1
 cd CMD
  경로(PATH)
  - 절대경로(EX: # cd /dir1)
  - 상대경로(EX: # cd dir1)
  
  [참고] 사용자 홈디렉토리 이동
  # cd
  # cd ~       (EX: # vi ~/.bashrc)
  # cd ~fedora

  [참고] 실무 예
  # cd -
  # cd ../dir1

  [참고] ssh CMD
  # ssh 172.16.9.XXX
  # ssh root@172.16.9.XXX

 

3.  man & passwd 명령어
 man CMD
  # man ls
  # man -k calendar   (# apropos calendar)
  # whatis passwd     (# whereis passwd)
  # man -s 5 passwd
  
  [참고] 매뉴얼 페이지를 문서화 하기
         # man ls | col -b > ls.txt
 passwd CMD
  # passwd
  # passwd fedora

 

4. 디렉토리 관리 명령어
 ls CMD
  # ls -l dir1
  # ls -ld dir1
  OPTIONS: -a, -l, -d, -R, -F, -i, -t, -r, -h

  # ls ?altr  - 가장 아래있는게 가장 최근 ex)log파일
  # ls ?altr /tmp
  # ls -altr /var/log
 mkdir CMD
  # mkdir dir1
  # mkdir dir1 dir2
  # mkdir -p dir1/dir2/dir3
 rmdir CMD
  # rm file1
  # rm file1 file2
  # rm -rf dir1

 

5. 파일 관리 명령어
 touch CMD
  # touch file1
  # touch file1 file2
  # touch -t 04111300 file1 - 시간변경
  [참고] # stat file1
 cp CMD
  # cp file1 file2
  # cp file1 dir1
  # cp -r dir1 dir2
  OPTIONS: -a, -i, -p, -r

  [참고] 디렉토리 마이그레이션(/test1/* -> /test2)
         # cp -a /test1/* /test2
 mv CMD(rename)
  # mv file1 file2
  # mv file1 dir1
  # mv dir1 dir2
  OPTIONS: -i
 rm CMD
  # rm file1
  # rm file1 file2
  # rm -rf dir1
  OPTIONS: -i, -r, -f
  [참고] # debugfs /dev/sda1 ? rm명령어로 지운 파일 복구할 경우 사용
  [참고] # find /LOG_DIR -name "*.log" -type f -exec rm {} \;

 

6. 파일 내용 확인 명령어
 cat CMD
  # cat file1
  # cat file1 file2
  # cat file1 file2 > file3
  # cat -n file1    (# nl file1)
  # cat /etc/passwd | grep root

  [참고] # strings -f /bin/ls
 more/less CMD
  # cat /etc/services
  # more /etc/services

  # CMD | more
  # cat /etc/services | more
  # ps -ef | more
  # rpm -qa | more
 nl CMD
  # cat -n /etc/passwd 
  # nl /etc/passwd

  # nl /root/source/C/mon.sh
 head CMD
  # head /etc/passwd
  # head -5 /etc/passwd (# head -n 5 /etc/passwd)

  # ps aux | head
  # alias pps='ps -ef | head -1 ; ps -ef | grep $1' - 헤드라인과 나머지 부분출력
  # alias pps='ps aux | head -1 ; ps aux | grep $1'
  # pps xinetd    (# pps syslogd)
 tail CMD
  # tail /etc/passwd
  # tail -5 /etc/passwd (# tail -n 5 /etc/passwd)
  # tail -f /var/log/messages

  [참고] telnet 서비스 Open 방법
  # chkconfig --list krb5-telnet
  # chkconfig krb5-telnet on
  # service xinetd restart 
  # telnet localhost
  user01 사용자 로그인
  -> root 사용자는 로그인이 가능하지 않음
  # vi /etc/securetty
  ......
  pts/1
  pts/2
  .....
  pts/11
  -> root 사용자로 로그인이 가능한 상태 

 

7. 기타 관리용 명령어
 wc CMD
  # wc /etc/passwd
  # wc -l /etc/passwd
  # wc -w /etc/passwd
  # wc -c /etc/passwd

  # CMD | wc -l
  # cat /etc/passwd | wc -l
  # ps -ef | wc -l
  # rpm -qa | wc -l

  [참고] /test1/*(3TB) ----> /test2/*
         # ls -lR /test1 | wc -l
         # ls -lR /test2 | wc -l
 
  [참고] 데이터 수집(Data Gathering)
  # ps -ef | grep httpd | wc -l >> web.log
  # df -h / | tail -1 | awk '{print $5}' >> disk.log
  # cat /var/log/messages | grep telnet | wc -l
 su CMD
  # su user01
  # su - user01  (# telnet localhost)
 id CMD
  # id
  # id user01
 groups CMD
  # groups
  # groups fedora
  # groups fedora user01
 last CMD ? 사용자의 로그인,로그아웃정보
  # last
  # last fedora
  # last -20   (# last | head -20)
  [참고] # cd /var/log ; last -f wtmp.1
  [참고] $HOME/.bash_history
 lastlog CMD ? 사용자의 마지막 로그아웃 시간
  # lastlog
  # lastlog -u fedora
  # lastlog -t 7
 lastb CMD ? 실패한 로그인
  # lastb
  # lastb -7            (# lastb | head -5)
  # lastb | grep fedora (# lastb | grep fedora)
 who CMD
  # who
  # who ?H
  # who am i
  # whoami
  # who -r
 w CMD
  # w
  # w user01
  
  # while true
  do
   CMD
   sleep 2
  done
  [참고] "watch CMD" (EX: # watch w user01)

 

8. 파일 종류
 일반 파일
 디렉토리 파일
 링크 파일
  하드 링크 파일  (# ln file1 file2)
  심볼릭 링크 파일(# ln -s file1 file2)
 장치 파일(디바이스 파일)
  블럭 장치 파일  (# ls -l /dev | grep '^b')
  캐릭터 장치 파일(# ls -l /dev | grep '^c')

 

9. 파일의 속성 정보 변경
 chown CMD
  # chown user01 file1
  # chown user01:staff file1
  # chown user01.staff file1
  # chown .staff file1
  # chown -R user01:staff dir1
 chgrp CMD
  # chgrp staff file1 (# chown .staff file1)
 chmod CMD
  퍼미션 변경 방법
  - 심볼릭 모드(# chmod u+x file1)
  - 옥탈 모드  (# chmod 755 file1)
  파일 & 디렉토리 퍼미션 의미
   file      ( r / w / x )
   direcotry ( r / w / x )
  umask CMD
   (root) /etc/bashrc
   (user) $HOME/.bashrc
  특수퍼미션(SetUID/SetGID/Sticky Bits)
   SetUID/SetGID 의미?
   Sticky Bits 의미?
   특수퍼미션 설정
    # chmod 4755 file1
    # chmod 2755 file1
    # chmod 1777 dir1
   특수퍼미션 관리
    # find / -perm -4000 ?type f > setuid.list
    # find / -perm -2000 ?type f > setgid.list
    # find / \( -perm -4000 -o -perm -2000 \) -type f

 

10. ACL(Access Control List)
 getfacl CMD
  # getfacl file1
  # getfacl file1 file2
 setfacl CMD
  # setfacl -m u:user01:7 file1
  # setfacl -m g:class1:7 file1
  # setfacl -m u:user01:7,g:class1:7 file1

  # getfacl file1 > file.acl
  # setfacl --set-file=file.acl file2

  # setfacl -x u:user01 file1
  # setfacl -x g:class1 file1

  Default ACL


11. Visual Editor(vi, vim)
 VIM 편집기의 환경 파일
  : set all
  : set number  (: set nu)
  : set nonumber(: set nonu)

  $HOME/.vimrc
  - set number  (set nu)

 

12. 사용자와 통신할 때 사용하는 명령어
 mail/mailx CMD
  # mail admin@example.com
  # mail -s "linuxXXX: OK" admin@example.com < report.txt

  # mail
  # mail -u user01
 talk CMD
  # talk user01
  # talk user01 pts/5

  [참고] talk 서비스 open 하는 방법
  # yum -y talk-server install
  # chkconfig ntalk on
  # service xinetd restart
  # talk user01 [pts/5]

  [참고] 서비스 설정 툴 종류
         # chkconfig --list ntalk ; chkconfig ntalk on
         # ntsysv (# setup)
         # system-config-services (# serviceconf)
 wall CMD
  # wall "Messages"  
  # wall < /etc/hosts

 

13. 자주 사용되지 않지만 유용한 명령어
 cmp/diff CMD
  # cmp file1 file2

  # diff file1 file2
  # diff -c file1 file2
  # diff -i file1 file2

  # diff --recursive dir1 dir2
 sort CMD
  # CMD | sort
  # CMD | sort -k 3
  # CMD | sort -k 3 ?r
  # CMD | sort -k 3 -nr

  # cat /etc/passwd | sort -t : -k 3 -n
  # ps -ef | sort -k 2 -n

  # df -h
  # du -sk /var
  # cd /var ; du -sk * | sort -nr | more
 file CMD
  # cd /etc ; file *

 

14. 검색 관련 명령어
 grep CMD
  grep OPTIONS PATTERN file1
  OPTIONS: -l, -n, -v, -c, -i, -w
  PATTERN: *  .  ^root  root$  [abc]

  # grep root /etc/passwd

  # CMD | grep root
  # cat /etc/passwd | grep root
  # ps -ef | grep xinetd
  # rpm -qa | grep ssh

  [참고] egrep CMD
         # cat /var/log/messages | egrep '(warn|err|crit|alert|emerg)'
 find CMD
  # find / -name core -type [f|d]
  # find / -user fedora -group fedora
  # find / -mtime [-7|7|+7]
  # find / -perm [-755|755]
  # find / -size [-300M|300M|+300M]
  # find / -name core -type f -exec rm {} \;
   
  # find / -name file1 -type f -ls
  # find / -name core -type f -ok CMD {} \;

 

15. 아카이빙 & 압축 ? 압축 푸는방법 위주로 기억
 gzip/gunzip CMD
  # gzip file1
  file1.gz
  # gunzip -c file1.gz
  # gunzip file1.gz

  [참고] 확장자가 잘못된 경우
   # ls
          file1.zip (gzip compressed)
   # unzip file1.zip
   # file file1.zip
   # mv file1.zip file1.gz
   # gunzip file1.gz

  [참고] # gzip -r dir1
         # gunzip -r dir1
 bzip2/bunzip2 CMD
  # bzip2 file1
  file1.bz2
  # bunzip2 -c file1.bz2
  # bunzip2 file1.bz2
 tar CMD
  # tar cvf file.tar file1 file2 file3
  # tar tvf file.tar
  # tar xvf file.tar

  # tar cvzf file.tar.gz file1 file2 file3
  # tar tvzf file.tar.gz
  # tar xvzf file.tar.gz

  # tar cvjf file.tar.bz2 file1 file2 file3
  # tar tvjf file.tar.bz2
  # tar xvjf file.tar.bz2

 

16. 배쉬쉘의 특징
 쉘의 특징
 - 명령어 해석기(Command interpreter)
 - 프로그램 기능(Programable Language)

(ㄱ) 리다이렉션(Redirection)
 (선수지식)
 ------------------------
 fd
 ------------------------
 0 표준입력(stdin)
 1 표준출력(stdout)
 2 표준에러(stderr)
 ------------------------
 
 입력 리다이렉션(Redirection stdin)
  # CMD  <  file1
  # CMD 0<  file1

  # mail -s "linux200: OK" admin < report.txt
  # wall < Message.txt
 출력 리다이렉션(Redirection stdout)
  # CMD  >  file1
  # CMD 1>  file1
  # CMD  >> file1
  # CMD 1>> file1
 
  # find / -perm -4000 -type f > SetUID.list
  # rpm -qa > rpm.list
  # man ls | col -b > ls.txt
 Redirection stderr
  # CMD 2>  file1
  # CMD 2>> file1

  # script.sh > file.log 2>&1
  $ find / -name core -type f 2>/dev/null
  # ./configure --prefix=/usr/local/apache > apache.log 2>&1
(ㄴ) 파이프(Pipe)
 CMD | CMD

 # CMD | more
 # CMD | grep inetd

 [참고] |(Pipe) & > (Redirection)
 # ps -ef | grep xinetd
 # ps -ef > file.log  (# grep xinetd file.log)


 [참고] tee CMD
 # CMD > file.log
 # CMD | tee file.log
 # while
 do
  CMD | tee file.log
  sleep 2
 done

 # script -a /dev/null | tee /dev/pts/3 | tee /dev/pts/4
(ㄷ) 배쉬쉘의 기능(Bash function)
 # set -o
 # set -o vi
 # set +o vi

 # set -o ignoreeof
 # set -o noclobber
 # set -o vi
(ㄹ) <TAB> & <↑>
 파일 이름 자동 완성 기능
  # /etc/sysco<TAB>
  # /etc/sysconfig/netw<TAB>
  # /etc/sysconfig/network-s<TAB>

  # /etc/sys<TAB><TAB>
  # /etc/sysco<TAB>
 명령어 종류 확인
  # ch<TAB><TAB>
  # get<TAB><TAB>
  # gnome-<TAB><TAB>
  # gnome-system-<TAB><TAB>
  # system-config-<TAB><TAB>
  # mkfs.<TAB><TAB>
  # fsck.<TAB><TAB>
 명령어 목록 확인
  # cd /test/<TAB><TAB>
  # cd /etc/<TAB><TAB>
 이전 명령어 되살려서 사용하기(편집)
  # <↑><↑><↑>

  # find / -name core -type f
  <CTRL + C>
  #
  <↑>
  # find / -name file1 -type f

  # df -h
  # df -h /
  # df -h /
  # df -h / | tail -1
  # df -h / | tail -1 | awk '{print $5}'

  # cd /var
  # du -sk *
  # du -sk * | sort
  # du -sk * | sort -n
  # du -sk * | sort -nr
  # du -sk * | sort -nr | more

  # ps -ef
  # ps -ef | head
  # ps -ef | head | sort -k 2 -n
  # ps -ef | head | sort -k 2 -nr
  
  # cat /var/log/messages
  # cat /var/log/messages | grep 'Apr 22'
  # cat /var/log/messages | grep 'Apr 22:15:'

  # cat /etc/services
  # cat /etc/services | more
  # cat /etc/services | wc -l
  # cat /etc/services | cat -n
(ㅁ) 변수(Variable)
 변수의 종류
 - 지역변수
 - 환경변수
 - 특수변수($$, $?, $!, $1, $2, $3, ....)
 변수 선언 방법
  # VAR=5       (# export VAR=5)
  # export VAR
  # echo $VAR   (# print $VAR)
  # unset VAR
 변수 export 의미?
 시스템 환경 변수(set/env)
  PS1 변수(EX: # export PS1='[\u@\h:\w]\$ ')
  PS2 변수
  HOME 변수
  PWD 변수
  LOGNAME 변수
  PATH 변수
(ㅂ) 히스토리(History)
 HISTSIZE/HISTFILE/HISTFILESIZE 변수
 -> /etc/profile, $HOME/.bash_profile
 $HOME/.bash_history

  # history
  # history -10

(ㅅ) &&, ||, ;
 # cd /test ; rm -rf *
 # cd /test && rm -rf *

 # [ -f /etc/profile ] && . /etc/profile || echo "Not Found"
 if [ -f /etc/profile ] ; then
  . /etc/profile
 else
  echo "Not Found"
 fi

(ㅇ) 환경파일
 사용자 로그인시 실행
  /etc/profile
   /etc/profile.d/*.sh
  ~/.bash_profile
   ~/.bashrc
    /etc/bashrc
 쉘이 실행될 때 마다 실행
  ~/.bashrc
   /etc/bashrc
    /etc/profile.d/*.sh
 사용자 로그아웃시 실행
  ~/.bash_logout

 

17. 프로세스 관리
 프로세스 정보(/proc/PID)
  PID/PPID
 프로세스 관리
  프로세스 실행
   (fg) # ls
   (bg) # ls &
   [참고] fg/bg/jobs/<CTRL + Z>/kill %1
  프로세스 확인
   # ps aux | grep xinetd
   # ps -ef | grep xinetd

   # ps
   # ps ?l
   # ps ?f
   # ps ?u user01
   # ps -t pts/4
  프로세스 종료
   # kill PID
   # kill PID PID
   # kill -9 PID
 
   # kill -1  PID (# kill -HUP PID)
   # kill -2  PID (# kill -INT PID)
   # kill -9  PID (# kill -KILL PID)
   # kill -15 PID (# kill -TERM PID)
   [참고] killall CMD

  [참고] 시스템 자원 모니터링
         # top
         # free
         # /usr/bin/baobab
         # /usr/bin/xload
         # /usr/bin/gnome-system-monitor
         # /usr/bin/gnome-system-log
   
   top CMD
    서버 접속시 실행 프로그램
    [TERM1] # top
    [TERM2] # tail -f /var/log/messages

    # top  (sort : Mem, cPu)
    # top -u oracle/wasuser
    # top -p PID,PID,PID
   lsof CMD ? 프로세서가 열고 있는 파일 목록
    # lsof
    # lsof -i     /* 소켓 상태 정보 확인 */
    # lsof -i@172.16.9.252
    # lsof -p PID
    # lsof -c sendmail
   pmap CMD ? 메모리 올라있는 파일 확인
    # pmap PID
   pstree CMD
    # pstree
    # pstree PID 
   nice/renice CMD
    nice CMD
     # nice -(-20 ~ 19) CMD
    renice CMD
     # renice (-20 ~ 20) PID
    [참고] 실무예
    # nice -10 backup.sh &
    # renice 10 PID

 

18. 원격접속 & 파일전송
 ssh CMD
  # ssh S
  # ssh fedora@S

  # ssh S CMD
  # ssh S hostname
 scp CMD
  # scp file1 S:/test        (# scp -P 22 file1 S:/test)
  # scp file1 fedora@S:/test
  # scp S:/test/file1 /tmp
  # scp fedora@S:/home/fedora/file1 /tmp
  # scp -r dir1 S:/tmp
 sftp CMD
  # sftp S
  # sftp fedora@S
  sftp> mget/mput
  sftp> ls
  sftp> !ls
  sftp> quit