[Linux] 기본적인 명령어 정리
리눅스에 대해 다루는 첫 글입니다!
이번에는 리눅스의 아주 기본적인 command, 그리고 명령어를 사용하는데 필요한 기본적인 리눅스의 개념에 대해 정리하려고 합니다.
설명의 편의를 위해 반말을 사용하겠습니다.
Command
-
logout / exit : 로그아웃
-
passwd : 비밀번호 변경
-
man : 도움말
-
$man -k xxx : -k 는 키워드 검색. xxx가 들어있는 모든 라인을 뽑아서 보여줌.
-
-
pwd : 현재 작업 디렉토리의 확인
-
cat
-
cat in > out : 표준 입력(키보드) 또는 파일로부터 입력 받아 이를 표준 출력(화면)에 표시
-
생략되어 있는 경우 - cat stdin(KBD) > stdout(monitor)
-
$cat test : test 파일을 화면에 출력
-
$cat -n test : 출력에 줄 번호 표시
-
-
clear : 화면 정리
-
ctrl + d : 입력을 끝냄
-
ls : 디렉토리 내용 보기. ls만 입력할 경우 '.'파일 제외, 정보 제외. '.'으로 시작하지 않는 디렉토리, 파일명만 표시
-
$ls -a : 숨겨진 파일 나열. '.'으로 시작하는 파일도 나옴
-
$ls -l : 허가정보, 소유권, 최종변경일자를 포함하는 긴 목록 제공
-
$ls -d : 디렉토리 자체의 정보
-
$ls -R : 디렉토리 내용과 그 서브 디렉토리의 내용을 재귀적으로 제공
-
$ls directory : 디렉토리 내의 파일들을 보여줌
-
-
mv : 파일의 이름 변경 및 이동
-
$mv test test2 : test 파일 혹은 디렉토리의 이름을 test2로 변경
-
$mv test2 MakeAccount : test2 파일을 상위 디렉토리로 이동
-
$mv test2 .. : test2 파일을 상위 디렉토리로 이동
-
$mv -i test2 test3 : 새로운 파일 이름이 이미 존재하는 경우를 확인. test3 파일이 존재하면 overwrite
-
-
mkdir : make directory. 디렉토리 만들기. 디렉토리 이름으로 숫자, 문자 상관 없다
-
cd : change directory. 다른 디렉토리로 이동
-
$cd directory : 상대경로, 절대경로 모두 가능. // $cd .. : 상위 디렉토리로 이동
-
$cd : 사용자의 홈 디렉토리로 이동. 홈 디렉토리란 로그인했을 때 처음 들어가는 디렉토리를 말한다.
-
-
cp : copy 파일복사. 파일을 복사하면서 디렉토리에 집어넣는 것도 가능하다.
-
$cp test3 test10 : test3 파일을 test10으로 복사
-
$cp test3 MakeAccount : test3 파일을 복사해서 새로운 복사본을 MakeAccount에 넣는다. 기존 파일은 따로 존재
-
$cp ../test10 . : 상위 디렉토리에 있는 test10 파일을 현재 디렉토리에 복사
-
$cp -i old_file new_file : 이미 존재하는 경우를 확인. overwrite할 건지 물어본다
-
$cp -r old_dir new_dir : old directory에 있는 모든 파일과 서브 디렉토리를 재귀적으로 new dir에 복사
-
$cp old_dir new_dir 불가능하다. cp는 파일 복사가 기본
-
-
rmdir : remove directory. 디렉토리 제거. 디렉토리가 제거 되기 전, 그 디렉토리 내에 있는 모든 파일이 제거되어야 한다. 귀찮아서 잘 사용되지 않는다.
-
rm : remove. 파일의 삭제. 디렉토리 삭제는 불가능하다.
-
$rm -r directory : 서브 디렉토리를 포함한 모든 내용을 재귀적으로 삭제한다. 디렉토리 삭제 가능
-
$rm -i file : 파일 삭제 전 사용자에게 확인 요구
-
$rm * : 해당 디렉토리 내의 모든 파일을 삭제
-
다음 명령어인 chmod를 사용하기 위해서는 file의 attribute를 알아야 한다.
ls -al 명령어를 입력하면 파일에 대한 정보가 나오는데, 여기서 맨 처음에 -rw-r--r-- 와 같은 것이 나오는데 이것이 바로 접근 권한이다.
접근 권한의 맨 처음 '-'은 부호화된 파일의 유형을 나타낸다.
(- : 일반 파일 d : 디렉토리 파일 l : 심볼릭 링크. 실제파일이 아닌 다른 파일을 가리키는 바로가기 파일.)
우리가 chmod로 변경하고자 하는 접근 권한은 맨 처음 문자를 제외한 9개의 문자이다.
rw- r-- r-- : 앞의 3개는 user, 중간의 3개는 group, 뒤의 3개는 others에 대한 접근권한을 나타낸다.
r : 읽기 권한 (디렉토리의 경우 ls로 디렉토리 내용 보기)
w : 쓰기 권한 (디렉토리의 경우 디렉토리 아래에 파일 추가, 삭제)
x : 실행 권한 (디렉토리의 경우 cd로 디렉토리에 들어감)
- : 권한 없음
-
chmod : change mode. access permission을 변경한다.
-
$chmod g+2 file : file의 접근권한으로 그룹에게 쓰기 허가 추가
-
$chmod go-r file : file의 접근권한으로 group, other에게 읽기 허가 제거
-
$chmod (a)+x file : a를 써도 되고 안써도 된다. user, group, others 모두에 실행 허가 추가
-
$chmod 777 file : file에 모든 권한. 3개의 숫자로 파일 허가권 설정이 가능하다. 1이면 활성화, 0이면 비활성화. 각각의 그룹마다 세 자리가 있으므로 예를 들어 user의 모든 권한을 허가하려할 때 111이 될 것이다. 이것은 이진수로, 111을 십진수로 표현하면 7이다.
-
-
more : 텍스트 파일의 내용을 한 화면씩 끊어서 보여준다. f 를 누르면 다음 페이지, b 를 누르면 이전 페이지로 넘어간다.
-
date : 시스템의 날짜, 시간 표시. 변경은 슈퍼유저만 가능하다.
-
cal : 달력 출력. date와 마찬가지로 변경은 슈퍼유저만 가능하다.
-
wc FILE : 파일 내 단어 수 세기.
-
$wc -l file : 라인 수
-
$wc -w file : 단어 수
-
$wc -c file : 문자 수
-
-
su user_id : 사용자 변경. user_id를 명시하지 않으면 root로 사용자를 변경한다.
-
whoami : 현재 로그인한 id를 알려준다.
-
id user_name : user_name 사용자의 id, group id 등의 정보를 출력
-
logname : 현재 사용자의 login name 출력
-
w : 현재 시스템을 사용중인 사용자들에 대한 정보 출력
-
gzip a.txt : gzip은 간단한 압축 프로그램이다. 압축할 때는 오리지널 파일이 지워진다.
-
$gzip -d a.txt.gz : 압축을 풀 때
-
-
tar : 여러 파일을 묶어서 하나로 만드는 기능. 압축한 파일을 추가 생성한다. 디렉토리 포함해서 압축 가능
-
$tar cvfz MakeAccount.tar.gz MakeAccount : MakeAccount를 압축해서 MakeAccount.tar.gz을 생성. 옵션의 순서는 바뀌어도 된다.
-
$tar xvfz FILE : 압축을 풀 때
-
-
sort FILE : 입력을 ASCII 값에 근거하여 정렬한다.
-
uniq FILE : 파일의 중복된 행 제거
-
finger user_id : user_id의 정보 출력. user_id를 지정하지 않으면 현재 로그인한 모든 사용자 정보 출력
-
-l : long form -s : short form
-
-
chfn : change finger. 사용자의 finger를 수정
-
wall : 모든 사용자에게 메세지 전송
프로세스 권리와 관련한 명령어
-
ps : 현재 창에서 동작중인 프로세스들 출력
-
$ps -x : 자신이 사용하는 모든 프로세스 출력
-
$ps -aux : 시스템에서 동작하는 모든 프로세스 출력
-
-
kill : 프로세스에서 signal을 보내서 죽이는 것
-
top : CPU 사용량이 top인 프로세스들 출력
-
top으로 출력 시 나오는 화면에 대한 설명을 하자면,
-
PID : process ID PPID : Parent Process ID(프로세스를 만든 사람의 id) UID : 소유자의 user id
-
USER : 소유자 STAT : 상태. Sleep, Run Zombie %CPU : CPU 시간 사용 퍼센트 %MEM : 메모리 사용
-
-
-
nohup : 로그아웃 후에도 계속 프로세스 수행
-
& : command 뒤에 붙이면 background로 프로세스 수행
-
jobs : current shell 아래에서 수행중인 프로세스를 모두 보여줌
-
fg job_id : job_id 프로세스를 foreground로 전환. job_id를 입력하지 않으면 최근에 stop 시킨 프로세스를 전환
-
bg job_id : background로 실행 재개
-
ctrl+c : foreground 프로세스의 종료. background 돌면 종료 안되므로 kill로 종료 또는 fg로 전환 후 ctrl+c
-
ctrl+z : foreground 프로세스의 일시중지
-
grep pattern file : 파일에서 패턴을 찾아줌. file 여러 개 가능, 패턴은 하나만 가능.
-
-i : 패턴의 대소문자 무시 -h : 파일이름 명시하지 않음 -n : 줄 번호 표시
-
-
find 탐색위치 [탐색조건] 명령
-
e.g., $find . -print 현재 디렉토리 아래의 모든 파일을 찾아 경로를 프린트
-
탐색조건에 무엇이 있는자 살펴보면,
-
-type d : directory를 찾음
-
-type f : file을 찾음
-
-name : 이름으로 찾음
-
-empty : 크기가 0인 일반 파일 또는 디렉토리
-
-
명령에 뭐가 있는지 몇가지 살펴보면,
-
-print : 파일이름 출력
-
-exec : 이 옵션은 찾은 파일에 명령 줄 수 있음 \,;로 끝나야함
-
-ok : -exec와 유사, 반복해서 물어봄
-
-
find . -atime +100 -exec rm {} \; : -exec 이전까지 결과를 찾아서 {} 안에 결과 들어가고 지우는 명령어 수행
-
find . -name ‘*.c’ -exec grep ‘#include’{}\; : .c로 끝나는 파일 찾아서 #include 들어있는 라인 찾기
-
입출력 재지정
-
command > file1 : command의 표준 출력을 file1으로 내보냄
-
command < file2 : file2의 내용을 표준 입력으로 사용하여 command 실행
-
>> : 이미 파일이 존재하는 경우 맨 끝에 덧붙임
-
>& : 표준 출력 뿐만 아니라 standard error까지 파일로 내보냄. 에러 메세지를 별도의 출력으로 봄.
-
Command1 | command2 : |는 파이프. Command1의 표준 출력을 command2의 표준 입력으로 사용
-
$ls | wc -w : ls의 결과값을 wc가 받아서 단어 개수 출력
-
$cut -d: -f1/etc/passwd | sort > users : ':'를 구분자로 passwd파일의 첫번째 필드만 잘라내서 sorting한 결과값을 user 파일에 저장
-
Command Substitution (`` : back-quote)
: `` 안에 있는 것 먼저 실행
e.g., mail `cat receiver` : cat receiver먼저 수행
Escape Character
-
“ ” : ``와 $를 제외하고 문자열을 escape string
-
‘ ’ : ``, $도 작동이 안됨. Escape string
-
$echo "Today is `date`" : date의 날짜가 찍힌다. date 명령어 작동.
-
명령 분리자 ';'
: 왼쪽에서 오른쪽으로 순차적으로 실행
Subshell
(command1; command2; command n) : ()내의 것들을 별도로 실행. () 끝나면 원래대로 돌아옴.
조건부 실행
-
Command1 && command2 : command1이 성공적으로 끝날 경우에만 command2 수행
-
Command1 || command2 : command1이 실패할 경우에만 command 2 조건부 실행
Shell
위에서도 shell이라는 단어가 나왔지만, 다음의 명령어가 무엇인지 알기 위해서는 shell의 개념을 알아야한다.
shell은 운영체제 커널과 사용자를 연결시켜주는 매개체이다. 커널을 둘러싸고 있는 껍질이라고 생각하면 쉽다. shell은 여러 개 만들 수 있다. 그런데 껍질에 껍질을 만드는 것이어서 level을 가지고 있으며 각 shell은 별개이다.
shell을 여러개 만들어서 작동시킬 때 shell 변수는 자식 프로세스에 전달되지 않지만, 환경변수는 전달된다.
커널 : 프로그램, 명령어를 수행시키는 핵심적인 부분. 커널에 직접 접근하면 문제가 발생한다.
환경변수 : 특정한 종류의 shell 변수. 환경변수의 예로,
-
HOME : 현재 사용자의 홈 디렉토리
-
PATH : bash가 실행파일을 찾기 위해 사용되는 검색 경로
-
PWD : 현재 작업 디렉토리
가 있다.
-
bash : shell 하나 생성
-
set : 현재 수행 중인 shell의 shell 변수 표시
-
env : 현재 수행 중인 shell의 환경변수 표시. Set보다 작은 것.
-
alias name=command : 명령문을 다른 이름으로 지정할 수 있게 함
-
unalias : alias 지정했던 거 취소
아래의 예시를 통해 bash 명령어와 shell에 대한 개념을 더욱 명확히 할 수 있을 것이다.
$a=3
$echo $a $HOME
3 /home
$bash
$echo $a $HOME
/home
$a=4
$echo $a $HOME
4 /home
$exit //최근에 만든 shell을 빠져 나옴
$echo $a $HOME
3 /home
History
shell은 과거의 command 입력을 기억한다.
따라서 history 명령어를 사용하면 같은 명령의 반복이나 잘못된 명령의 편집에 유용하다.
-
!! : 직전 실행 명령문 실행
-
!string : 가장 최근에 string으로 시작하는 명령문 실행
다음 글에서는 vi editor에 대해 다룹니다.