Computer Science/운영체제

[Linux] 기본적인 명령어 정리

ekdus 2021. 1. 30. 03:08

리눅스에 대해 다루는 첫 글입니다!

이번에는 리눅스의 아주 기본적인 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 : 현재 수행 중인 shellshell 변수 표시

  • 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에 대해 다룹니다. 

2021/02/01 - [Computer Science/운영체제] - [Linux] vi editor