Operation/Linux

Linux, 기본 명령어 (디렉토리, 파일)

단님 2025. 2. 22. 00:11
728x90

 

필자는 리눅스를 취업하고 급하게 쓰게 되면서,

외우지 않으려고 노력했다.(사실 찾아쓰는게 제일 확실하기도 하고 내 메모리는 일을 다했다...)

어원을 찾아보려고 했고, 어원을 통해 재미난 사실들과 흥미를 일으키기도 했다.

 

디렉토리 명령어 살펴보기
만들기 / 지우기
mkdir [option]... <dir_name>...
mkdir pdir <subDir_name>
mkdir pdir/<subDir_name>
rmdir [option]... <dir_name>...

부모 디렉토리가 존재하지 않을 경우 당연한 말일 수 있으나 그 아래 하위 디렉토리를 만들 수 없다.

부모 디렉토리가 없더라도 한번에 부모와 자식 디렉토리를 한번에 만들어 줄 수 있다 (mkdir -p)

삭제 할 때에도 하위 디렉토리가 있다면 삭제가 불가능 하다. 한번에 지우기 위해서는 (rmdir -p) 명령어가 필요하다.

 

mkdir <dir_name>
#make directory

mkdir -p <pDir_name>/<subDir_name>
#make directory + parents
#부모 + 자식 디렉토리 한번에 생성

rmdir <dir_name>
#remove directory

rmdir -p <pDir_name>/<subDir_name>
#remove directory + parents
#부모 + 자식 디렉토리 한번에 삭제

rm -r <dir_name>
#remove + recursive
#r(recursive) 옵션을 통해 재귀적으로 삭제가 가능
#recursive 명령어를 사용하여 지우게 되면 아래 sub 디렉토리+파일을 포함하여 모든 삭제 작업을 수행.
#**사용자의 주의**가 필요하다.

 

디렉토리 이동
cd <dir_name>
#change directory

cd  -
#이전 디렉토리로 이동

cd .
# . (현재 위치의 디렉토리)

cd ..
# .. 상위(부모) 디렉토리

cd ~
# 사용자의 홈 디렉토리

 

 


파일 명령어 살펴보기

윈도우에서는 우클릭해서 "새로 만들기"를 했을 것이다.

파일들을 일괄적으로 작업을하거나 관리하고 싶을 수 있는데 이 부분을 마우스 우클릭을 여러번 하게 되면 불편할 것이다.

윈도우 파일들의 우클릭하여 속성을 보면 , 알려진 파일의 확장자를 숨기거나 숨긴 파일들 도 있었을 테고 , 시스템 관련 파일이나 중요 파일을 숨기는 기능도 있었다.

리눅스에서는 어떻게 구현이 되어 있는지 확인해 보자.

앞서 윈도우 커맨드 창의 cmd 창에서의 파일 확장자를 변경하는 명령어를 확인해보자

ren *.txt *.ppt

윈도우의 파일에 직접 우클릭하여 rename을 하지 않고 일괄 처리를 한번에 명령어를 통해 할 수 있는 것을 알 수 있다.

반복적으로 누군가 매일 수행해야한다고 하면 , 당연히 커맨드라인이 훨씬 더 편하고 효율적인 자동화 도구를 만들 수 있는 방법이 될 것이다.

 

파일 보기
ls [option]... <file>...

히든 파일 : 윈도우처럼 별도 파일의 속성을 통해 히든 파일이 제어되는 것이 아닌 , 파일명의 맨앞에 영문자나 숫자가 아닌 . 으로 시작하게 되면 히든파일에 대한 명령이 된다.

이 경우 ls -a (또는 ll) 의 명령어를 통해 전체보기를 할때만 보여지게 된다.

 

ls
#list
#현재위치의 디렉토리 파일 및 디렉토리 목록 표시

ls -l
#list + long
#파일 상세 정보 포함하여 표시

ls -a
#list + all
# 숨김 파일(.으로 시작하는 파일) 표시

ls -a -l
#list + all + long
# 숨김 파일(.으로 시작하는 파일) 포함하여 리스트 표시

ls -al
#list + all + long
# 위의 명령어를 풀면 이런식이고 , 위와 같이 합칠 수 있다.

ls -ali
#list + all + inode(Link)
#파일 링크 까지 확인.(+ inode)

ls *.txt
#"확장자가 .txt 파일인 것을 보여줘"

 

inode : 리눅스에서 파일을 관리하는 구조체
파일이라는 것은 파일의 실제 데이터를 가르키고 있는 포인터의 역할.
사실 이 사이에는 inode 라는 것을 거쳐서 연결이 된다.

 

 

파일 내용 보기
cat [option]... <file>...
#concatenate : 연결하다

cat 이라는 명령어는 파일을 보여주는 것에 그치는 것이 아니라 다양한 능력을 보유하고 있음.

concatenate 라는 단어 파생으로 본다면 , 단지 show에 그치는 것이 아닌 무언가를 연결하다라는 뜻을 가짐.

입력값으로 파일을 받고 → standard out 이라고 부르는 out과의 연결하는 역할을 보여준다.

파일의 내용을 합치는 것 또한 cat 명령어를 통하게 된다.

 input(file) 과 output(standard out)의 연결

 

more [option]... <file>...
#more : 더 많이
#파일 내용을 한 화면씩 출력

파일이나 명령 출력의 내용을 한번에 화면에 표시하고 , 사용자가 더 많은 내용을 보고 싶을때 스크롤 할 수 있게 설계.

너무 많은 내용을 출력하게 될 때 , 마우스 스크롤을 사용해야 하는 번거로움에서 발생되었다.

긴 내용을 조금 더 손쉽게  네비게이션 하고 탐색하는 명령어.

파일 내용 보여주기 ( 페이지 단위 이동 - space , 줄 단위 이동 - enter)

단점으로는 다음 페이지만 보기 가능하고 이전페이지로 돌아 갈 수 없다.

그 단점을 보완하기 위해 나온 도구가 less.

less [option]... <file>...
#파일 내용을 스크롤하면서 보기

less : 더 적은  → 왜 이런 의미가 파생되었을까 ? 역설적 유머를 통해 나오게 된 파생어 . "Less is more(적은 것이 더 많다)"

more 보다 향상된 기능이고 , more 처럼 모든 파일을 메모리에 올리지 않기 때문에 more 대비 속도가 빠르다.
(more는 용량 큰 파일을 볼때 초기 로딩 속도가 다소 느린 단점이 있었다.
less 는 보여지는 만큼 파일의 내용을 분할하여 메모리에 올린다.)

( 페이지 단위 이동 - space , 줄 단위 이동 - enter, 방향키 상하좌우  - 페이지 up/down)

 

cat -e
#concatenate + end
#파일 내용의 줄 맨 뒤에 $ 붙이기(텍스트의 빈공백 , 히든 캐릭터 공백 확인용)

cat -n
#concatenate + number
#각 파일 내용의 줄의 번호를 보여줌

 

 

파일 만들기 / 지우기
touch [option]... <file>...

touch : 파일을 툭 건들인다. → 정확히는 파일 생성보다는 현재 시간(time_stamp)으로 바꾸기.

→ 해당 파일이 존재하지 않는다면 , 0바이트의 파일이 생성되는것. (확장자가 있어도 무방하고 없어도 무방함.)

 

rm [option]... <file>...

remove : 삭제 → 파일 또는 디렉토리 삭제

 

강제로 지우려고 하더라도 , 지울 수 없는 것을 확인할 수 있다.

허가 : 권한이라는것이 존재하는 구나 . 알 수 있겠다. 

 

파일 복사
cp [option].... <src> [dst]

즉 destination (목적지) 에 디렉토리가 존재하지 않을 경우 그 파일명으로 복사되는 것이고 ,

디렉토리 명이 존재하게 된다면 그 디렉토리 안에 같은 파일명으로 복사되는 것이다.

만약 동일한 파일명이 존재한다면 덮어 쓰게 되므로 주의가 필요하다.

 

cp <원본> <새로운 카피본 이름>
#(=> copy) 파일 복사

cp <원본> <디렉토리>
#해당 파일을 디렉토리 안으로 복사

cp -r <원본 디렉토리> <새로운 디렉토리 명> 
#(=> copy + recursive) 대상 디렉토리의 내부를
#디렉토리 + 파일을 포함하여 재귀적으로 새로운 디렉토리에 복사

 

파일의 이동

대상의 디렉토리명이 없을 경우 이름이 변경되고 (rename 명령어가 별도로 있기는 하나 이런식의 방법도 가능.),

디렉토리명이 있을 경우 대상 디렉토리로 이동이 된다.

mv <원본> <대상>
#( => move) 파일 이동 또는 이름 변경

 

파일의 링크
ln <option>... <target> <linkname>

윈도우의 우클릭 → 바로가기 만들기의 기능과 유사한 링크 만드는 명령어다.

ln의 명령어는 두가지의 기능을 수행한다. 1. 하드링크 2. 소프트 링크

소프트 링크는 symbolic link ( 윈도우의 바로가기 만들기 기능) 과 동일한 기능을 수행 (ln -s)

하드 링크는 파일이 복사 된것 처럼 같은 파일이 두개 생기는 것을 확인할 수있다 (ln) (ls -als 명령어를 통해 확인 가능)

 

파일 명이란 그 파일의 내용을 갖고 있는 것이 아닌 해당 파일의 위치를 나타내는 포인터의 역할을 하게 된다.

하드 링크라는 것은 보는 바와 같이 , 해당 파일을 가르키는 포인터만 하나 더 만들게 되는 것이다. 즉 , 같은 파일을 바라보는 것이라고 할 수있다.

10M 파일을 만들어서 ln 명령어를 통해 하드링크를 생성했다면 우리눈에는 10M 파일이 두개 생성된 것처럼 보이나 , 실제 하드디스크 상의 공간은 10M만 차지하게 된다.

하드링크를 만들게 되면 누가 원본이고 사본이냐에 대한 개념이 사실상 사라지게 되는 것이다. 두 파일 모두 해당 파일에 대한 데이터를 가르키고 있는 포인터에 불과하기 때문이다.

이에 반해 소픝트 링크는 직접적으로 바라보는 포인터가 아닌 그 포인터를 가르키는 포인터가 만들어 지게 되는 것이다.

실제 용량도 파일에 해당하는 용량 + symbolic link 바이트로 표시하게 된다.

심링크는 윈도우의 바로가기와 매우 유사한 기능을 가지고 있고 , 상당히 많이 사용되는 편이다.

하드링크는 사용사례가 많지 않다. 사용된다면 사용사례로 백업을 들 수 있다. 

하드 링크를 만들게 되면 파일 포인터가 하나의 inode 를 포인팅 하는 것.

inode 가 실제 데이터 값을 가르키는 주도값을 가지게 된다.

심링크는 그에 반해 다른 inode를 만들고 그 inode 가 해당 파일의 포인터를 가르키는 구조로 되어있다.

이 inode안에는 다양한 파일의 속성값을 가지고 있고 ,  권한또는 사이즈 , 수정시간 등 여러가지 정보를 가지고 있다.

 

ln  <원본_파일> <링크_이름>
#하드링크 생성

ln -s <원본_파일> <링크_이름>
#심볼릭 링크(바로가기) 생성 , 심링크라고 부름

 

파일의 속성 보기
file [option]... <file>...

파일이 비었는지 , 또는 유형은 어떤 유형인지 영문자와 숫자로 이루어진 텍스트 형태의 파일인지(ASCII text) 디렉토리파일인지 바이너리 형태 파일이라던지 파일의 정보를 알 수 있는 명령어이다.

 

파일 편집기

GUI 없이 파일내용을 편집할 수 있도록 제공하는 기능.

vi는 가장 오래된 편집기 중 하나로 기본 텍스트 편집기로 사용된다. 단점으로는 익숙해지기전까지는 다소 사용범이 어렵다는 단점.

vi 가발전하여 vim 이라는 것이 가장 일반적으로 많이 사용된다. 코드 작성과  편집에 적합하며 , 다양한 플러그인 지원하는 에디터. 사용법은 vi와 동일하고 추가기능 을 사용케 한다.

vim 에 익숙하지 않는다면 nano라는 에디터도 있다.

직관적인 ui와 단축키로 인해 초보자에게 친숙한 텍스트 편집기로 명령모드가 없어 사용이 편리할 수있다. 간단한 파일 편집에 적합하다.