※ 이 시리즈는 KAIST 바이오및뇌공학과 최정균 교수님의 "[BiS531] 유전체정보학" 강의 내용을 바탕으로 함을 밝힙니다.
나는 어디에 있나
리눅스에 처음 접속했다면 일단 내가 어느 디렉토리(경로, 주소)에 있는지 확인해보자.
본인의 컴퓨터에서 리눅스를 실행하든, 서버에 특정 사용자로 접속하든, 보통은 home 디렉토리에 위치해 있게 된다.
아래 명령어로 내가 어디 있는지 알아보자.
pwd
pwd는 Print Workin Directory의 약자로, working directory, 즉 내가 커맨드 라인에 입력하는 명령이 실행되는 위치를 말한다. 명령어에 따라 실행될 위치를 지정할 수 있지만, 별도로 지정하지 않는다면 리눅스는 기본적으로 지금 내가 자리 잡은 이 폴더 내에서 명령을 처리하려 시도한다. 예를 들어 내가 특정 파일을 어떻게 처리하라고 명령을 내렸는데, 그런 이름의 파일이 이 폴더 안에 없다면 오류가 발생하는 식이다.
다른 디렉토리로 가고 싶다
디렉토리를 파악했다면 다른 디렉토리로는 어떻게 이동할까? 이때는 change directody, 줄여서 cd 커맨드를 사용한다. cd 커맨드에는 몇 가지 팁이 있는데,
cd 절대경로 # 절대경로로 지정한 폴더로 바로 이동
cd ~ # home directory로 이동
cd - # 바로 직전에 있었던 directory로 이동
cd .. # 지금 있는 폴더의 바로 상위 폴더로 이동
리눅스에서 물결표(~)는 home directory (로그인하면 바로 들어오게 되는, 리눅스 상에서 사용자마다 주어지는 기본 폴더)의 주소를 요약하는 기호이다. 마이너스(-) 표는 직전에 있었던 주소를 나타낸다. cd 커맨드와 조합하여 사용하면 편리하다.
디렉토리 내부의 파일 목록을 보고 싶다
내가 있는 디렉토리에 어떤 파일 혹은 폴더가 존재할까? 윈도우즈나 iOS에서 흔히 사용하는 그래픽 빵빵한 OS에서야 클릭해서 폴더 열고 들여다보면 되지만, 리눅스 커맨드 라인에서는 그럴 수 없지 않은가... ls 커맨드는 기본적으로 내가 현재 위치한 폴더의 구성 요소를 보여준다. ls 명령어 뒤에 다른 디렉토리의 구체적인 주소를 입력하면 그 디렉토리 내부의 파일 폴더 목록을 돌려준다.
ls # 현재 폴더의 파일/폴더 목록, 숨김파일 비표시
ls -a # 숨김 파일도 모두 표시
ls -l # 상세한 정보를 표시
ls -al # 위의 두 옵션을 합쳐서 숨김 파일폴더도 모두 자세히 표시
ls 절대경로 # 해당 경로의 파일 및 폴더 표시
새로운 디렉토리 혹은 파일을 만들고 싶다
새로운 디렉토리나 파일을 만드는 방법을 알아보자. 폴더는 make directory 명령어 즉 mkdir로 생성한다.
mkdir 폴더이름
파일을 만드는 방법은 다양한데, 첫 번쨰로 mkdir 명령어의 옵션을 사용할 수 있고,
mkdir -p 파일이름 # mkdir 명령어의 p 옵션
어떤 파일의 내용을 출력하는 cat 명령어를 이용해 그 출력 내용을 꺾쇠 (>) 방향의 파일로 '내보낸다'는 이미지다. 리눅스에는 꺽쇠 (<, >), 이중꺾쇠 (<<, >>) 등으로 명령어 처리 결과를 파일로 작성하는 특수문자 기능이 할당되어 있으니 활용하면 좋다.
cat > 파일이름
또 다른 명령어는 파일의 생성/편집 날짜를 지금 컴퓨터에 저장된 시간으로 덮어씌우는 touch 명령어인데, 이 명령어에 인자로 '디렉토리에 없는 파일'의 이름을 전달하면 0 바이트짜리 해당 파일을 현재 시간에 생성해버린다. 약간 '그렇게 쓰라고 만든 명령어 아닌데...' 싶은 용법이지만...
touch 디렉토리에_없는_파일이름
마지막으로 텍스트 에디터... 윈도우즈로 치면 메모장 같은 리눅스 프로그램인 vi 혹은 vim을 이용한 생성법이다. 이 명령어는 vi/vim으로 '그 이름의 파일을 열어라'라는 명령을 컴퓨터에 전달하고, 해당 디렉토리에 그런 이름의 파일이 없다면 새 파일을 연다. touch와 다른 점은, 마치 우리가 워드프로세서에서 '새 파일'을 만드는 것과 같이, 저장하지 않으면 파일이 날아간다는 것이다.
vi 파일이름
vim 파일이름
vi/vim 파일 에디터는 고유의 조작법을 가지고 있기 때문에 약간 공부가 필요하다. 일단 새 파일을 만들면 '읽기 모드 (실은 명령 모드)' 상태로, 내용을 입력하려면 INSERT 기능키나 알파벳 i키로 '입력 모드'로 전환된다. 일단 입력모드가 되면 ESC(escape) 키로 다시 명령 모드로 돌아오는데, 명령 모드에서 콜론(:), 슬래쉬(/), 물음표(?)를 먼저 입력한 후 명령어를 뒤따라 입력하면 작동한다.
:q # vi, vim 텍스트 에디터 종료
:q! # ! 붙은 명령을 강제 실행
# 이 경우 저장 없이 강제 종료
:w # 편집 내용 저장
:wq # 편집 내용 저장 후 나가기
# 순서대로 실행하므로 qw로 순서가 바뀌면 안된다
우리는 파일을 만들고 싶으므로, vi/vim 명령어로 연 파일을 저장(:w)해야한다.
이 위에서 생성한 파일을 전부 기본적으로 텍스트 파일임을 잊지 말자. 우리가 접속한 리눅스 컴퓨터는... 물론 GUI를 제공하는 경우도 있지만, 대체로 커맨드 라인에 의존적으로 파일을 다루고, 그 작업의 대상은 텍스트 파일이다.
파일이나 디렉토리를 삭제하고 싶다
파일이나 디렉토리의 삭제는 remove를 줄인 rm 커맨드를 사용한다. 기본적으로 rm 커맨드는 '파일'만 대상으로 하기 때문에 디렉토리를 삭제하려면 recursive(재귀적)으로 삭제하라고 옵션을 추가하거나, 아예 전용 명령어인 rmdir을 사용할 수 있다. 그런데 이때 또 골 때리는 게... rmdir 명령어는 '디렉토리를 삭제'하는 게 기본 기능이라 디렉토리(폴더)에 파일이 들어있다면 삭제하지 못한다. 옵션을 주면 디렉토리 내부에 파일이 있어도 무시하고 삭제한다.
rm 파일이름
rm -r 디렉토리 # 해당 디렉토리의 하위 디렉토리를 포함해 모두 삭제
rm -f 파일 # 사용자 확인이 필요하거나 중요한(보호된) 파일도 강제로 삭제
여기서 나오는 리눅스 초보자 괴담... 마치 비행기 탈 때는 신발을 벗으라거나 입대할 때 PX에서 소총을 개인이 구매해야한다는 부류의 농담이 나오는데...
아래 명령어는 절대로 하면 안된다.
cd / # root 디렉토리로 이동
rm -rf * # 이하 모든 파일/폴더를 강제로 삭제
설명하자면 리눅스의 모든 구성요소를 강제로 삭제하겠다는 소리다. 컴퓨터 먹통된다. 하면 안된다. root 사용자 권한(윈도우즈로 따지면 관리자 권한 비슷한데 리눅스에선 훨씬 강력하다.)을 취득하지 않은 사용자가 root 디렉토리에서 명령을 내려봤자 실행되지는 않지만, 하면 안된다.
rmdir 명령어는 빈 디렉토리를 삭제하고, 옵션을 주면 비지 않은 디렉토리의 경우 포함된 파일도 삭제한다.
rmdir 빈_디렉토리
rmdir -r 디렉토리 # 비지 않은 디렉토리도 삭제
파일이나 디렉토리를 이동, 혹은 복사하고 싶다
파일을 이동하는 방법은
mv 원래_파일_주소 이동할_위치
이 기능은 원본 파일을 복사해 후자의 위치에 붙여넣고 원본 파일을 삭제하는 순서로 이뤄진다. mv 명령어는 파일 - 도착 디렉토리로 짝지어 작동하기도 하고, 파일 - 파일로 짝지어 사용할 수도 있다. 이 경우
mv 디렉토리1/파일1 디렉토리2/파일2
# 디렉토리1에 있던 파일1을 디렉토리2에 있는 파일2로 만든다
즉, 파일의 이름을 바꾸는 데에도 쓸 수 있다! 파일이나 디렉토리 이름을 바꾸는 전용 명령어는 rename 이지만, mv로도 가능하다. '아니, 원래 그 기능을 하는 커맨드가 아니지 않나?' 싶어도 어쨌거나 내가 바라는 결과가 나오니까, 여러 명령어를 알아두면 좋다. 사람마다 취향껏 골라 쓰는 듯?
파일을 복사하는 방법은 copy를 줄인 cp 커맨드를 쓴다.
cp 디렉토리1/파일1 디렉토리2
# 파일1을 복사해서 디렉토리2에 파일1이란 이름의 파일을 새로 만든다
cp 디렉토리1/파일1 디렉토리2/파일2
# 파일1을 복사해서 디렉토리2의 파일2라는 이름으로 붙여넣는다
cp 커맨드도 파일 - 디렉토리 쌍으로 혹은 파일 - 파일 쌍으로 사용한다. 전자는 원본 파일 이름을 보존하여 복사 붙여넣기, 후자는 이름을 바꾸어 붙여넣는다.