Linux Server 종료 및 재부팅
# "14:00"은 Server 기준의 시간 (date 명령어로 Server 시간 확인 가능)
shutdown -h {now|+3|14:00} # 종료 {즉시|3분 후|14:00}
shutdown -r {now|+3|14:00} # 재부팅 {즉시|3분 후|14:00}
poweroff # 종료
reboot # 재부팅
shutdown -c # 진행 중인 shutdown 명령을 취소
Linux 사용자 계정 생성 및 삭제
adduser [사용자 계정 이름]
adduser psw
# 사용자 정보들은 빈칸인 상태에서 <Enter>를 쳐서 default로 설정 가능
# 사용자 정보들은 명령어 <usermod>로 나중에 변경 가능
userdel -r [사용자 계정 이름]
userdel -r psw
# -r 옵션은 홈 Directory 등 유저와 관련된 모든 내용을 삭제하기 위해 사용
EDITOR=[Text Editor] visudo
[사용자 계정 이름] ALL=(ALL:ALL) ALL
[사용자 계정 이름] ALL=NOPASSWD: ALL
EDITOR=nano visudo # nano Text Editor를 이용하여 /etc/sudoers 편집
# User privilege specification 항목 아래에 원하는 권한을 추가
psw ALL=(ALL:ALL) ALL # 모든 명령어를 실행 가능, Password 필요
psw ALL=NOPASSWD: ALL # 모든 명령어를 실행 가능, Password 불필요
sudo whoami # 자신에게 sudo 권한이 있는지 확인 (sudo 권한 있다면 root 출력)
usermod -aG sudo [사용자 계정 이름]
usermod -aG sudo psw # 모든 명령어를 실행 가능, Password 필요
sudo whoami # 자신에게 sudo 권한이 있는지 확인 (sudo 권한 있다면 root 출력)
Portable Operating System Interface : Unix 계열의 표준 ex) Unix, Linux, MacOS
Command Line Interface
mkdir 명령어 : Directory 생성 (Make Directory)
mkdir [생성할 디렉토리]
mkdir new_folder new_folder2 new_folder3
mkdir /home/user/new_folder # /home/user/ 위치에 new_folder Directory 생성
mkdir -p folder/sub_folder # 계층형 Directory를 한번에 생성
# 경로를 지정하지 않으면 현 위치를 Defualt로 합니다.
# -p : 상위 경로도 함께 생성합니다.
touch 명령어 : File 생성 (Make File)
touch [생성할 파일]
touch file1.txt # 현재 위치에 file1.txt 빈 파일 생성
touch file1.txt file2.txt # 현재 위치에 file1.txt, file2.txt 빈 파일 생성
touch /home/user/file1.txt # /home/user/ 위치에 file1.txt 빈 파일 생성
# 경로를 지정하지 않으면 현 위치를 Defualt로 합니다.
pwd 명령어 : 현재 위치 Directory 경로 출력 (Print Working Directory)
pwd
ls 명령어 : Directory 및 File 출력 (List)
ls [디렉토리]
ls / # root에 있는 Directory 및 File List 출력
ls /psw
ls -lR # 위치한 Directory의 하부 Directory의 File까지 모두 자세히 출력
# -a : 경로안의 모든 (숨김)File을 나열한다.
# -l : File들을 나열할때 자세히 출력한다.
# -R : 위치한 Directory의 하부 Directory의 File까지 모두 출력한다.
cd 명령어 : 현재 작업하고 있는 Directory에서 위치 이동 (Change Directory)
cd [이동할 디렉토리 경로]
cd .. # 상위 Directory로 이동
cd . # 현재 위치의 Directory로 이동 (새로고침)
cd / # root로 이동
cd ~ # Home Directory(root와 다름)로 이동
cd - # 이전에 있던 Directory로 이동
cd psw # 현재 Directory 내부에 있는 psw Directory로 이동
cd /home/psw # /home/psw 경로의 Directory로 이동
mv 명령어 : File 이동 (Move)
mv [이동할 파일 1] [이동할 파일 2] ... [이동할 경로]
mv test1.txt test2.txt /home/psw
mv * [이동할 경로]
mv * /home/psw # 모든 File 및 Directory 이동
# -i : 이동될 File 및 Directory와 동일한 이름의 File 및 Directory가 이미 존재할 경우, 사용자에게 덮어 쓰기 여부를 묻습니다.
mv [이름을 바꿀 파일 및 디렉토리] [바꿀 이름]
mv file1.txt file2.txt # file1.txt를 file2.txt로 변경 (File 이름 변경)
mv dir1 dir2 # dir2가 존재한다면 dir1이 dir2 안으로 이동, 존재하지 않는다면 Directory 이름 변경
# 중복되는 이름의 File 및 Directory가 없어야함
cp 명령어 : File 복사 (Copy)
cp [복사할 파일 1] [복사할 파일 2] ... [복사될 경로]
cp test1.txt test2.txt /home/psw
cp -r [복사할 경로] [복사될 경로]
cp -r old_folder new_folder
# -r : 하위 Directory까지 모두 이동합니다.
# -i : 이동될 File 및 Directory와 동일한 이름의 File 및 Directory가 이미 존재할 경우, 사용자에게 덮어 쓰기 여부를 묻습니다.
cp * [복사 될 경로]
cp * /home/psw
rm 명령어 : Directory 및 File 삭제 (Remove)
rm [삭제 할 디렉토리 및 파일]
rm test1.txt test2.txt
rm /home/user/test.txt # /home/user/test.txt 삭제
rm -rf new_folder # new_folder Directory 삭제 및 삭제 확인 메시지를 출력하지 않음
rm -rf * # 현재 위치의 모든 File 및 Directory 제거
rm *.txt # 현재 위치의 .txt로 끝나는 모든 File 제거
# 경로를 지정하지 않으면 현 위치를 Defualt로 합니다.
# 비어있지 않은 Directory는 -r 옵션 없이는 삭제할 수 없습니다.
# -r : Directory 및 Directory 내부의 모든 내용을 삭제합니다.
# -f : 강제로 File 및 Directory를 삭제하고 대상이 없는 경우에는 메시지를 출력하지 않습니다.
# -d : 비어있는 Directory들만 제거
clear 명령어 : Terminal Screen 내용 삭제
clear
open 명령어 : File 탐색기에서 해당 Directory를 Open
open [파일 탐색기에서 열 디렉토리 경로]
open ./psw
which 명령어 : 실행하고자 하는 Program의 경로 확인
which [실행하고자 하는 프로그램 경로]
which code # Visual Studio Code Program 경로 확인
which python # Python Interpreter 경로 확인
head 명령어 : File의 첫 행을 기준으로 지정한 행까지의 File 내용 일부를 출력
tail 명령어 : File의 마지막 행을 기준으로 지정한 행까지의 File 내용 일부를 출력
head filename.txt # File의 처음 10줄을 출력하는 명령어
head mylog1.log mylog2.log # mylog1.log 처음 10줄, mylog2.log 처음 10줄을 이어서 출력
# -n (line 수) : File의 첫 줄부터 지정한 line 수까지의 내용을 출력한다. (Default : 10줄)
# -c (byte 수) : File의 처음부터 지정한 byte만큼의 내용을 출력한다.
# -q : 파일의 헤더와 상단의 File 이름을 출력하지 않고 내용만 출력한다.
# -v : 출력하기전에 File의 헤더와 이름 먼저 출력한 후 File의 내용을 출력한다.
tail -f filename.txt # File의 마지막 10줄을 출력하는 명령어
tail mylog1.log mylog2.log # mylog1.log 마지막 10줄, mylog2.log 마지막 10줄을 이어서 출력
# -f : tail을 종료하지 않고 File의 업데이트 내용을 실시간으로 계속 출력한다.
# -n (line 수) : File의 마지막 줄부터 지정한 line 수까지의 내용을 출력한다.
# -c (byte 수) : File의 마지막부터 지정한 byte만큼의 내용을 출력한다.
# -q : 파일의 헤더와 상단의 File 이름을 출력하지 않고 내용만 출력한다.
# -v : 출력하기전에 File의 헤더와 이름 먼저 출력한 후 File의 내용을 출력한다.
ps 명령어 : Linux Server의 Process 확인 (Process State)
ps
ps -ef
ps -ef | grep 'psw' # 현재 실행중인 Process 목록에서 'psw' 문자열 찾기
# -e : Kernel Process를 제외한 모든 Process를 출력
# -f : Full Format으로 Process State 표시 (Unix Style)
grep 명령어 : 특정 File에서 지정한 문자열이나 정규표현식을 포함한 행을 출력
(Global Regular Expression Print)
명령어 | 설명 | 정규표현식 사용 |
---|---|---|
grep | 다중 패턴을 검색한다. | O |
egrep | 정규 표현식 패턴으로 검색한다. | O |
fgrep | 문자열 패턴으로 검색한다. | X |
grep [패턴(정규표현식)] [파일명]
grep 'error' test.txt # test.txt에서 'error' 문자열 찾기
grep 'error' test1.txt test2.txt
grep 'error' * # 현재 위치에 있는 모든 File에서 'error' 문자열 찾기
grep 'error' *.log # .log 확장자를 가진 모든 File에서 'error' 문자열 찾기
grep 'a*' 파일명 # 특정 File에서 a로 시작하는 모든 단어를 찾는다.
grep 'a...z' 파일명 # 특정 File에서 a로 시작하고 z로 끝나는 5자리 단어를 찾는다.
grep [a-c] 파일명 # 특정 File에서 a, b, c로 시작하는 단어를 찾는다.
grep [aA]pple 파일명 # 특정 File에서 apple 또는 Apple로 시작하는 단어를 찾는다.
tail -f mylog.log | grep 192.168.15.86 # 실시간 Log 보기
grep 'Apple' mylog.txt > result.txt # grep한 결과 값 txt File로 저장하기
ps -ef | grep 'psw' # 현재 실행중인 Process 목록에서 'psw' 문자열 찾기
# -n : 포함된 행의 번호를 함께 출력한다.
# -i : 대소문자를 구별하지 않는다.
# -c : 일치하는 행의 수를 출력한다.
# -r : 하위 디렉토리를 포함한 모든 파일에서 검색한다.
# -v : 일치하지 않는 행만 출력한다.
# -l : 패턴이 포함된 파일의 이름을 출력한다.
# -w : 단어와 일치하는 행만 출력한다.
# -x : 라인과 일치하는 행만 출력한다.
# -m 숫자 : 최대로 표시될 수 있는 결과를 제한한다.
# -E : 찾을 패턴을 정규 표현식으로 찾는다.
# -F : 찾을 패턴을 문자열로 찾는다.
echo 명령어 : Terminal에 Text 출력 + 여러 Text를 File에 추가
cat 명령어 : 여러 File의 내용을 하나로 합쳐주는 역할 + 그 외 (Concatenate)
리다이렉션 기호 | 방향 | 의미 |
---|---|---|
> | 표준 출력 | 명령 > 파일 : 명령의 결과를 파일로 저장 |
>> | 표준 출력(추가) | 명령 >> 파일 : 명령의 결과를 기존 파일에 추가하여 저장 |
< | 표준 입력 | 명령 < 파일 : 파일의 내용을 명령에 입력 |
[Terminal에 Text 출력]
echo "Hello World!" # Terminal에 "Hello World" 출력
[File에 Text 입력]
echo "This is First Line" > file1.txt # file1.txt에 "This is First Line" 입력
echo "This is New-First Line" > file1.txt # file1.txt에 "This is New-First Line" 덮어씌우기 ("This is First Line" 삭제)
[File에 Text 추가]
echo "This is Second Line" >> file1.txt # file1.txt의 마지막에 "This is Second Line" 추가 ("This is New-First Line" 유지)
[File 내용 출력]
cat file1.txt file2.txt file3.txt # File들의 내용을 화면에 출력
cat mylog.txt | grep 'Apple' | grep 'Banana' # 특정 File에서 여러개 문자열 찾기
[File 생성 및 합병]
cat file > new_file # file의 내용을 new_file라는 이름으로 생성
cat file1 file2 file3 > new_flie # file1 + file2 + file3 내용을 new_file라는 이름으로 생성
cat file2 >> file1 # file2의 내용을 file1에 추가함
[입력 내용을 File로 저장]
cat > file.txt
new content # file.txt에 new content라는 내용 입력 후 저장
cat >> file.txt
new content # file.txt에 new content라는 내용 추가 후 저장
# new content라는 내용 입력 후 <Enter> 눌러 내용 추가 후 <Crtl+C> 눌러 저장
find 명령어 : Linux File System에서 File 및 Directory 검색
find [경로] [표현식]
[name : 해당 이름의 File을 찾음. 해당 이름에는 정규 표현식 활용 가능]
find . -name "*py*" # 현재 위치에서 py가 들어가는 File 찾기
find . -name "test*" # 현재 위치에서 test로 시작되는 File 찾기
find . -name "*test" # 현재 위치에서 test로 끝나는 File 찾기
find . -name "*.txt" # 현재 위치에서 .txt 확장자의 File 찾기
[type : 지정된 File 타입에 해당하는 File 검색]
find . -type d # 현재 위치에서 Directory 찾기
find . -type f # 현재 위치에서 File 찾기
find . -type d -name "*test*" # 현재 위치에서 test가 들어가는 Directory 찾기
# d : Directory
# f : File
[delete : 검색된 File 혹은 Directory 삭제]
find . -name "*.txt" -delete # 현재 위치에서 .txt 확장자의 File 검색 후 삭제
[empty : 빈 Directory 혹은 size가 0인 File 검색]
find . -empty # 현재 위치에서 빈 Directory이거나 크기가 0인 File검색
find . -name "*test*" -empty -delete # 현재 위치에서 test가 들어가는 빈 Directory이거나 크기가 0인 File 검색하여 삭제
[size : File 크기를 사용하여 File 검색]
find . -size 1024c # 현재 위치에서 1024byte인 File 검색
find . -size +1024c # 현재 위치에서 1024byte보다 큰 File 검색
find . -size -1024c # 현재 위치에서 1024byte보다 작은 File 검색
find . -size +1k -size -10k # 현재 위치에서 1kb보다 크고 10kb보다 작은 File 검색
# b : Block
# c : byte
# k : kbyte
# w : 2byte Word
[exec : 검색된 파일에 대해 지정된 명령 실행]
find . -name "*test*" -exec ls -l {} \; # 현재 위치에 "test"가 들어가는 File을 찾아서 상세정보 출력
find . -name "*.txt" -exec rm {} \; # 현재 위치에 ".txt" 확장자의 File를 찾아서 삭제
find . -type f -exec grep "test" {} \; # 현재 위치에 있는 File에서 "test"가 들어가는 내용 찾기
[user : 해당 user에게 속한 File 검색]
find / -user psw -print # 특정 사용자의 File을 찾을때, 사용자 이름 : psw
find -uid 500 ls -l {} \; # 특정 소유자의 File을 찾을때, 소유자 id : 500
df 명령어 : Linux Server의 용량 확인 (Disk Free)
df # 해당 Server 내에 있는 모든 파티션의 용량 확인
df -h . # 현재 위치한 Directory가 포함된 파티션의 용량 확인
# -k : kb 단위로 용량 확인
# -m : mb 단위로 용량 확인
# -h : 보기 좋은 형식으로 용량 확인
du 명령어 : Directory가 차지하는 용량 확인 (Disk Usage)
du [확인 할 디렉토리 경로]
du -h /path/to/dir # 경로에 절대경로, 상대경로 모두 입력 가능
du -h . # 현재 위치한 Directory와 그 하위 모든 Directory의 각 File 및 Directory가 차지하는 용량을 표시
du -h -d 1 . # 현재 위치한 Directory와 깊이 1만큼의 하위 Directory가 차지하는 용량을 표시, ("du -h --max-depth=1"과 동일)
du -sh . # 현재 위치한 Directory가 차지하는 용량의 총 합계만을 표시 (--max-depth=0)
# -k : kb 단위로 용량 확인
# -m : mb 단위로 용량 확인
# -s : 주어진 Directory가 차지하는 용량의 총 합계만을 표시
# -h : 보기 좋은 형식으로 용량 확인
# -d (--max-depth) : 지정한 깊이만큼만 하위 디렉토리에 대한 정보를 출력
gzip 명령어 : 단일 File을 압축 혹은 압축 해제
gzip file1 # file1을 file1.gz로 압축
gunzip file1.gz # file1.gz를 압축 해제
# -k : 원본 파일 유지 (압축 후 원본 파일을 삭제하지 않음)
# -v : 진행 상황을 자세히 출력
tar 명령어 : File 및 Directory를 하나의 File로 묶거나 묶음 해제 (Tape Archive)
tar -cvf archive.tar file1 file2 dir1 # file1, file2, dir1을 archive.tar로 묶음
tar -czvf archive.tar.gz file1 file2 dir1 # file1, file2, dir1을 gzip으로 압축
tar -xvf archive.tar # archive.tar을 묶음 해제
tar -xzvf archive.tar.gz # archive.tar.gz를 압축 해제
# -c : 새 Archive 생성
# -x : Archive 추출
# -v : 진행 상황을 자세히 출력
# -f : File 지정
# -z : gzip 사용 (압축 기능)
zip 명령어 : File 및 Dir을 압축 혹은 압축 해제 (Windows와 호환성이 높음)
zip -r archive.zip file1 file2 dir1 # file1, file2, dir1을 archive.zip으로 압축
unzip archive.zip # archive.zip을 압축 해제
# -r : Directory를 재귀적으로 압축 (zip에서는 Directory 내부의 모든 Sub Dir 혹은 File들까지 압축하기 위해서 -r 옵션 필요)
# -v : 진행 상황을 자세히 출력
# -e : 암호화된(zip 패스워드) 파일 생성
# -1 : 가장 빠른 압축 (압축률 낮음.)
# -9 : 최대 압축
ln 명령어 : Symbolic Link 생성
ln [원본 파일 및 디렉토리의 경로] [원본을 참조하는 포인터 경로]
# 경로를 작성할 때, 절대경로로 적는 것을 추천
ln -s /path/to/original /path/to/link # Symbolic Link 생성 (/path/to/link에 접근해서도 /path/to/original 확인 및 수정 가능)
ls -l # Directory 및 File 출력 (Symbolic Link도 포함되어 출력됨. (/path/to/link --> /path/to/original))
ls -l /path/to/link # 특정 Symbolic Link 확인 (/path/to/link --> /path/to/original)
rm /path/to/link # Symbolic Link 삭제 (원본 File에는 영향을 주지 않음.)
unlink /path/to/link # Symbolic Link 삭제 (원본 File에는 영향을 주지 않음.)
# -s : Symbolic Link
alias 명령어 : 명령어 별칭
alias [명령어 별칭]=['명령어']
alias # 현재 등록되어 있는 alias List 출력
alias KLGrade="cd ~/KLGrade/OAI-KL" # alias "KLGrade" 등록
KLGrade # "~/KLGrade/OAI-KL" Directory로 이동
unalias KLGrade # alias "KLGrade" 해제
unalias -a # 모든 alias 해제
# alias는 시스템 재부팅 시 초기화 >> alias를 ~/.bashrc나 ~/.bash_aliases에 등록해서 영구 사용 가능
# ~/.bashrc 수정 후 "source ~/.bashrc" 명령어를 입력하여 터미널 종료 없이 .bashrc 적용 가능
export 명령어 : 환경 변수 설정
export [환경 변수 이름]=[값]
env # 현재 등록되어 있는 환경 변수 List 출력
export MY_STRING="Hello World!"
echo $MY_STRING # Terminal에 "Hello World!" 출력, 환경 변수를 사용할 땐 "$" 이용
unset MY_STRING # 환경 변수 "MY_STRING" 해제
# 환경 변수 이름은 대문자와 _(언더바)를 이용
# 환경 변수는 시스템 재부팅 시 초기화 >> 환경 변수를 ~/.bashrc에 등록해서 영구 사용 가능
# ~/.bashrc 수정 후 "source ~/.bashrc" 명령어를 입력하여 터미널 종료 없이 .bashrc 적용 가능
;와 &&를 통한 순차적 다중 명령어
앞의 명령어가 실패할 경우에도 다음 명령어를 실행
mkdir dummy1; mkdit dummy2; rm -r dummy1; # mkdit dummy2 명령어 실행 실패, rm -r dummy1 명령어 실행 o
앞의 명령어가 실패할 경우 다음 명령어를 실행하지 않음
mkdir dummy1 && mkdit dummy2 && rm -r dummy1; # mkdit dummy2 명령어 실행 실패, rm -r dummy1 명령어 실행 x