Post

Linux 기초 (下)

Linux 기초 (下)

리눅스 기초

해당 내용은 수업에 사정이 있어서 난잡할 수 있다.

사용자 정의 변수 및 환경 변수

  • env(환경변수) 종류
    • PATH, TERM, EDITOR, …
  • 변수는 대소문자를 구별한다.(주의)
1
2
3
4
5
6
7
8
9
10
11
export 변수=# 변수 선언 방법
export path=$path:$HOME/bin  #해당 변수 환경변수로 설정
echo $변# 변수 확인
unset 변수     				 # 변수 해지

# Env
env            			  	# 모든 환경변수 보기
env cmd           	  	  	# 명령실행
env path=$path:$HOME/bin 	# 환경변수 지정. 변수안에 여러 값이 있으면 ":"으로 구분
env -u path    				# 설정값 해제
env -i ls      				# 종속된 환경을 무시하고 명령실행

경로

  • OS에서는 경로에 따라 파일의 위치, 실행 위치 등이 달라지기 때문에 경로가 중요하다.
  • 리눅스에서 경로를 지정할 때는 두가지 방법이 있다.
    • 절대경로(Absolute path): 최상위 디렉토리(/)부터 쓰는 것
    • 상대경로(Relative path): 시작이 현재 위치한 디렉토리 혹은 최상위 디렉토리부터 시작하지 않는 것.
    • 상대경로 표현법
    1
    2
    3
    
      . 		  	# 현재 위치
      .. 		  	# 바로 위 위치
      cd ../bin 	# 현재 디렉토리 바로 위의 아래에 있는 bin 디렉토리에 가기
    
  • 리눅스 최상위 구조

image

  • PATH 변수 : 명령어를 검색할 디렉토리를 지정

image

  • 경로 관련 명령어 정리
1
2
3
4
5
6
7
8
9
10
11
pwd 		# 현재 경로를 절대 경로로 보는 명령어
cd 			# 디렉토리로 이동하기(그냥 cd만 쓰면 현재 계정 홈디렉토리로 이동)
ls			# 현재 디렉토리 안에 있는 디렉토리 및 파일 보여주기
# ls 옵션
ls -l 		# 디렉토리 및 파일 더 자세하게 보기
ls -a 		# 숨겨진 디렉토리 및 파일까지 다 보기
ls --help	# ls 명령어 옵션보기
ls -d 		# 현재 디렉토리만 보기
ls -c		# 정렬
ls -s 		# 크기가 큰 순서대로 정렬
## 옵션들을 합쳐서 쓸수도 있다.(ex. ls -al)

검색 관련 명령어

[추가] 리다이렉션과 파이프기호

redirection : <, >, », 2>, 2»
pipe symbol : | == #명령어의 결과값을 파이프 기호 다음 명령어로 넘기기
ex. CMD < 파일 : 파일안의 내용을 CMD처리
ex. CMD > 파일 : CMD 결과값을 파일안에 새로쓰기
ex. CMD » 파일 : 결과값을 파일안에 추가쓰기
ex. CMD 2> 파일 : 표준오류값 새로 파일에 넣기
ex CMD 2» 파일 : 오류값 파일에 추가쓰기
ex. CMD | more
ex. CMD | grep root
ex. CMD | CMD | CMD …

메타문자 : 정규표현식이나 정규식을 제어하는 문자들

’’, “”, \, ``, ;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
grep option pattern CMD 
option : -i, --color, -n, -A, -l
pattern : *, ., ^root, root$, [abc] [a-c], [^a]
# find CMD
find / -name 이름 -type 타입
find / -user fedora -group fedora
find / -mtime -7|7|+7
find / -size --200M|200M|+200M
find / -permission
find / -name 이름 -type 타입 -exec CMD {} \;

# wc CMD
wc /etc/passwd 하면 
라인, 워드, 캐릭터 개수를 구할 수 있음
wc -l # (라인 카운트)
wc -w # (워드 카운트)
wc -c # (캐릭터 카운트)
rpm -qa | wc -l
# 현재 다운받은 패키지가 몇개인지 볼 때

네트워크 설정

네트워크 확인 :

1
2
3
4
5
6
7
ip addr						#ip
ip route					#gw
cat /etc/resolv.conf		#DNS 
# 설정
nmtui
nm-connection-editor
nmcli CMD

Bridge connection : OS 와 동일한 IP 대역을 씀 Route connection(NAT) : 인터넷 연결 가능 SCSI는 recommended로 설정 disc type = SCSI 타입 allocate 설정 건드리지 말기

gnome-tweaks gnome : GUI 꾸미기(아이콘, 폰트 등등)

퍼미션과 권한

1
2
3
4
5
6
7
su			# 계정변환		# (= 일반 사용자끼리 사용가능하도록 하는게 나음)
sudo CMD 	# 해당 계정 권한으로 명령어 수행
			# root 암호를 공유할 필요 없이 루트 권한 시행가능
			# 사용자가 관리자 권한으로 수행하는 사용할 수 있는 명령어의 제한을 둘 수 있다
su -c '명령어' # 사용자 명령어 == sudo CMD: 루트권한으로 명령어 시행
sudo -l 	#[sudo 리스트]
sudo -i 	#(sudo -root과 비슷)

일반 사용자는 명령어 외에는 폴더를 만들수 없다.
ex. sudo echo WEB > /var/www/html/index.html
에서 문제가 생김
==> echo WEB page | sudo tee -a /var/www/html/index.html
==> sudo vi /var/www/html/index.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
sudo 'CMD'
sudo -l
sudo -i
에러 시
usermod -aG wheel fedora (관리자 권한 추가로 바꾸기)
useradd -G wheel fedora (관리자 한 추가하면서 생성)

cmd | tee file.log == cmd > file.log
# tee라는 명령어는 앞의 명령어를 뒤에 쓴
모니터에 출력 및 파일에도 저장되게 하려면 tee 명령어를 쓰면 된다.
tee file.log = >
tee -a

ls -l file1
#-:rw-:r--:r--: 1 :root root: 0 : 1월 30 02:52 : file1
#파일타입 : 유저의 권한 : 같은 그룹의 권한 : 아예다른 사용자 : 하드링크 카운트 : 소유자 : 그룹 : 크기 : 시간(mtime=modified time) : 이름
ln # 명령어로 링크 카운트를 늘려줄 수 있음

chown -R # 경로와 그 하위 파일들을 모두 바꿔준다
chown user.group == chwon user:group

chgrp CMD #그룹을 바꿔준다.

chmod CMD
#심볼릭 모드(symbolic), 옥탈모드(octal)
#심볼릭 모드는 문자(ugo,rwx)로 옥탈모드는 숫자(0~7)로

find . -ls # 현재 위치 모든 설정을 보여줌

파일과 디렉토리의 권한

디렉토리는 실행 권한은 꼭 가지고 있어야한다. 디렉토리 w권한을 실행하려면 x권한을 가지고 있어야한다.

id로 uid, gid, 그룹을 확인해야한다. 지우기를 못하면 생성도 불가

실무에서 권한 응용 예
1) 실행 권한 (ex: /bin/ls, $HOME/bin/scripts.sh) 읽지는 못하지만 실행은 가능하게 읽고 수정은 가능하지만 실행은 못하게d 2) 읽기 권한 웹사용자가 웹페이지 읽기 systemctl enable –now httpd <alt +F4>

  1. 보안 퍼미션 조정

umask는 서버에서 바꾸면 안됨 기본 체계를 쓰면 된다. umask는 관리자가 변경하면 안됨 그냥 기본 퍼미션을 조정하는 값이다.

명령어로 바꾼 거는 현재 창에만 적용되어 영구적으로 하고 싶으면 환경파일로 들어가야함

.bashrc환경파일에 umask 내용이 있는데 보통 관리자: 022, 일반사용자:002로 씀

환경파일와 쉘(SHELL)

bash 기능 확장한 zsh 쉘 기능

  • shell prompt color
  • syntax highlighting
  • autosuggestion(history)

환경파일 알기

  • /etc/profile에는 시스템적으로 건드는 설정(로그인할 때)
  • $HOME/.bash_profile 설정하고 한번만 적용
  • $HOME/.bashrc는 배쉬가 실행될때만 실행
  • $HOME/.bash_logout 로그아웃할 때 읽어짐

[참고] SHELL SCRIPT

  • 조건문 (if, case)

    1
    2
    3
    
      if 조건; then
          표현식
      fi
    
  • 반복문 (for, while)

    1
    2
    3
    4
    
      for i in $(seq 1 10)
      do
          표현식
      done
    
  • 함수 (function)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      # 함수 선언
      function1() {
          표현식
      }
      function fun1 {
          표현식
      }
      # 함수 확인
      typeset -f
      # 함수 해제
      unset -f func1
    
  • 변수 설정
  • 앨리어스
  • 쉘 자체의 기능
  • 기타(아무거나)등등이 환경파일에 들어갈 수 있다.

  • 권한에 따른 환경파일 수정
    • 관리자 : /etc/profile
    • 사용자 : $HOME/.bashrc

중요도에 따라 순서가 달라진다.
전역 설정 : 변수의 재정의
맨 마지막에 읽어드리는 파일에 따라 변수의 값이 달라질 수 있기 때문에 맨 마지막에 읽어드리는 파일에 넣는게 좋음 환경설정은 한곳에 몰아넣는것이 좋음 사용자가 어차피 설정을 하기 대문에 관리자는 필요한 설정만 하는 것이 좋음

밑에 다가 정의하기~

  • Alias란
    • 명령어를 짧게 줄이거나 애칭을 정할 때 많이 씀
    • 접속을 달리하면 헷갈릴 수 있음 따라서 명령어를 바꿔서 해주면 좋다~
    • 오타나는 명령어 또한 alias로 바꿔주면 좋다
  • 서버에서 alias 중 반드시 들어가야하는 것
    • 웹서버의 경우
    • 주설정 파일, 소스 디렉토리, 로그디렉토리를 자주 쓴다
    • 이러한 파일들을 명령어로 바로 볼 수 있게 해주면 더욱 쉽고 간편하게 일을 할 수 있다.
  • 로그파일을 건들 때도 씀
    • 하지만 로그파일 같은 경우는 날짜가 매번 바뀌고 변경이 되면 안되기 때문에 이름을 고정해서 alias를 걸어두거나 하면 안되기 때문에 view로 tail -f /log/file_date +%m%d.log로 할 수 있음 혹은 date -d '1 days age' +%m%d로 할 수 도 있음

[참고]

/etc/hosts파일은 로컬 호스트 파일로 도메인 이름과 ip를 매핑하는 역할을 가진다. 작은 네트워크안의 서버들에서 dns서버를 대신할 수 잇다.

[아이피] [이름] [별칭] => 이름과 ip들을 매핑하게 해줌

디렉토리는 목록만 가지고 있어서 크기가 크지 않음

  • 링크 파일
    • 하드 링크

      ln file1 file2

      • 하나의 자원에 여러개의 링크가 걸려잇으면 숫자가 는다.(ex. 디렉토리에 걸려있는 모든 디렉토리의 개수)
    • 심볼릭 링크(소프트 링크) == 바로가기

      ln -s file1 file2

      • 심볼릭 링크 파일은 저장공간을 따로따로 받는다
      • 두개의 파일 사이즈는 동일하지 않음
      • 심볼릭 링크 걸린 것과 링크를 건 것은 서로 연동됨
    • 윈도우는 link 명령어 리눅스는 ln 명령어를 쓴다

파일 관련 명령어

  • cmp/diff 명령어
    • diff httpd.conf httpd.conf.OLD 설정 파일 비교
    • diff 옵션
      • “-k” 필드 지정 정렬
      • “-r” 내림차순 정렬 (기본 오름차순)

실무예)) 디렉토리 비교
diff -r /was1 /was2

  • sort 명령어
예시: cd /var ; du -sk *sort -nrmore
  • find 명령어

예시: find /var -type f -size +1G

  • file 명령어
    • file 타입 확인 file.txt
    • PE 포맷 : 윈도우 실행파일 형식
    • ELF 포맷 : 리눅스 유닉스 실행파일 형식
    • file 명령어를 쓰는 이유 : 파일 종류를 알기 위해

파일 압축/해제 명령어

  • gzip/gunzip CMD
    • gzip : 압축
      • gzip hello.txt > hello.txt 압축
      • gzip -r hello > 디렉토리 지정시 디렉토리 압축
      • gzip -c hello.txt > 원본 파일 냅두고 파일 새로 압축
    • gunzip : 압축 해제
  • bzip2/bunzip2 CMD bzip2 file1 압축 => file1.bz2 bunzip -c file1.bz bunzip file1.bz 파일 풀기 gz보다 bz가 더 최신이다 벗 gz을 더 많이 씀

  • xz / unxz CMD xz file1 => file1.xz xz -c file1.xz unxz file1.xz 파일 풀기

  • tar - Tape Archive 테잎 기반의 것들을 최근에는 안씀(성능대문에) tar cvf file.tar file1 file2 file3 => 묶음 파일 생성 c : 생성 v : 자세하게 f : file or tape 뒤에 파일이나 테잎 디바이스 이름이 와야함 tar tvf => 내용보기 tar xvf => 묶음 파일 풀기

압축 + 아카이빙

  • tar z 옵션 압축 cvzf file.tar.gz tvzf xvzf -> z == gz cvjf tvjf xvjf -> j == bz2 zip unzip -l file.zip 목록을 보여줌 unzip file.zip 해제해줌 jar gzip 알고리즘을 차용함 JDK/SDK 를 위해 존재함 jar cvf file.jar file1 file2 file3 jav tvf file.jar jar xvf file.jar

윈집은 여러가지 툴들을 한번에 쓸 수 있는 장점이 있다 zip -r file.zip file1 file2 unzip -l file.zip unzip file.zip

file.tgz = file.tar.gz file.tar.bz2 = file.tbz file.tar.xz = file.txz

윈도우에서 C드라이브나 ~~드라이브는 파티션이다 리눅스는 /(루트) 파일 시스템, /home 파일 시스템이다(마운트 포인트에 리눅스 파일시스템으로 이름을 구한다

This post is licensed under CC BY 4.0 by the author.