기록하는삶
리눅스(Linux) & 기본 Shell Command 본문
리눅스는 1991년 리누스 토스발스가 처음 공개한 오픈소스 유닉스 계열 운영체제로, Window와 Mac과 함께 사실상 3대장 OS이다. 무료인데다 누구나 버전을 만들고 공개할 수 있다는 장점이 있어 널리 사용되며 특히 서버와 관련된 작업에서 빈번하게 사용된다고 한다. CLI(Command Line Interface)와 GUI(Graphic User Interface)가 모두 사용가능하지만 아무래도 CLI를 원활히 사용하기 위한 Shell Command를 익혀둘 필요가 있을 것 같아 정리해본다.
위처럼 수도 없이 많은 배포판이 존재하는데 대표적으로는 Debian, Ubuntu, Redhat, CentOS가 많이 사용된다고 한다. Oracle VirtualBox와 같은 가상머신 위에 설치하거나 윈도우의 경우 MS가 제공하는 WSL(Windows Subsystem for Linux)를 설치하면 리눅스를 사용할 수 있다.
https://docs.microsoft.com/ko-kr/windows/wsl/about
위 링크의 방법대로 WSL1을 설치하고 Unbuntu를 설치하여 아래의 Shell Command들을 연습했다.
쉘(Shell)은 사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램으로, 일종의 소프트웨어를 말한다. 약속된 언어로 사용자가 명령을 전달하면 쉘은 이를 해석해 OS로 전달, 다시 OS는 이를 해석해 작업을 실행한다. 터미널은 이러한 쉘을 실행해주는 프로그램으로 우리는 터미널에서 쉘을 사용해 컴퓨터에게 명령을 내린다고 생각하면 되겠다. 더 정확히는 터미널을 컴퓨터를 동작시키는 물리 장치로 단말기를 칭하는 '콘솔'의 한 종류로, 물리 장치가 아닌 가상의 콘솔이라 정의하기도 한다. 그냥 쉽게 나는 터미널에서 쉘에게 명령을 내리고, 컴퓨터는 이를 전달받아 수행한다.
쉘에는 여러 종류가 있으며, Linux의 표준 쉘은 bash, Mac의 기본 쉘은 zsh다. 서버에 접속하여 작업할 때, Linux의 내장 기능을 활용할 때, 데이터 전처리를 할 때, Docker를 사용할 때 등등 자주 활용된다고 하니 잘 기록해두고 연습해야겠다.
명령어 | 동작 내용 | 예시/비고 |
man (command) | command의 메뉴얼 문서 보기 | man python ':q'를 눌러 종료 |
mkdir (foldername) | Make Directory / 폴더 생성 | mkdir ex_folder |
ls | List Segments / 접근한 폴더의 폴더, 파일 확인 | ls -a : 전체 파일 출력 ls -l : 퍼미션, 소유자, 만든날짜, 용량까지 출력 ls -h : 용량에 GB등 단위 붙여 출력 ex) ls -al, ls (폴더명) -lh |
pwd | Print Working Directory 현재 폴더 경로(절대경로) 출력 |
|
cd | Change Directory / 폴더로 이동 | |
echo | 터미널에 텍스트 혹은 쉘커맨드 결과 출력 | echo "hello" echo `pwd` (쉘커맨드 결과 출력을 원하면 백틱 `` 사용) |
vi | vim 편집기로 파일 생성(.sh, .txt 등) | Command, Insert, Last line 모드가 있다. (아래에 추가 정리) |
bash | 쉘 스크립트(sh) 실행 | bash vi-example.sh |
sudo | 관리자 권한으로 실행 | sudo ls 남용하지 않도록 유의 |
cp | Copy / 파일 또는 폴더 복사 | cp (복사대상) (파일명) cp -r : 디렉토리 내부 재귀적으로 모두 복사 cp -f : 강제 실행 |
mv | Move / 파일 또는 폴더 이동 이름을 바꿀 때도 활용할 수 있다. |
mv (파일명) (경로 or 파일명) |
cat | concatenate / 특정 파일 내용 출력 | cat (파일1) (파일2) (파일3) : 여러 파일 concat cat (파일1) (파일2) > (파일3): overwrite cat (파일1) (파일2) > (파일3): append |
clear | 터미널 창 clear | |
histroy | 최근에 입력한 쉘 커맨드 목록 출력 | '!숫자'를 통해 해당 번호의 커맨드 재입력 가능 |
find | 파일 또는 디렉토리 검색 | find (경로) -name "(파일명)" |
export | 환경 변수 설정 변수 사용시에는 변수 앞에 $ |
export fire="불" (붙여쓰기 유의) echo $fire 터미널 종료시 사라지기 때문에, 매번 사용하고 싶다면 별도로 저장해야함 |
alias | 특정 커맨드 별칭으로 지정 | alias jupyter notebook='jb' |
처음 명령어 'vi vi-example.sh'를 입력하면 위와 같은 상태인데, 이때 i를 눌러 Insert Mode로 전환해야만 내용을 입력할 수 있다.
Insert mode에서 ESC를 누르면 다시 기본 모드인 Command mode로 전환할 수 있고, 이때 사용할 수 있는 단축기는 아래의 것들이 있다.
dd : 현재 위치한 한 줄 삭제
i : INSERT 모드로 변경
x : 커서가 위치한 곳의 글자 1개 삭제(5x : 문자 5개 삭제)
yy : 현재 줄을 복사(1줄을 ctrl + c)
p : 현재 커서가 있는 줄 바로 아래에 붙여넣기
k : 커서 위로
j : 커서 아래로
l : 커서 오른쪽으로
h : 커서 왼쪽으로
나는 아직 이게 더 어렵지만,, 익숙해지면 마우스 없이도 작업할 수 있는 것이 장점이라고 한다. Command mode에서 ':'을 입력하면 Last Line mode로 전환된다. 이때는 아래의 단축키로 파일을 저장하거나 파일 편집 종료, 문자 탐색 등을 할 수 있다.
w : 현재 파일명으로 저장
q : vi 종료(저장되지 않음)
q! : vi 강제 종료(!는 강제를 의미)
wq : 저장한 후 종료
/문자 : 문자 탐색
- 탐색한 후 n을 누르면 계속 탐색 실행
set nu : vi 라인 번호 출력
bash로 저장한 파일을 실행해보면 아래와 같다. 이때 파일에 문법적 오류가 있더라도 그냥 저장되었다가 실행하면 에러를 보여준다.
지금까지가 기본적인 쉘 커맨드들이었다면, 아래는 문자열과 관련된 쉘 커맨드들을 정리해본다.
명령어 | 동작 내용 | 예시 / 비고 |
head/tail | 파일의 앞/뒤 k행 출력 | head/tail -n k (파일명) |
sort | 행 단위 정렬 | sort -r : 내림차순 정렬(default: 오름차순) sort -n : Numeric sort cat fruits.txt | sort -r |
uniq | 중복된 행이 연속으로 있는 경우 중복 제거 | uniq -c : 연속된 중복의 수 출력 cat fruits.txt | uniq cat fruits.txt | sort | uniq cat fruits.txt | sort | uniq | wc -l |
wc | word count / 라인 수, 단어 수, 바이트 출력 | wc -m : 문자의 수 wc -l : 라인의 수 wc -c : 바이트 |
grep | 파일에 주어진 패턴 목록과 매칭되는 라인 검색 | grep (옵션) (패턴) (파일명) -i : Insensitively하게, 대소문자 구분 없이 찾기 -w : 정확히 그 단어만 찾기 -v: 특정 패턴 제외한 결과 출력 -E : 정규 표현식 사용 [정규표현식 패턴] ^단어 : 단어로 시작하는 것 찾기 단어$ : 단어로 끝나는 것 찾기 . : 하나의 문자 매칭 |
cut | 파일에서 특정 필드 추출 | -f : 잘라낼 필드 지정 -d : 필드 구분자 (default= \t) cat cut_file | cut -d : -f 1,7 (':'로 잘라낸 뒤 1,7번째 값 가져오기) |
'AI > OS' 카테고리의 다른 글
[PowerShell] 윈도우 파워쉘 자주 쓰는 명령어 (0) | 2024.02.02 |
---|---|
[리눅스/Linux] bash 환경 설정 (0) | 2023.02.26 |
리눅스(Linux) 자주 쓰는 CLI 명령어 (0) | 2023.02.15 |