본문 바로가기

Linux

Linux 기본 명령어정리 (bash shell 사용)

linux란 

1980년도에 super computer를 만들던 IBM이 처음으로 PC를 개발한다. 여기서 사용될 운영체제를 microsoft라는 스타트업에 외주를 주었고, microsoft사는 CPM이라는 assembly code를 다 빼내서 개조하여 IBMPC에 맞는 OS를 만들어 냈다. 그게 linux의 기본 환경인 검정화면과 command를 사용하는 형식인 DOS이다. command.com이라는 파일안에 우리가 사용하는 명령어를 다 집어넣어 놔서 user가 명령어를 typing을 하면 해당 명령을 찾아서 해당 명령 코드를 실행시킨다.(infinite loop function call 같이 항상 우리의 명령어를 대기하고 있다.)


shell이란

Terminal을 틀었을 때 보이는 환경을 말한다. shell은 ubuntu 운영체제가 돌아가고 있는 서버에 접속해서 명령어를 주면 해당 동작을 수행한다. 즉 사용자의 명령어를 받아들여 운영체제가 알아들을 수 있도록 해석하여 운영체제에게 전달하는 역할을 한다.

HW ) kernel(OS) ) shell  : userphysical memory를 건드리지 않고 virtual memory수준에서 kernel을 통해 컴퓨터를 사용하고 있다. (ex) 위도 경도) 주소체계 : 한동로558 -> 위도, 경도) Kernel 위에 둘러싸고 있는 하나의 layershell이라고 부른다. shell에는 많은 종류가 있는데 우리가 사용하고 있는 건 bash shell이다. (그 외 c shell 등이 있다. shell마다 prompt모양이 다르다.)

+) shell위에 shell을 둘러쌀 수 있을까? 가능하다. shell을 하나 열면 나만의 접속 port가 열린다. (who am I 라는 명령어를 통해 내가 어디 terminal로 들어왔는지 알 수 있다.) 여기서 bash를 실행시키면 두 겹의 shell이 실행되고 있는 것이다. exitlayer가 하나씩 벗겨진다. 다른 종류의 shell들을 겹칠 수도 있다. (마치 push and pop과 같은 느낌이다.)


command와 utility의 차이

Utility는 별도의 실행 파일이 있는 친구들 (ex) whereis vin, whereis ls, whereis pwd)을 말한다. 우리가 사용하게 될 수많은 명령어들이 linux의 역사 속에서 수많은 개발자들에 의해 update된 (open source) utility들이다.

실행은 되는데 실행 파일이 없는 애들이 command이다. (ex) whereis set)




linux 기본 명령어


1. 위치 이동

ls : list directory contents. 현재 위치에서 하위 directory를 보여준다

- ls -l : 현재 위치에서 visible한 subdirectory의 파일들의 상세 정보를 보여준다.(이 명령어는 ls의 다른 option 명령어들과 함께 사용될 수 있다.) 이때 맨 첫 번째 나타나는 출력결과는 각각 파일종류 및 권한, 링크수, 사용자, 그룹, 파일크기, 수정시간, 파일이름을 나타낸다.

- ls -a :  . 으로 시작하는 invisible한 subdirectory의 파일의 목록을 보여준다.

- ls -t : 파일을 가장 최근의 것부터 순서대로 보여준다.

- ls -rt : 파일을 오래된 시간부터 순서대로 보여한다.


cd : directory를 이동하는 명령어이다.

- cd myfile : 현재 directory에서 하위나 상위 directory로 이동한다.

- cd /myfile : 현재 directory에서 하위나 상위 directroy가 아닌 다른 directory로 이동하려면 /로 시작하여 경로를 입력한다. 

- cd .. : 상위 directory로 이동한다.

- cd 나 cd~ : 자신의 home directory로 이동한다.

- cd / : 자신의 route directory로 이동한다.


mkdir : make directories. 현재 directory에서 new 하위 directory를 생성한다.

- mkdir mydirectory : 현재 위치에서 "mydirectory"라는 이름을 가진 새로운 하위directory를 생성한다. 

- mkdir -p directory/subdirectory : "directory"의 이름을 가진 directory에 "subdirectory"라는 이름을 가진 하위 directory를 생성한다.


rmdir : remove empty directories. 내부에 하위 폴더가 없는 directory를 삭제한다.

- rmdir mydirectory : "mydirectory"라는 이름의 directory를 삭제한다. 


pwd : print name of current/working directory. 현제 계층 구조에 있는 특정 파일이나 디렉토리의 위치를 알려준다.

- pwd  : 현재 내가 작업중인 위치를 알려준다.

history : GNU history library. 이전에 사용한 명령어를 순서대로 보여준다.

- history number : 최근에 사용한 number개의 명령어를 보여준다.

- history | grep sudo : 필요한 명령어만 찾아서 볼 수 있다.

- history -c : history를 모두 삭제한다.


pushd & popd : 현재 directory의 위치를 저장하고 다른 directory로 이동

- pushd directory : 사용자의 현재 directory를 저장해두고 입력한 directory로 이동한다.

- popd : 사용자가 이전에 pushd해놓았던 directory를 불러와 이동한다.


exit : cause normal process termination. 현재 process를 종료하고 빠져나온다. 명령어 창에서 작업을 마치고 터미널을 닫는 명령어이다.



2. 파일 관련
cat : concatenate files and print on the standard output. 파일의 내용을 화면에 출력하거나 파일을 만드는 명령어이다.
- cat filename : "filename"이라는 이름을 가진 파일을 인자로 받아 terminal 화면에 보여준다.
- cat > filename : "filename"이라는 이름을 가진 파일을 만들어서 terminal에서 적는 내용을 받아 저장하여라. (file이름이 이미 존재한다면 기존의 내용은 삭제되고 새로운 내용이 덮어써지게된다.) 내용입력이 끝난뒤 control+D를 누르면 입력한 파일이 저장된다.
- cat file2 file3 > file1 : "file2"와 "file3"의 내용을 모두 합쳐서 새로운 "file1"을 만들어 그 내용을 저장한다.
- cat file2 >> file1 : 기존에 있는 "file1"에 "file2"의 내용을 덧붙여준다.
- cat filename | more : file의 내용이 많은 경우 more 명령어를 쓰면 읽기가 편해진다.


rm : remove files and directories. 파일이나 디렉토리( -r)를 삭제할 때 사용한다.
- rm filename : "filename" 이라는 이름을 가진 file을 삭제한다.
- rm -r directoryname " "directoryname"이라는 이름을 가진 directory와 하위 directory를 포함하여 모든 내용을 삭제한다.


cp : copy files and directories. 파일을 복사한다.

- cp file1 file2 : "file1"파일의 내용을 복사해 "file2"를 생성한다.

- cp file1 mydirectory/ : "file1"파일을 "mydirectory/"위치의 directory 안으로 복사한다.



mv : move (rename) files. 파일을 이동시키는 명령어이다. 같은 directory 내에서는 이름변경을 할 수 있다.

- mv file1 file2 : "file1" 파일을 "file2"로 이름을 변경한다.

- mv file1 mydirectory/ :  "file1"파일을 "mydirectory/"로 이동한다. (mv file1 mydirectory/ 사용시, 여러 개의 파일을 동시에 이동시킬 수 있다.)

- mv directory1/ directory2/ : "directory1"디렉토리를 "directory2"디렉토리로 이름을 변경한다.

ln : make links between files. 특정파일로 바로 갈 수 있는 파일 사이의 link를 생성한다.

- ln file1 file2 : "file1"의 hard link(copy와 동일)를 "file2"로 만든다.

- ln -s file1 file2 : "file1"의 symbolic link(pointer의 개념)를 "file2"로 만든다.

(filename대신  "directory/filename" 을 적어도 제대로 작동함)

 

find : search for files in a directory hierarchy. 특정 조건의 파일을 찾을 때 사용한다.

- find : 현재 directory(.)에 있는 파일을 보여준다.(하위에 있는 visible or invisible한 file 모두 보여준다.)

- find mydirectory : "mydirectory"에 있는 file 목록을 보여준다.

- find mydirectory -name "java*" : "mydirectory"에 있는 "java*"라는 이름을 가진 file을 찾아준다.


head : output the first part of files. 파일의 앞부분을 확인하는 명령어이다.

- head myfile : "myfile"의 file의 앞부분 내용을 보여준다.

- head -n 200 myfile : 200 행까지 출력한다.

- head -c 200 myfile : 200 byte까지 출력한다.

tail : output the last part of files. 특정 파일에 계속 추가되느 모든 내용을 모이터링할 수 있는 명령어이다.

- tail myfile : "myfile"의 마지막 부분 10개 행을 화면에 출력한다. (옵션은 head와 동일하다.)

- tail -f myfile : "myfile"을 실시간 모니터링한다. control+C를 누르면 종료한다.



3. 사용자 확인 및 컴퓨터 상태 확인

whoami (who am i): print effective userid. 현재 시스템을 사용하고 있는 자신이 누군인지 알려준다.

id : print real and effetive user and group IDs. 사용자 정보인 UID와 GID, 속해있는 group를 출력한다.


users : print the user names of users curretly logged in to the current host. 현재 접속한 사용자들의 ID를 보여준다.

who : show who is logged on. 현재 시스템에 로그인한 모든 사용자를 보여준다.


df : report files system disk space usage. 파일 시스템 구조와 용량 등을 보여준다.

- df : 시스템의 하드디스크의 남은 용량을 1024byte 단위로 출력한다.

- df -h : 사용자가 읽기 편한 형태의 크기로 하드디스크의 남은 용량을 출력한다.


free : display amount of free and used memory in the system. 리눅스 시스템의 메모리 사용량을 보여준다.

- free : 리눅스 시스템의 메모리 사용량을 보여준다.

- 단위를 변환하여 메모리 사용량을 보여주는 옵션이다. -k, -m, -g

chmod : change file mode bits. file, directory의 권한을 변경한다. (사용자-그룹-다른사용자/ read, write, execution)

-chmod 000 myfile : "myfile"에 사용자, 그룹, 다른사용자에게 각각 0, 0, 0의 권한을 준다. 이때 주는 숫자는 각 권한은 3자리로 끊어서 2진수로 계산한다.


grep : print lines matching a pattern. 파일(directory) 내에서 지정한 패턴이나 문자열을 찾은 후, 그 패턴을 포함하는 모든 행(파일)을 출력준다.

- grep -c pattern filename : 패턴이 일치하는 행의 수를 출럭한다.

- 그외 다른 option들  -i : 비교시 대소문자 구별을 안한다, -v : 지정한 패턴과 일치하지 않는 행을 출력, -n : 행의 번호를 함께 출력, -ㅣ : 패턴이 포함된 파일의 이름을 출력, -w : 패턴이 전체 단어와 일치하는 행만 출력


 

4. 기타 편리한 기능

date : print or set the system date and time. 서버의 현재 시간과 날짜를 확인하거나 설정한다.

- date : 현재의 날짜 시간, 요일을 보여준다. 뒤에 "%Y %M %D %H %M %S" 등을 이용하여 format을 설정해줄 수도 있다.

- date -d "-1 days" : 하루 전의 날짜를 보여준다.

cal : 달력을 보여주는 명령어이다.

- cal : 오늘 날짜의 달력을 보여준다.

- cal -y : 현재 년도의 모든 달력을 보여준다.



man : an interface to the on-line reference manuals. 해당 명령어의 manual을 보여준다.

- man utilityname  : 찾고자하는 utility 이름을 입력하면 해당 utility의 manual을 보여준다.

- man -w utilityname : 찾고자하는 manual의 page가 있는 위치를 알려준다.

alias : 자주 쓰는 command를 쓰기 편한 command로 바꾼다.

- alias 단축명='실행할명령어' : '실행할 명령어'를 단축명으로만 간단하게 사용할 수 있다.

- unalias 단축명 : 단축명의 alias를 해제할 때 사용한다.


clear : 지금까지 쓰여진 글이 없어진 깨끗한 화면을 보여준다.



echo : 입력한 문자를 그대로 출력한다.

- echo char : char을 화면에 출력한다.

- echo $variable : value of variable을 출력해준다.