개발에 본격적으로 입문하면 리눅스를 다룰 일이 많아진다.
자주 사용되는 리눅스 커맨드에 대해 알아보자.
경로를 이동한다.
현재 디렉터리의 파일들을 보여준다. (List Segments)
-a : .으로 시작하는 파일, 폴더들까지 전체 출력
-l : 권한, 소유자, 만든 날짜와 용량까지 풀력
-h : 용량을 사람이 읽기 쉽도록 GB, MB로 변환
뒤에서도 나오겠지만 옵션들은 조합해서 함께 쓸 수 있다.
예를 들어 다음 명령어는 권한, 소유자, 만든날짜, 용량을 보여주면서 용량을 GB, MB로 변환해준다.
$ ls -lh
현재 위치의 절대 경로를 보여준다. (Print Working Directory)
p가 present를 의미하는 줄 알았는데 아닌가 보다.
쉘 커맨드의 메뉴얼을 보여준다.(manual의 약자)
$ man apt
폴더 생성 (make directory)
print처럼 터미널에 텍스트 출력
`쉘 커맨드` (backtick) 처럼 사용하면 커맨드 자체가 아닌 커맨드의 결과를 띄운다.
vim 편집기로 파일을 생성하거나 편집할 수 있다.
vi 편집기는 3가지 모드가 있다
Command Mode
기본 모드
방향키로 커서 이동
dd : 현재 커서가 위치한 줄 삭제
i : insert모드로 변경
x : 커서가 위치한 곳의 글자 삭제
yy : 현재 줄 복사
p : 커서가 있는 줄 바로 아래에 붙여넣기
k, j, h, l : 상하좌우 커서 이동
Insert Mode
기본 모드에서 i를 누르면 나타나는 모드
파일 수정 가능
Last Line Mode
ESC를 누르고 콜론(:)을 누르면 나오는 모드
w : 현재 파일명으로 저장
q : 저장하지 않고 vi 종료
q! : 저장하지 않고 vi 강제 종료
wq : 저장하고 종료
/문자 : 해당 문자 탐색(n을 누르면 다음 탐색)
set nu : vi 라인 번호 출력
bash로 쉘 스크립트 실행
쉘 스크립트란 파이썬 스크립트처럼 쉘 명령어를 파일화(?)한 것. .sh로 저장된다.
관리자 권한으로 실행하고 싶은 경우 커맨드 앞에 sudo를 붙임
Copy
cp 복사할파일 복사될파일
-r : 디렉토리를 복사할 때 안에 파일이 있으면 재귀적으로 복사
-f : 강제로 실행
Move
파일, 폴더를 이동
이름을 바꿀 때도 사용할 수도 있다.
concatenate
특정 파일 내용 출력
여러 파일을 주면 한꺼번에 출력
파일을 overwrite하고 싶은 경우
cat hello-world.sh > new-hello-world.sh
파일을 append하고 싶은 경우
cat hello-world.sh >> new-hello-world.sh
최근에 입력한 쉘 커맨드들의 기록 출력
결과에서 느낌표를 붙이고 줄번호를 입력하면 해당 커맨드를 다시 실행한다.
파일이나 디렉토리를 검색
find 디렉토리 -name "찾을이름"
환경변수를 설정할 때 사용한다.
환경변수는 앞에 $를 붙이고 사용
환경변수는 터미널이 꺼지면 사라지며 매번 쉘을 실행할 때마다 환경변수를 저장하고 싶으면 .bachrc에 지정하고 싶은 환경변수에 대해 export 커맨드를 추가하면 된다.
alias = 별칭
터미널에 alias를 검색하면 현재 별칭으로 설정된 것들을 볼 수 있고
alias llh='ls -lh'
등으로 별칭을 새로 등록할 수 있다.
프로그램의 출력을 다음 프로그램의 입력으로 사용하고 싶은 경우
예)
1. 현재 폴더 안에서 'GOPR'이란 단어를 포함한 파일들을 찾아 정렬하고 싶다.
$ ls | grep "GOPR" | sort
$ ps | grep "streamlit"
프로그램의 출력을 다른 파일이나 스트림에 전달
> : 덮어쓰기
>> : 맨 아래 추가
파일에 주어진 패턴 목록과 일치하는 라인을 검색한다.
옵션
-i : Insensitively, 대소문자구분x
-w : 정확히 그 단어만
-v : 특정 패턴을 제외한 결과 출력
-E : 정규 표현식 사용
파일에서 특정 필드만 추출
-f : 잘라낼 필드 지정
-d : delimeter 구분자 지정
예를 들어 csv에서 특정 칼럼만 추출하고 싶을 때
cat mycsv.csv | cut -d , -f 1,2,3
로 하면 된다. (csv는 쉼표로 구분된 파일)
정렬.
-r 하면 반대로
중복 행을 제거한다.