Linux
명령어
종료
poweroff
shutdown -P now #지금 종료
shutdown -P +10 #10분후 종료
shutdown -r 22:00 #22시 재부팅
shutdown -c #예약된 종료 취소
shutdown -k +15 #현재 접속한 사용자에게 15분후 종료한다는 메시지 전송, 실제로는 종료되지 않음
halt -p
init 0
재부팅
shutdown -r
reboot
init 6
로그아웃
- 관리자가 시스템 종료를 하면 접속된 모든 유저의 연결 해제
- 관리자가 접속을 해제하고자 하는 경우 logout이나 exit명령을 이용해서 로그아웃
init
- run레벨을 의미
init 0 # 종료
init 1 # 복구 모드로 한 명의 사용자만 접속 가능
init 6 # 재부팅
명령어 사용법
SHELL: 명령어 해석기. 터미널이나 원격접속툴에서 명령을 내리면 SHELL이 번역을 해서 kernel에 전달하고 실제 명령이 수행됨
기능:
- 명령어해석기
- 프로그래밍
- 사용자환경설정: shell은 사용자 환경을 설정할 수 있도록 초기화 파일 제공
전체 설정 파일을 읽은 후 사용자 환경 설정 파일을 읽어서 사용자 별로 환경을 구성
shell에 보여지는 문자열-프롬프트
사용자이름@호스트이름(컴퓨터):~$ 슈퍼사용자일 경우 사용자이름@호스트이름(컴퓨터):~#
- 로그인 할 때 하나의 shell이 보여지게 됨. 이 shell을 로그인 shell이라함
- 현재 사용중인 shell 확인하는 명령
echo $SHELL
- ~: 홈디렉토리
명령어 입력 시 에러가 발생한 경우
- 키보드 입력이 안될 시 CTRL + s를 눌러 잠금을 한 경우: CTRL + q를 눌러 잠금해제
- 명령이 종료되지 않은 경우: CTRL + c 눌러 현재 실행중 프로세스 강제 종료
- 실수로 텍스트파일이 아닌 파일을 열어 한글이 깨지는 경우: CTRL + l(clear)을 눌러 화면 클리어
명령어의 구조는 기본적으로 명령 [옵션] [인자]
명령은 실행 프로그램 또는 내장 명령어
옵션은 -또는–
- -다음에는 한글자
- –다음에는 단어
옵션은 대부분의 경우 순서에 상관없이 여러개 입력 가능
한글자인 경우 결합가능
ls -a 또는 ls --all
ls -a -l -> ls -al # 결합 가능
docker -dit -> docker -d -i -t # d=background, i=interactive, t=terminal
명령어 자동완성
- 입력 중 입력 한 단어로 시작하는 명령이 하나만 존재한다면 tab을 누르면 명령어는 자동완성이 됨.
입력 중 입력한 단어로 시작하는 명령이 여러 개 존재한다면 tab을 한 번 더 누르면 모든 명령 출력
명령어 입력방식
- 텍스트파일에 만들어두고 이 파일의 내용을 읽어서 수행: 스크립트 방식이라고 하고 파일의 확장자는 sh
히스토리 기능
- 이전에 수행했던 명령어를 저장
- 키보드화살표 사용 또는 CTRL + p, CTRL + n명령 이용
- CTRL + r을 이용하면 증분 모드로 검색 가능
- history라고 입력 시 수행한 모든 명령어 출력
history
- more로 파일내용
more 파일명
옵션
!!: 직전 명령어 수행
!번호: 번호에 해당하는 명령어 수행
!문자열: 문자열로 시작하는 마지막 명령어를 수행
history -d 라인번호: 라인번호에 해당하는 명령어 삭제
history -c: 모든 명령어를 삭제
history내용은 홈 디렉토리의 .bash_history파일에 저장되어 있음
.파일명 -> 숨김파일
명령어 도움말
- 명령어 –help
- man이라는 명령어도 도움말을 출력
man [옵션] [섹션] 명령
- shell이 명령어 찾는 위치 - 환경변수 path
- 현재 디렉토리에서 명령을 찾고 없으면 PATH에서 찾고 그래도 없으면 shell내장 명령 수행
echo $PATH
- 명령어의 절대 경로 찾기: whereis [옵션][명령어 - 실행(바이너리) 파일]
- 스케줄링 같은 것을 할 때는 명령어의 절대 경로를 기반으로 수행
- 내장 명령의 경우는 별 문제가 안되지만 내장 명령이 아닌 경우는 절대경로를 알아야함
- 옵션
- -b: 바이너리 파일만 검색
- -m: 메뉴얼 파일만 검색
- -s: 소스 파일만 검색
whereis -m ls
- which는 명령어를 찾을 때 PATH에서만 찾음
- a나 i옵션을 이용하는 경우가 있음
- 기타 명령어
- passwd: 비밀번호 변경
- exit: 현재사용중인 SHELL종료, 로그인SHELL에서 다른SHELL 실행한 경우는 이전에 실행한 SHELL로 이동
- clear: 현재 화면 삭제 - CTRL + l
SSH
sudo apt-get update
sudo apt-get install openssh-server
sudo systemctl status ssh
sudo ufw allow ssh
패키지관리자 - central repository의 프로그램/패키지 저장 위한 db
->접속하면 로컬에 DB 가져옴
->프로그램 업데이트 시 로컬도 업데이트 시켜야->apt-get updatesudo->관리자 권한
firewall: inbound제어 못들어오게
proxy서버: outbound제어
유저에 관리자 권한이 없으면 위의 명령이 수행안될 수 있음
sudo usermod -aG sudo 계정명 # 계정 관리자 권한 설정
포트포워딩
- 내부의 IP와 외부IP를 매핑해서 내부에서 사설 IP를 사용하지만 외부 IP를 이용해서 인터넷을 할 수 있도록 해주고 외부에서는 설정한 외부IP를 이용해 내부IP를 가진 컴퓨터에 접근할 수 있도록 해줌
- 리눅스에서 사설 IP 조회, 터미널 실행시켜 hostname -i 명령 수행 (ifconfig 명령은 net-tools 설치해야) (Default 주소는 10.0.2.15)
- 터미널이 실행이 안될 때는 [설정] - [Region & Language] 에서 캐나다로 변경하고 로그아웃 후 다시 로그인
- 윈도우즈에서 공인 IP 조회: ipconfig /all
실제 사용하는 어댑터의 IP주소 확인 (인터넷 어댑터 이더넷 2) - virtual box의 [머신] - [설정] - [고급] - [포트포워딩] 선택 후 룰 추가
포트번호: 22, 호스트IP: 윈도우즈IP, 게스트IP: 리눅스사설IP, 포트번호: 22 - ssh 계정@호스트IP -p 포트번호 으로 접속
- 리눅스 계정 전환
sudo # 일시적으로 관리자 권한 부여 superuser do
sudo su
su root
su -root # 관리자로 전환
su [계정명] # 특정계정으로 전환
alias
- 별칭 부여
alias 별명 = '설정값'
unalias # 별명 해제
- 어떤 명령이 별명인지 확인하고자 할 때는 type 명령을 입력했을 때 명령이라면 명령 위치 출력, 별명이라면 원본 위치 출력
- ex
alias ls='ls -F' # alias 설정
unalias ls # 해제
- type ls: 별명이라서 명령의 위치가 나오지 않고 별명이라고 출력
- type cp: 별명이 아니라서실제 위치가 출력
별명이 설정되어 있을 때 원본 명령어를 실행
- 전체 경로로 명령어를 입력(명령어 위치를 whereis나 which 사용)
- command 명령어나 \명령어를 입력
날짜 및 시간 명령
- date: 시스템에서 설정되어 있는 현재 시각과 날짜를 출력
- timedatectl: 하드웨어 및 소프트웨어에 설정된 모든 시간과 날짜를 출력
시스템 사용자 정보
- logname: 로그인네임
- users: 접속한 사용자 이름
- who: 로그인 한 모든 사용자 계정
- whoami: 현재 사용자
시스템 정보 확인
- uname [옵션]
-a: 시스템의 모든 정보 확인
-m: 시스템이 사용 중인 하드웨어 정보 확인
-n: 호스트 네임 확인 - 컴퓨터 이름
-r: 운영체제 릴리즈 번호
-s: 운영체제 이름
-v: 버전 출시 일자 - hostname: 현재 사용중인 컴퓨터 이름, 옵션 이용해 IP 확인가능
- arch: CPU 정보
- env: 환경변수 확인
sudo와 su
- sudo: 일시적으로 관리자 권한으로 실행
패키지 관련 명령이나 환경설정파일 수정할 때 관리자 권한 요청 - su 계정: 현재 계정의 환경변수 유지하면서 다른 계정으로 전환
- su - 계정: 다른 사용자의 계정으로 전환할 때 환경변수도 전환
- su: 관리자 계정으로 전환
편집기
- 행단위편집기: ed, ex, sed
- 화면단위편집기: vi(vim), emacs, nano(메뉴기반)
- GUI편집기: gedit
- 모드형 편집기: 입력모드와 명령모드 구분
vi가 대표적인 모드형 편집기 - 비모드형 편집기: 입력모드와 명령모드가 구분되어있지 않음
명령은 CTRL이나 ALT 등과 다른 키를 조합해서 수행
nano가 대표적인 비모드형 편집기
vim
- vi 이후 개발된 편집기
- vim이라는 이름으로 시작할 수 있고 vi라고 입력해도 vim이 입력됨
- vim 설치->sudo apt-get install vim
- DOCKER 사용 시 설정 파일 수정하려면 호스트OS에서 파일 수정 후 볼륨기능
이용해 파일 복사하는 방법 vs DOCKER 쉘 안에서 직접 편집하는 방법
쉘 안에서 직접 편집하려면 편집기가 설치되어 있지 않아 직접 설치하고 수정해야
vim 동작모드
- 명령 모드: 커서이동, 페이지이동, 글자삭제, 행삭제 명령 모드에서 입력 모드로 전환은 i, l, o, O, a, A
- 입력 모드: 텍스트입력
- 입력 모드에서 명령 모드로 전환은 ESC
- 명령 모드에서 마지막 행 모드로의 전환은 : / ?
- 마지막 행 모드에서 명령 모드로의 전환은 ESC나 ENTER
- 명령 모드에서 저장하고 종료는 :wq나 :wq!
- 명령 모드에서 저장하지 않고 종료는 :q나 :q!
- 명령 모드에서 종료는 ZZ
- 마지막 행 모드: 검색, 바꾸기
vim 시작
vim 파일경로
- 파일이 없으면 새로 만들어지는데 저장을 해야 파일이 생성
- 저장하지 않으면 생성 안됨
- 파일이 존재하는 경우 열리게 되는데 수정 권한이 없으면 읽기 전용으로 열림
입력 모드 전환 시 i, a, o의 차이
- i는 현재 위치 삽입
- a는 다음 칸에 삽입
- o는 아래 줄에 삽입
커서 이동 단축키: 명령모드에서 실행
- $ 현재 행 마지막으로 이동
- - 현재 행 맨 앞으로 이동
- H 첫번째 행으로 이동
- M 중간 행으로 이동
- L 마지막 행으로 이동
원하는 행으로 바로 이동
- 숫자G: 숫자행으로 이동
- 숫자 엔터: 숫자 행으로 이동
내용 검색 (중요)
- 텍스트 파일 내용 많을 때 원하는 곳으로 이동
- 마지막 행 모드에서 수행(입력 모드에서 ESC를 눌러서 수행)
- /문자열: 문자열을 아래 방향으로 검색
- ?문자열: 문자열을 위 방향으로 검색
- n: 원래 찾던 방향으로 다음 문자열을 검색
- N: 반대 방향으로 다음 문자열을
파일 읽어오기
:r 파일경로 # 파일을 읽어서 현재 위치에 추가
:e 파일경로 # 지정한 파일로 전환(:w명령으로 저장한 후 수행)
:n # 여러 파일을 한꺼번에 연 경우 다음 파일로 전환
문서 작성 중 쉘 명령 수행
:!쉘명령 # vi작접 잠시 중단 후 쉘 명령 수행, vi로 돌아올 땐 ENTER
:sh # vi 잠시 빠져나가 쉘 명령 수행, vi로 돌아올 때 exit
vi 환경 설정 (중요)
- 사용자 홈 디렉토리에 .exrc 파일에 설정 내용을 저장, 모든 파일에 적용 - 재부팅을 해주거나 source 명령을사용
- 환경변수와 설정파일에 동일한 내용 작성 차이: 설정 파일은 로그인 할때 읽어서 설정, 환경 변수는 프로그램 실행할 떄 읽어서 적용
vi ~/.exrc
- 환경변수 중 EXINIT에 지정
EXINIT='set nu'
export EXINIT
- vi의 마지막 행 모드에서 명령으로 설정: 현재 작업 중인 파일에만 적용
set nu # 라인번호 출력
set list # 눈에 보이지 않는 특수문자 출력
set showmode # 현재 모드를 출력
set ai # 윗 라인과 들여쓰기를 맞춰줌
set si # 코딩할 때 if 나 for 같은 블럭 명령어를 사용하면 다음 라인으로 이동할 떄 들여쓰기
set paste # 붙여넣기를 발생하는 계단 현상 방지
set ts=숫자 # 탭의 간격 설정
set ic # 검색할 때 대소문자 구분않음
set no # 설정해제
SHELL
개요
- 사용자가 입력한 명령을 해석해서 커널로 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할을 수행하는 구성 요소
- OS: hw -> kernel -> shell -> util, application
- server의 텍스트 모드나 GNOME의 터미널을 이용해 명령어를 입력하고 결과를 화면에 출력
기능
- 명령어 해석기
- 프로그래밍
- 사용자 환경설정
종류
- bourneshell: 초창기의 쉘, 현재 사용X
- C shell
- Korn shell
- bash: C shell과 Korn shell 장점 혼합, 현재 리눅스 기본 shell
- 현재 리눅스 기본 쉘: tsch, dash, zsh
bash 쉘 특징
- alias 기능 제공
- history 기능 제공
- 명령어 자동완성 기능 제공
- 연산 기능 제공
- Job control 기능 제공
쉘 변경
- 지원하는 쉘 확인
cat /etc/shells
- 사용자의 로그인 쉘 확인
grep 사용자계정 /etc/passwd
- C shell 설치
sudo apt-get install csh
- 로그인 쉘 변경
chsh 옵션 쉘의경로 사용자계정 # 쉘의경로는 절대경로
chsh -s /usr/bin/csh dh # C shell로 변경
chsh -s /usr/bin/dash dh # dash shell로 변경
C shell 예전 설치 시 /bin/csh에 설치 -> 지금은 /usr/bin/csh에 설치
충돌 방지 위해 예전 경로와 지금 경로 바로가기 연결
source파일: 코드, 바이너리파일: 컴파일, 매뉴얼파일: 묶어놈
dash 쉘은 프롬프트가 $이고 bash쉘은 유저이름과 호스트이름이 같이 출력
C shell로 변경 시 프롬프트가 #으로 변경
서브 쉘 생성
- exit하면 이전쉘로 돌아감
쉘이름 -s sh 사용자계정
- 현재 사용자 쉘 확인
echo $SHELL
- 로그아웃
exit
쉘 내장 명령
- 별도의 실행 파일을 가지지 않고 쉘이 내장하고 있는 명령어
- 쉘 별로 이 명령어가 다를 수 있음
- pwd는 쉘 내장명령이 아니고 cd는 쉘 내장명령임
- echo 변수나 문자열을 출력
echo [-n] 문자열 또는 변수 # -n은 출력하고 마지막에 줄바꿈 않음
- shell에서 변수는 앞에 $가 붙음
- printf C언어의 printf와 동일
- %로 시작하는 형식하된 서식 사용가능
- 내장하고 있는 쉘도 있고 없는 쉘도 있음
printf "%d + %d = %d\n" 100 200 300
특수문자
- 쉘에서는 사용자가 편리하게 명령을 입력하고 실행할 수 있도록 특수문자를 제공
- 거의 모드 쉘에서 특수문자의 기능은 동일
- *
- 임의의 문자열을 의미, 글자수와 상관없이 매핑
- ls * 현재 디렉토리 및 서브디렉토리 내용 모두 출력
- *.txt, cp *, t*.
- ?
- 한 글자
- SQL: %->* _->?
- 여러 개 중 한글자 선택할 때
- -를 이용해 범위 설정 가능
- 범위는 코드값을 기준으로 함
- 숫자 0은 48, 9는 57, A는 65, Z는 90, a는 97, z는 122
- A-Z: 대문자, a-z: 소문자, 0-9: 숫자, 가-힣: 한글, a-zA-z: 영문자
- 현대 디렉토리에서 대문자로 시작하는 파일만 /tmp로 복사
- ~
- 사용자 홈 디렉토리
- -
- 현대 디렉토리로 이동하기 전의 디렉토리
- `
- 문자열에서 백틱으로 명령을 묶으면 명령을 수행해서 문자열 안에 포함
echo "Today is `date`"
Today is Tue Sep 3 15:41:44 KST 2024
- ;
- 여러 개의 명령을 사용할 때 순서대로 실행하고자 하는 경우 사용
date;ls;
- |
- 앞 명령의 결과를 뒤 명령에 전달해서 수행
- 루트 디렉토리의 모든 내용을 출력해서 페이지 단위로 확인
ls -al / | cat
- \
- 에스케이프
- 특수문자를 포함하는 데이터를 ‘‘로 묶어도 특수문자 기능 무시
- ““로 묶으면 $;,{},[]는 원래대로 처리하고 나머지 무시
입출력 리다이렉션
표준입출력
- 표준 입력은 일반적으로 키보드 입력
- 표준 출력은 모니터를 의미
리다이렉션
- 입출력의 방향을 변경
- 파일로 변경
>
- 출력을 뒤에 있는 장치(리눅스는 하드웨어도 파일로 간주)로 변경
- 출력하는 장치를 매번 새로만듬
>>
- 출력을 뒤에 있는 장치(리눅스는 하드웨어도 파일로 간주)로 변경
- 출력하는 장치 뒤에 추가
- >, >> 는 출력의 결과를 특정 파일에 기록하기 위해 사용
에러 출력 리다이렉션
- 명령 다음에 2를 추가하고 출력 리다이렉션을 이용하면 표준
ls /abc 2> ls.err
입력 리다이렉션
- 명령어에 파일의 내용을 추가하고자 할 때 사용
- 자주 사용하는 옵션이나 인자가 있을 때 활용 가능
- < 파일경로
쉘 변수
지역변수
- 현재 쉘에만 사용 가능한 변수
환경변수
- 시스템 전체에서 사용 가능한 변수
변수 확인
- set: 모든 변수와 함수를 조회
- env: 환경 변수만 조횧
- echo $변수: 변수의 값 출력
변수 생성 및 수정
변수명=값
있으면 수정, 없으면 생성
지역 변수를 환경 변수로 수정 export 사용
환경변수 지역변수로 수정: export -n 변수명
unset 변수명
- 변수삭제
변수에 내용 추가
- 변수명=$변수명:내용
환경 변수를 전역에 등록
- 사용자의 홈 디렉토리의 .bashrc 파일에 환경 변수를 등록해두면 재부팅 할 떄도 환경 변수의 값을 사용 가능
- 사용자 홈 디렉토리의 .bashrc는 사용자가 로그인 할 때 읽어서 설정을 하는 파일
- alias나 export를 이용해서 환경변수 만들면 로그인 할 때마다 적용
- 일반 환경변수를 만들면 다른 곳에서 사용할 수 있도록 만들어지지만 재부팅을 하면 내용이 소멸
- 재부팅을해도 내용을 유지시키려면 .bashrc파일에 등록을 해야 함
쉘 변수 사용
- 내장 명령어는 쉘 변수 사용 가능하지만 외부 명령어는 쉘 변수 사용 불가
- 리눅스 버전에 따라서는 외부 명령어에서 쉘 변수를 사용 가능하도록 해주는 것도 있음, 최신 버전의 리눅스에서는 외부 명령어에서도 쉘 변수 사용이 가능
DIR=/tmp
cd $DIR
/tmp$
- 제공하는 환경 변수
- PATH: 실행 파일(명령어)를 찾는 위치
- PWD: 현재 작업 디렉토리의 절대 경로
환경 설정 파일
- 시스템 환경 설정 파일->/etc 디렉토리에 존재
- 종류
/etc/profile # 모든 쉘에 공통으로 적용되는 환경설정파일
/etc/bash.bashrc # 공통으로 적용되는 bashrc
/etc/profile.d/*.sh # 언어나 명령별로 각각 필요한 환경을 설정
유저별 환경 설정 파일
- 유저의 홈디렉토리에 존재(~, /home/계정)
- 종류
~/.profile # .bashrc가 있는 경우에만 수행되는데 사용자가 정의한 환경설정파일
~/.bashrc # 히스토리크기나 환경변수 또는 별명이나 함수
~/.bash_logout # 로그아웃 할 때 수행할 내용
~/.bash_aliases # 별명설정
읽는 순서
- 시스템이 부팅될 때 시스템 환경 설정 파일을 읽어서 설정을 하고 사용자가 로그인을 하면 사용자의 환경설정 파일을 읽어서 환경 설정 수정을 한 상태로 로그인
- 로그인을 한 후 환경 설정을 변경하면 변경한 환경 설정이 적용
적용
- 시스템을 재부팅하거나 로그인을 다시 하면 적용되는데 재부팅이나 로그인을 하지 않고 적용하고자 하는 경우는 source 환경설정파일경로 명령을 수행
source ~/.bash_aliases
source ~/.bash_logout
덮어쓰기 방지
- 기존의 파일이 존재하는 경우 덮어쓰지 않도록 설정
set -o noclobber # 덮어쓰기 방지
set +o noclobber # 해제
파일 시스템
- 유닉스나 리눅스에서 시스템과 관련된 정보와 하드웨어 같은 장치를 모두 파일로 관리
- 파일은 운영체제가 관리
- 프로그램에서 파일을 생성했더라도 파일 관리는 운영체제가 함
- 프로그래밍을 할 때 외부 자원을 사용하는 경우는 특별한 경우가 아니면 예외처리를 해줘야 함
- 외부 자원에 해당하는 것들은 파일, 네트워크, 데이터베이스가 대표적
- 리눅스는 물리적으로 여러 개의 하드디스크를 사용하더라도 하나의 루트 디렉토리를 가짐
- 디렉토리와 장치도 하나의 파일로 간주
- 계층적 디렉토리 구조
파일 종류
- 일반 파일
- 일반적인 파일: 문서파일, 바이너리파일, 기타파일
- 디렉토리: 파일을 구조적으로 관리하기 위해 사용위한 파일
- 링크: 복제본이나 바로가기를 위한 파일
- 하드링크: 복제본
- 소프트링크: 바로가기
- 장치: 하드디스크나 키보드같은 장치를 관리하기 위한 파일
- 대부분 /dev 디렉토리에 존재
- 파일 종류 확인: file 명령으로 확인 가능
file .profile
file Downloads
file /bin/bash
디렉토리와 파일관리
- 우분투 파일 시스템은 파일과 디렉터리의 계층형 구조(대부분의 운영체제는 계층형 구조)
- 리눅스는 최상위 디렉터리(루트 디렉터리)가 1개
- 윈도우즈는 물리적인 디스크를 여러개 장착하거나 논리적으로 하나의 디스크를 분할하면 여러개의 루트(드라이브) 생성
- 리눅스는 물리적인 디스크 여러개를 하나의 루트에서 제어 가능
- 리눅스에서 디스크 분할 후 맵-리듀스 가능
- 작업 디렉터리: 현재 사용하고 있는 디렉터리
- pwd 명령어, 환경변수 PWD가 절대경로 저장, . 으로 나타냄
- 상위 디렉터리: ..
- 루트 디렉터리는 /
- 홈 디렉터리: 사용자 별 디렉터리
- /home/계정명
- ~ 로 표시
- 루트에 기본적으로 제공되는 디렉토리
- ls -aF / => /로 끝나면 디렉터리, @가 붙은 것은 링크
- bin과 lib 디렉터리는 유닉스 초창기부터 있었던 디렉터리로 지금은 /usr/bin과 /usr/lib로 변경되었는데 명령어 호환성 유지를 위해 심볼릭 링크로 만들어 제공
- /dev: 디바이스 파일이 배치되어 있는 디렉터리
- home: 사용자 디렉터리
- /etc: 리눅스 설정 파일이 위치하는 디렉터리
- /opt: 추가 패키지가 설치되는 디렉터리
- /root: root계정이 사용하는 디렉터리
- /sys: 리눅스 커널과 관련있는 파일이 저장되는 디렉터리
- /usr: 기본 실행 파일과 라이브러리 파일 그리고 헤더 파일이 저장되는 디렉터리
- /boot: 부팅과 관련된 파일
- /lost+found: 파일 시스템에 문제가 발생해서 복구할 경우 문제가 되는 파일이 저장되는 디렉터리
- /mnt: 파일 시스템을 임시로 마운트하는 디렉터리
- /proc: 프로세스 정보가 저장되는 디렉터리(PCB)
- /run: 실행중인 서비스와 관련된 파일이 저장되는 디렉터리
- /srv: FTP나 Web 등 시스템에서 제공하는 서비스의 데이터가 저장되는 디렉터리
- /tmp: 임시 디렉터리로 모든 사용자가 읽고 쓰기 가능
- 재시작하면 디렉터리의 내용이 모두 삭제될 수 있음
- /var: 시스템 운영 중에 발생하는 데이터나 로그를 저장하는 디렉터리
절대 경로와 상대 경로
- 절대 경로는 루트로부터의 경로로 하나만 존재
- 상대 경로를 현재 위치로부터의 경로, .과 ..을 이용해서 표시
파일의 구성 요소
- 리눅스에서는 파일을 저장할 때 파일이름 그리고 i-node 그리고 데이터 블록으로 나누어서 저장
- 파일 이름은 절대 경로의 형태로 만들어지고 이 파일 이름은 파일에 대한 정보를 저장한 i-node를 가리키고 i-node가 파일을 실제 저장한 데이터 블록을 가리킴
- 여러 개의 파일 이름이 동일한 i-node를 공유할 수 있음
- 파일이름
- 유일무이
- 리눅스나 유닉스에서 .으로 시작하면 숨김파일
- I-node
- 파일에 대한 정보를 저장
- 파일의 종류, 파일의 소유권, 파일의 액세스 모드, 파일의 타임 스탬프, 실제 저장 위치 등을 저장
- 데이터 블록
- 파일의 내용이 연속적으로 저장, 블록에서 구분 불가
- I-node에 파일에 대한 데이터 블록의 연속적 내용을 구분
디렉터리 관련 명령어
- pwd: 현재 디렉터리 절대 경로 확인
- cd: 디렉터리를 생략하거나 ~을 사용하면 현재 작업 디렉터리 이동
- 탭 키를 이용한 자동완성 가능
- ls: 디렉터리의 내용을 출력하는 명령
ls [옵션] [디렉터리 나 파일]
디렉터리를 생략하면 현재 디렉터리
디렉터리 대신에 파일 설정하면 파일이름출력, 이를 이용해 파일 존재여부 확인
옵션 a: 숨김 파일도 출력 d: 디렉터리 자체 정보 출력 i: I-node 번호 출력 l: 파일의 상세 정보 A: .과 ..를 제외하고 출력 F: 파일의 종류를 출력(*은 실행파일 /는 디렉터리 @는 심볼릭링크) L: 심볼릭 링크의 경우 원본 파일의 정보를 같이 출력 R: 하위 디렉터리까지 같이 출력
상세정보보기
- 첫번쨰는 종류
- d: 디렉터리
- l: 심볼릭링크
- b: 블록 장치
- c: 문자 장치 파일
- p: 파이프 파일
- s: 소켓 파일
- 9개의 문자: 권한
- rwxrwxrwx: 소유자, 소유자가 속한 그룹, 기타 사용자에 대한 읽기, 쓰기, 실행 권한
- 그 다음 블록에 나오는 숫자: 하드 링크의 개수(디렉터리는 기본2(. 과 ..))
- 다음 블록에 나오는 문자열: 소유자
- 다음 블록에 나오는 문자열: 소유자가 속한 그룹
- 다음 블록에 나오는 숫자: 파일의 크기, 디렉터리는 4096
- 다음 블록에 나오는 문자열: 마지막 수정 날짜
- 다음 블록에 나오는 문자열: 이름
디렉터리 자체 정보를 확인하고자 하는 경우 dl옵션 사용
dir과 vdir 명령도 제공: windows와 호환성 떄문
mkdir
- 디렉터리를 생성하는 명령
- 디렉터리에 쓰기 권한이 있는 경우에만 생성이 가능
- 옵션으로는 p가 있는데 p는 중간 디렉터리가 없는 경우 자동 생성
rmdir
- 디렉터리를 삭제하는 명령
- 하위 디렉터리가 있으면 삭제를 못함
- p옵션을 이용하면 상위 디렉터리가 비어있는 경우 하위 디렉터리도 삭제
파일 관련 명령어
cat
- 텍스트 파일 출력 명령
- 문서가 크면 스크롤 기능을 제공
- 여러 개의 파일을 동시에 출력 가능
- 파일을 지정하지 않으면 키보드 입력 내용을 그대로 출력
- n 옵션 이용해서 행 번호 출력 가능
- /etc/hostname 이라는 파일이 존재
more
- 화면 단위로 텍스트 파일 출력
- 스페이스 바를 이용해서 다음 페이지로 전환, q누르면 중단
- /문자열 입력하면 해당 문자열 검색 가능
- +숫자 를 이용하면 시작할 행 번호를 설정 가능
- 스크롤 기능 없음
- ex) /etc/services 파일 읽기
less
- more 개선
- 아래 위 방향키로 화면이동 가능하도록 함
- 지금 버전 more에서도 이 기능 제공
head/tail
- 앞의 몇 개의 행이나 뒤의 몇 개의 행을 읽고자 할 때
- tail 명령에 -f 옵션 사용하면 파일의 내용 변경될 때 자동으로 계속 출력
cp
- 파일을 복사하는 명령
- 형식: cp [옵션] 원본파일경로 복사될파일경로
- 복사될 파일 경로에 파일이 존재하면 덮어씌움
- 옵션 i: 파일이 존재하는 경우 덮어씌울 것인지 r: 디렉토리를 복사할 때 사용
- 여러개의 파일을 하나의 디렉토리로 복사가 가능, 이 경우에는 마지막에 있는 경로가 디렉토리
- 파일을 복사할 때 복사될 파일 경로에 디렉토리만 기재하면 동일한 파일 이름으로 복사가 됨
rm
- 파일이나 디렉토리를 삭제하는 명령어
- 옵션 i: 대화식으로 물어보면서 삭제 r: 재귀적으로 삭제
- 종종 rm -i 를 rm 명령으로 별명을 붙여서 사용하는 경우가 있음
mv
- 파일이나 디렉터리를 이동할 때 사용하는 명령어
- 사용하는 방식은 cp와 동일
- 이름을 변경하는 것도 가능, 디렉터리 대신 변경할 이름 입력
file: 파일의 종류를 출력
ln: 링크를 생성하는 명령
- 형식: ln [옵션] 원본파일경로 링크파일경로
- 일종의 파일에 별명을 붙이는것과 유사
- 사용이유: 긴 경로를 짧게 만들기 위해
- 여러 버전의 프로그램이 존재하는 경우 이름 구분 위해
하드 링크
- 파일 원본에 이름을 여러 개 붙이는 것과 동일한 효과
- 만들 때 옵션 없이 생성
- cp시 새로운 I-노드 블럭 생성
- ln시 똑같은 I-노드 블럭 생성
- rm시 각각 삭제
- I-노드는 참조하는 노드가 없으면 삭제
- 디렉터리는 하드링크를 만들 수 없음
- 서로 다른 디스크에 걸쳐서 만들 수 없음
심볼릭 링크
- 윈도우의 바로가기 아이콘과 유사
- 디렉터리에도 생성 가능하고 다른 디스크에도 생성 가능
- 원본 파일에 대한 정보가 담긴 특수 파일이며 원본과는 구분(별도의 I-node소유)
- 심볼릭 링크를 삭제하는 것은 원본에 아무런 영향이 없지만 원본이 지워지면 심볼릭 링크는 깨짐
- 만드는 방법은 링크를 만들 때 -s 옵션 추가
find
- 파일을 검색하기 위한 명령어
find [디렉토리 경로] [검색조건]
- 검색조건:
name 파일명
type 파일종류
user 유저명
perm 접근권한
find /tmp -name a.txt
- 동작: exec 명령 : 검색된 결과에 명령을 수행 ok 명령 {} : 사용자의 확인을 받아서 명령을 수행 print: 검색된 파일의 절대 경로명을 화면에 출력 ls: 긴 목록 형식으로 출력
locate
- 파일이나 디렉토리를 검색하는 명령
- 기본 명령이 아니라서 설치해서 사용
- 파일이나 디렉터리를 데이터베이스화 해서 검색을 하기 때문에 검색 속도가 빠름
- 검색 옵션이 한정적이고 데이터베이스를 업데이트 하지 않으면 업데이트 이후의 정보는 사용할 수 없음
- 검색 위주인 경우는 locate가 유용하고 검색한 결과를 가지고 작업을 수행하는 경우는 find가 유용
- 정규표현식도 사용 가능
파일 접근 관리
- 다중 사용자 시스템은 사용자의 파일에 마음대로 접근 못 하도록 보안 기능 제공
- 접근 권한은 파일이 가지고 있는 속성 중 하나 파일의 접근 권한을 확인할 떄는 ls에 l 옵션을 이용해 상세히 정보를 출력하면 됨
권한 종류
읽기
- 파일의 경우는 읽거나 복사 가능
- 디렉터리의 경우는 ls 명령으로 목록은 볼 수 있지만 나머지 옵션은 실행 권한이 있어야 함
쓰기
- 파일은 수정, 이동, 삭제가 가능
- 디렉터리의 경우는 파일을 생성하거나 삭제할 수 있음
실행
- 파일은 실행이 가능
- 디렉터리의 경우 cd 명령어 사용 가능
표기 방법
- 권한이 있는 경우 r, w, x로 표기 하고 권한 없는 경우 -로 표시
- 소유자, 소유자가 속한 그룹, 기타 사용자 이렇게 3개 카테고리로 표시
- 숫자로 표기, 실제 저장이 될 때는 이진수로 변환이 되서 저장되야 하기 때문에 권한 수정할 때나 외부에 표기할 때 숫자로 표기
- 각 카테고리를 8진수로 표현해서 표기
- rwx r-x rw- 111 101 110 7 5 6
접근 권한 변경
chmod [옵션] 변경할파일경로
- 옵션으로 R
- chmod 카테고리문자 연산자기호 접근권한 파일경로
- 카테고리 문자 u: 소유자 g: 소유자가속한그룹 o: 기타 a: 전체
- 연산자 기호
+: 권한 부여
-: 권한 회수
=: 권한설정
chmod g+wx access.txt
- 숫자로 설정하는 경우 chmod 8진수3개 파일경로
chmod 644 access.txt
기본접근권한
- 파일의 경우 rw-rw-r–
- 디렉터리의 경우 rwxrwxr-x
기본접근권한 확인
- umask 또는 umask -S
- umask는 제외할 권한이 숫자로 표시
- umask -S는 부여할 권한을 문자열로 표시
- 디렉터리에 대한 권한이고 파일은 여기서 실행 권한이 제거된 상태로 만들어짐
- mask는 반대
- rwxrwxr-x는 숫자로 775-> 전부 권한이 부여되는 경우 777 - ? = 775를 만들어주는 ?를 mask라 함
- 수정: umask 마스크값
특수 접근 권한
- umask의 맨 앞자리
종류 0: 일반적인 파일 1: sticky bit 2: SetGID 3: setUID
SetUID: 파일이 실행되는 동안 파일을 실행한 소유자의 권한 아니라 파일 소유자의 권한이 적용됨
이 설정 하게되면 파일 소유자에게 실행 권한이 있을 때 x가 s로 표시됨
실행한 유저가 쓰기 권한이 없더라도 소유자가 쓰기 권한이 있다면 쓰기가 가능
이 설정을 하고자 하는 경우는 권한 설정을 할 때 숫자로 하고 세자리 맨 앞에 4를 추가해주면 됨
touch set.exe # 파일생성: 기본 권한은 664(rw-rw-r--)
chmod 755 set.exe # 모든 유저에게 실행 권한 부여
ls -l set.exe # 권한 확인이 가능(rwxrwxr--)
chmod 4755 set.exe # 모든 유저에게 실행 권한 부여, 실행을 할 때 소유자의 권한으로 실행
ls -l set.exe # 권한 확인이 가능(rwsrwxr--)
- SetGID
- 파일이 실행되는 동안에는 파일을 실행한 사용자의 권한이 아니라 파일 소유자그룹의 권한이 적용됨
- SetUID가 적용된 대표적인 파일이 passwd
- sticky bit: 디렉터리에만 설정할 수 있는데 이 설정이 있으면 모든 유저가 이 디렉터리에 파일을 생성하고 삭제할 수 있음
- 자신이 생성한 파일만 삭제가 가능
- 대표적인 디렉터리가 tmp, 기타 사용자의 실행권한이 t로 표시