[Linux] Commonly used Linux commands

신희준·2023년 8월 14일

Development

목록 보기
1/2

Linux os를 사용하면서 자주 사용하는 명령어를 정리해보자.

생각나는 데로 정리하고 있는데, 필요할 때마다 내용을 추가할 예정이다.

중괄호 [] 안에는 사용 가능한 option이 있고, <> 안에는 input이 들어간다.

아래에는 추가적으로 설명을 달았다.

Linux

Linux 버전 확인

cat /etc/*release*

Linux 파일 구조

아래는 최상위 디렉토리 '/'위치에서 본 tree 구조이다.

다양한 디렉토리가 있는데, 기본적으로 linux를 구성하는 디렉토리에 대해 알아보자.

(1) / (root directory)

(2) /bin

  • 이진 파일 (실행 파일)이 있는 디렉토리
  • 기본 명령어가 실행 파일 형태로 저장

(3) /boot

  • 부팅에 필요한 정보를 가지고 있는 파일이 저장되어있는 디렉토리

(4) /dev

  • 디바이스 장치에 대한 정보를 저장하고 있는 디렉토리
  • 마우스, 키보드, 하드디스크, 등

(5) /etc

  • 설정 파일이 저장되어있는 디렉토리

(6) /home

  • 사용자 개별 공간이 저장되어있는 디렉토리

(7) /lib

  • 각종 라이브러리 파일이 저장되어있는 디렉토리

(8) /media

  • 외부 장치들의 마운트포인트로 사용되는 디렉토리

(9) /mnt

  • 사용자 지정 마운트포인트로 사용되는 디렉토리
  • 윈도우에서 wsl 사용했을 때, windows filesystem이 mnt에 위치했었음

(10) /opt

  • 추가 응용프로그램 패키지가 저장되어있는 디렉토리

(11) /proc

  • 현재 메모리에 존재하는 모든 작업물들이 파일 형태로 존재하는 디렉토리
  • 가상파일시스템 (디스크에는 없고, 메모리 상에 존재)

(12) /root

  • root 사용자의 홈 디렉토리

(13) /sys

  • 디바이스 관리를 위한 가상 파일 시스템 디렉토리

(14) /usr

  • 시스템이 아닌 일반 사용자가 사용가능한 명령어 파일이 저장되어있는 디렉토리

다른 것들도 몇 개 있긴 하지만, 내가 한번도 안건들여본 위치는 안적었다.

Account & Users

사용자 확인 (id)

user의 정보 확인

id <userID>

super user (sudo)

root의 권한을 사용 (사용자마다 부여받은 권한이 다름)
/etc/sudoers에 미리 설정된 user만 사용 가능하다.

sudo <commend>

사용자 변경 (su)

사용자를 변경

su [- -l] <userName>

-l : login
userName : 적지않으면 root 계정

사용자 추가/삭제 (adduser / deluser)

내 컴퓨터에 사용자 추가하거나 삭제 (sudo를 같이 사용)

sudo adduser <userName>
sudo deluser <userName>

사용자에 sudo 권한 부여 (usermod)

새로 만든 사용자는 sudo 권한이 없으므로 부여해줘야 한다.

sudo usermod -a -G sudo <userName>

-a -G : 둘이 같이 쓰이며, 다른 그룹에 속하게 한다

sudo 환경설정 편집 (visudo)

마찬가지로 sudo 권한 설정을 위한 명령어로 vi편집기 이용

sudo visudo -f /etc/sudoers

[userName] ALL=(ALL:ALL) ALL을 입력해주고 저장 (ctrl+x -> y)

password 설정 (passwd)

유저 비밀번호 변경

sudo passwd <userName>

/etc/passwd에 들어가보면 시스템에 등록된 사용자 정보를 볼 수 있음

UserName:passwd:UserID:GroupID:UserIDInfo:HomeDirectory:CommandShell

File & Directory

현재 경로 확인 (pwd)

현재 사용자가 명령어를 입력하고 있는 경로를 출력

목록 확인 (ls)

현재 위치의 디렉토리에 파일과 디렉토리 출력
ls [-a -l]

-l : 상세 정보 출력
-a : 숨김 파일까지 출력

경로 이동 (cd)

원하는 경로로 이동
cd <path>

cd .. : 이전 디렉토리
cd / : 최상위 디렉토리

디렉토리 생성 (mkdir)

mkdir [-p -m] <dirName>
-m 777 : 특정 권한 (777)의 디렉토리 생성
-p dirName/sub_dirName : sub directory까지 한번에 생성

파일/폴더 삭제 (rm)

rm [-r -f] <fileName / dirName>

-r : 디렉토리와 내부 모든 파일 삭제
-f : force 삭제 + 확인 메세지 출력 안함

파일/폴더 이동 (mv)

파일/폴더 이름 변경 및 파일 이동에 사용 (1 -> 2)

mv [-r -f] <fileName1 / dirName1> <fileName2 / dirName2>

-f : 강제 이동, 이미 파일이 있으면 덮어씌우기

파일/폴더 복사 (cp)

파일/폴더 복사 (1 -> 2)

cp [-r -f] <fileName1 / dirName1> <fileName2 / dirName2>

-r : 디렉토리 복사
-f : 강제 복사, 이미 파일이 있으면 덮어씌우기

파일 위치 검색 (find)

특정 경로에서 파일을 검색

find <path> <expression>

path : 어떤 디렉토리에서부터 파일을 찾을 것인지
expression : 찾는 파일의 대상 범위를 정함 -name / -type 등을 사용

파일 위치 검색 (locate)

내 컴퓨터에서 특정 파일을 검색

locate <file>

파일을 외부로 전송 (scp)

로컬에서 외부로 파일을 전송
ssh 원격 접속 프로토콜 기반 securecopy

scp [-r -p -P] <fileName> <remoteName>@<remoteIP>:<Destination(Remote)>

-r: 디렉토리를 전송
-p: 원본 권한을 그대로 유지하여 복사
-P: 포트 지정 가능

-> 보통 scp -P <port> -rp <directory> <remoteName>@<remoteIP>:<receiving location>로 많이 옮김

외부에서 로컬로 파일/디렉토리를 받아올 수도 있음

scp [-r -p -P] <remoteName>@<remoteIP>:<Source(Remote)> <Destination(Local)>

파일 묶기/압축 (tar)

Tape ARchiver -> 묶음 형태를 제공

tar [-c -x -v -z -f] <fileName.tar> <targetDirectory/File>

-f: 대상 archive를 지정 (default)
-c: tar archive를 생성
-x: tar archive에서 파일 추출
-v: archiving하는 파일 정보 나열
-z: gzip 압축 (archive를 압축)

tar -zcvf <fileName.tar.gz> <targetDirectory/File>

압축 해제
tar -xf <fileName.tar.gz>

파일 읽기 & 쓰기

파일 생성 / 파일의 시간 변경 (touch)

옵션 없이 사용할 경우 파일의 atime/ctime/mtime을 현재 시간으로 변경
0 byte의 빈 파일을 생성

touch [-a -d -m -r -t] <fileName>

옵션은 어떤 시간을 변경할 것인지에 대한 것들

stat <fileName> 으로 파일의 시간을 볼 수도 있다.

파일 편집기 (vim)

리눅스의 파일 편집기

vim <fileName>으로 편집기를 킬 수 있다. (파일이 없으면 생성되면서 열림)

처음에 들어가면 명령 모드

i : 입력모드로 전환 (현재 커서부터 입력)
esc : 명령모드로 나옴
/<word>: 명령 모드에서 찾는 word를 '/'뒤에 치고 엔터 누르면 찾을 수 있다. 'n'으로 다음 찾기
:q : vim 종료
:q! : 강제 종료
:wq : 저장후 종료

파일 보기 (cat)

cat <fileName>

파일 앞부분/뒷부분 출력 (head/tail)

head [-n] <fileName>
tail [-n -f] <fileName>

-n : 몇 줄 출력할지
-f : 내용 변경될 때마다 실시간 출력

파일 내 특정 문자나 정규표현식 찾기 (grep)

grep <pattern> <fileName>

파이프(|)를 이용하여 다른 명령어와 조합해서 자주 사용

<command> | grep [-v] <pattern> <fileName>

-v: pattern을 제와하고
'^pattern': pattern이 맨 앞에 오는 경우
'pattern$': pattern이 맨 뒤에 오는 경우

파일의 행/단어/문자 수 세기 (wc)

word count

wc [-c -l -m -w] <fileName>

-c: 문자
-l: 행
-w: 단어

파이프(|)를 이용하여 다른 명령어와 조합해서 자주 사용

ls | wc -l: 현 위치 파일 갯수를 세어줌

Process

프로세스 목록 확인 (ps)

프로세스 목록 확인 (htop)

top 명령어가 있지만 htop이 훨씬 보기 좋다.

프로세스 종료 (kill)

세션 종료 시에도 프로그램 유지 (nohup)

= No hang up
무언가를 터미널과 같은 세션 종료 후에도 계속 돌리고 싶을 때.

nohup <command>

아래와 같은 test python script가 있다고 해보자.

nohup을 python command 앞에 감싸주면, ps -ef |grep python으로 확인해 볼 수 있다.

그런데, 이때 nohup은 nohup.out과 같은 표준 출력을 만들어내는데, redirection을 이용하여 원하는대로 입/출력 할 수 있다.

nohup <command> [> >> <] <fileName>
>: 기존에 있는 파일 내용 지우고 저장
>>: 계속 덧붙여서 저장
<: 파일의 데이터를 command에 입력

예를 들어 nohup python test.py 1 >> test.out이라고 쓰면 계속 숫자가 test.out이라는 텍스트 파일에 써질 것이다.

만약에 아무것도 출력하기 싫다면 nohup <command> > /dev/null처럼 쓰면 된다.

추가적으로 &를 붙여서 프로그램을 백그라운드에서 돌게 할 수 있다.

nohup <command> > /dev/null &를 사용하면 해당 command가 백그라운드에서 실행되고, 로그아웃을 하거나 세션이 끊기게 되도 프로세스가 멈추지 않는다.

강제종료하고 싶다면 위 처럼 프로세스를 검색해서 kill 해주면 된다

kill -9 27880

Memory 확인

free [-h]

  • used = total - free - buff/cache : 사용 중인 memory
  • free = total - used - buff/cache : 사용 가능한 memory
  • buff/cache : buff/cache로 사용되는 memory (자주 사용되는 파일이나 위치를 저장)
  • available : swapping 없이 새로운 응용프로그램이 사용 가능한 memory
  • swap : 디스크의 일정 부분을 memory 공간 부족 시 memory처럼 (혹은 활용이 적은 데이터 임시 저장 시) 사용하기 위해 설정해둔 공간 (저장 하드 공간을 사용)

혹은 cat /proc/meminfo를 통해 자세한 메모리 사용 정보 확인 가능

buffer/cache 비우기

echo 3 > /proc/sys/vm/drop_caches

PageCache, dentries 와 inodes 모두 해제.

swap 영역 clear

swapoff -a && swapon -a

Storage

디스크 여유 공간 확인 (df)

Linux system 전체 disk 공간 및 사용량 확인 (disk free)
mount한 디스크도 확인 가능

df [-h]

-h: human이 읽기 좋은 단위로 출력

디스크 사용 공간 확인 (du)

특정 디렉토리나 파일의 크기 확인 (disk usage)

du [-h -s -a]

-h: human이 읽기 좋은 단위로 출력
-s: 하위 directory 표시 없이 전체 용량을 표시
-a: 하위 directory의 파일까지 함께 표시

블록 장치 목록을 확인 (lsblk)

HARD 드라이브부터 USB 드라이브까지 모두 확인해서 나열

장치 이름, 장치 번호, 크기, 마운트 지점 등의 정보를 확인할 수 있음

lsblk

  • nvme0n1이 나의 NVMe SSD로, 2T의 용량을 가지고 있으며, '/'에 mount되어 있다.
  • 또다른 저장장치 12T HDD인 sda를 '/data'에 mount해놨다.
  • sda는 파티션 1만을 가지고 있다. 파티션 나누는 것은 따로 확인

하드디스크를 mount (mount)

새로운 하드디스크를 연결했을 때, 이를 인식하고 사용하기 위함

lsblkfdisk -l로 하드디스크를 확인한다.

보통 ubuntu main disk는 'sda'로 되어있고, 그 이후로 'sdb', 'sdc'로 인식

마운트를 하려는 폴더를 하나 생성하고,

sudo mount <FileSystem> <Mount location>

예를 들어 mount /dev/sda1 /data

매번 mount할 수 없으므로, '/etc/fstab' 수정해서 자동 마운트 설정

vim /etc/fstab

업로드중..

UUID를 통해 file system을 표현할 수도 있고, LABEL로 표현할 수도 있다.

Permission

파일/디렉토리 권한 변환 (chmod)

리눅스에서는 각 파일 및 디렉토리에 대해 개별적으로 권한을 부여할 수 있다.
권한은 read/write/execute로 구성되어 있고, 이를 user/group/others에 대해 또 따로 지정할 수 있게 되어있다.

먼저 command에서 ls -l을 사용해 현재 위치에서 파일 및 디렉토리의 권한을 확인할 수 있다.

Permission:physically connected files:User Ownership:Group Ownership:FileSize:ModifiedTime:FileName

여기서 첫번째에 권한 정보가 나와있다.

- | rwx | rwx | rwx

-는 파일의 타입을 의미하고, 그 뒤로 user의 권한 / group의 권한 / 그 외 사용자의 권한이 표현된다.

chmod는 이러한 권한을 변경하는 명령어이다.

chmod [u/g/o/a +/-/= r/w/x] <FileName>

u/g/o/a: user/group/others/all에 대해
+/-/=: 권한을 추가/제거/지정
r/w/x: read/write/execute할 수 있는

chmod에서는 각 소유자 별 권한을 8진수로 해서 한번에 지정하기도 한다. (rwx=111=7)

chmod [-R] 777 <DirectoryName/FileName> -> 모든 소유자에게 모든 권한을 부여

-R: 디렉토리에 대한 권한 변경할 때, 하위 파일 및 디렉토리에 대해 모두 적용

Devices and Modules

시스템의 PCI 디바이스 정보 출력 (lspci)

Network controller나 USB controller와 같은 주변 장치 종류와 정보 확인

lspci [-v]

-v: 각 장치의 정보 표시

시스템의 USB 디바이스 정보 출력 (lsusb)

연결된 video cam 확인

v4l2-ctl --list-devices  # 연결된 디바이스 확인
v4l2-ctl -d /dev/video0 --list-formats-ext  # 디바이스 번호로 카메라 정보 확인

v412-ctl 설치는 sudo apt-get install v4l-utils -y

시스템의 하드웨어 정보 출력 (lshw)

Memory, firmware, cpu, network 등의 정보를 출력

lshw [-C] <ClassName>

-C: classname과 함께 사용하면 원하는 하드웨어 정보만 출력 가능.

  • ClassName 종류: memory/network/storage/disk/...

시스템에 설치된 모듈 확인

lsmod: 시스템 설치된 모듈 리스트
modinfo <ModuleName>: 특정 모듈의 정보 확인
modprobe <ModuleName>: 특정 모듈을 추가

Environmental Variable

환경변수 설정

  • Local variable
    <환경변수명>=<변수>
  • Global variable
    export <환경변수명>=<변수>

환경변수 해제

unset <환경변수명>

환경변수 확인

echo $<환경변수명>
local variable 전체 확인 set
global variable 전체 확인 env

환경변수 영구 설정

'/etc/bash.bashrc'에 export <환경변수명>=<변수> 기입 (모든 사용자)
'/home/USER/.bashrc'에 export <환경변수명>=<변수> 기입 (특정 사용자)

추가로, bashrc와 같은 script 파일을 즉시 실행시키려면 source 사용하면 된다.
source .bashrc

$PATH 환경변수

$PATH 환경변수는 실행 파일을 찾을 수 있는 위치를 알려주는 변수
env | grep PATH / echo $PATH 등으로 확인 가능

  • 새로운 디렉토리를 PATH에추가exportPATH=PATH에 추가 `export PATH=PATH:`

CPU / GPU

Any notes

pycache 파일 지우기

find . | grep -E "(__pycache__|\.pyo$)" | xargs rm -rf

profile
공부하고 싶은 사람

0개의 댓글