AI/OS
리눅스(Linux) 자주 쓰는 CLI 명령어
mingchin
2023. 2. 15. 11:37
728x90
반응형
- Redhat/CenOS 기반
- 업데이트 중
목차: 클릭하면 이동
[도움말/편의성] (돌아가기)
# 도움말
명령어 --help : 명령어 사용법
man 명령어 : 명령어 사용법
# 모든 명령어에 자주 사용되는 옵션
-r: recursive
-a: all
-i: interactive
-f: force
############################################################
# 이전에 사용했던 명렁어 목록
history n: 최근에 사용한 n개 명령어
history -c: 히스토리 목록 클리어
!num: history에 저장된 num번 명령 재실행
!!: 바로 직전에 사용했던 명령 재실행
!r: 가장 최근에 사용한 r로 시작되는 명령어 재실행
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " : history 출력에 실행 시간 포함
echo #HISTSIZE : history 목록 크기 확인
############################################################
# alias
alias h='history'
[가상 환경] (돌아가기)
# 가상환경 생성
virtualenv venv --python=python3.6
# 활성화
. ./venv/bin/activate (Linux)
source 가상환경이름/Scripts/activate (Window)
# 비활성화
deactivate
[패키지 관리] (돌아가기)
# 모든 패키지 설치는 당연히 네트워크 연결을 필요로 한다.
0) 네트워크 테스트: ping -c 8.8.8.8
1) 조회 : rpm -qa
- 특정 패키지와 관련된 패키지 조회: rpm -qa | python
- 패키지 목록 저장: rpm -qa > rpmList (pip의 requirments.txt 관리와 유사)
# root만 할 수 있다
# root 계정으로 전환: su - (내가 할 일 없음) -> sudo의 권한은 어디까지???
2) 설치: yum install 패키지
3) 삭제 rpm -e 패키지
[백그라운드 실행] (돌아가기)
# nohup ~ & : 백그라운드에 실행하겠다
# > 파일명 : 해당 경로에 로그 저장하겠다
nohup ./run.sh > 20230207.test.001 &
tail -f : 파일의 뒷부분 동적으로 보기
- tail -n 50 : 뒷 50줄 보기
nvidia-smi -c 1 : compute mode 1로 변경 (0/DEFAULT, 1/EXCLUSIVE_PROCESS(충돌 방지),2/PROHIBITED)
# 프로세스 관리
ps -ef : 프로세스 목록 확인
kill -9 num : num번 프로세스 kill
# 'nnet3'가 포함된 모든 프로세스 종료
ps -ef | grep nnet3 | awk '{print $2}' | xargs kill -9
# 백그라운드 작업 확인
jobs
# 백그라운드 작업 foreground로 전환
fg
[음성 변환] (돌아가기)
# options
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}
# codec 목록 확인
ffmpeg -encoders
# infile options의 경우 자체적으로 파악해서 돌리기 때문에 설정 안해도 된다
-ac(채널 수): mono=1, stereo=2
-ar: sampling rate
-acodec: encoder
# metadata 확인
ffmpeg -i test_audio_transcription.m4a
# 사용 예시
ffmpeg -i test_audio_transcription.m4a -acodec pcm_s16le -ac 1 -ar 8000 roody.wav
[파일 다루기] (돌아가기)
####################### 파일 열기 #######################
cat -n : line 번호 추가해 열기
cat -b : 공백 제외하고 line 번호 추가해 열기
nl : cat -b와 동일(-i: 간격 지정, -v: 시작점 지정, -w: 너비 지정)
tac : cat의 resversed
wc -l filename: 파일 라인 수 확인
####################### 파일 나누기 #######################
split [options] filename: filename으로 시작하는 이름으로 파일 쪼개기
# options
-d: 쪼갠 파일 번호로 이름 구분
-a num: num 자릿수로 파일명 설정
--additional-suffix=.txt: 확장자 지정
-l num: num개 line씩 나누기
-C num: 최대 num byte이내의 파일로 나누기
-n num: num개 파일로 나누기
-numeric-suffixes=k: 파일명을 k, k+1, k+2, ...로 나누기
####################### 검색/변환 #######################
find . -name *.lex : 모든 하위 디렉토리에서 .lex 확장자 파일 찾기
# 특정 확장자를 가진 모든 파일에서 'error' 문자열 찾기
grep 'error' *.log
grep -m 100 'Apple' mylog.txt : 최대 100개까지 출력
cat mylog.txt | grep 'Apple' | grep 'Banana' : 파일 열고 두 가지 동시에 찾기
tail -f mylog.log | grep 192.168.0.1 : 실시간 로그 중 특정 문자열을 포함하는 줄만 보기
# log 파일에서 특정 표현의 개수 확인
grep -o "expression" test.log | wc -l
# 하위 모든 소스에서 특정 표현 검색
egrep -r "expression"
# 특정 표현을 가지는 라인만 삭제 후 파일 저장
sed -i '/expression/d' $FILE
# 특정 표현 변환 후 저장
sed -i "s/oldtext/newtext/g" $FILE
sudo find ./ -name "PROMPT*" -type f -exec sed -i "s/oldtext/newtext/g" {} +
####################### 정렬 #######################
# 가나다순으로, 1번 필드 기준 정렬
LC_COLLATE="ko_KR.UTF-8" sort -k 1
####################### 압축 #######################
# tar = type archive = 하나의 파일로 묶어놓은 상태
# gzip ↔ gunzip
# xz ↔ unxz (압축률이 더 좋다)
# ex.tar의 이름으로 ex_dir 묶기
tar cf ex.tar ex_dir
# ex.tar를 압축 (ex.tar.gz 생성)
gzip ex.tar
# 묶고 압축하기
tar -zcf ex2.tar.gz ex_dir2
# 압축 풀고 묶음 해제 (옵션 순서 유의)
tar -zxf ex2.tar.gz
# 압축 풀고 묶음 해제, verbose=True (옵션 순서 유의)
tar -zxvf ex3.tar.gz
# 여러 개 파일 압축 해제
find . -name '*.tar.gz' -exec tar zxvf {} \;
# 분할 압축 해제
cat files.tar* | tar -zxvf -
# options
-v: verbose
-x: tar 생성
-c: tar 해제
-z: gzip 압축 적용
-j: bzip2 압축 적용
# 서버간 데이터 이동
tar -cp [복사할 디렉토리 상대경로] | ssh [목적지 주소] tar xvp -C [목적지 디렉토리 절대경로]
####################### redirection #######################
# >: 실행 결과를 파일로 저장(w 옵션과 유사, 덮어쓰기에 유의)
cal > redirect.cal : 달력을 redirect.cal이라는 파일로 저장
# >>: 실행 결과를 파일로 저장(a 옵션과 유사, 원래 파일이 있다면 추가해 저장)
cal >> redirect.cal : 달력을 redirect.cal이라는 파일에 추가
cal | tee -a redirect.cal : >>와 동일, 내용을 출력하면서 실행
####################### 컬럼 단위로 다루기 #######################
# 컬림 이어 붙이기
paste col1 col2 col3 ...
# transpose
paste col1 -s
# csv로 만들기
paste col -s -d","
# 빈 곳은 0으로 채우고, 공통 필드(0), 1번째 파일의 2번째 컬럼, 2번째 파일의 2번째 컬럼 출력
join -e"0" -o 0,1.2,2.2 file1 file2
# comma를 delimiter로 3번째 필드 가져오기
file | cut -d',' -f3
# A - Z 출력 후 공백을 붙이고 character 기준 3,5,7번째 글자 가져오기
echo {A..Z} | tr -d ' ' | cut -c3,5,7 (-c3-7: 3-7번째)
# 현재 실행중인 프로세스의 전체 필드 출력
ps -ef | awk '{printf $0}'
# 사용자 중 1,3번째 필드를 tab으로 구분해 출력
who | awk '{printf $1,'\t',$3}'
# cut과 다르게 필드간 순서 변경이나 formatting도 가능
who | awk '{printf "접속 날짜: ", $3,'\t',"현재 접속중인 사용자: ", $1}'
# 2번째 컬럼의 숫자들의 합 구하기
find $PATH -type f -name $FILENAME -exec cat {} + | cut -d" " -f2 | awk '{ sum += $1 } END { print sum/3600 }'
# 2번째 컬럼의 숫자들의 최댓값 구하기
cat $FILE | cut -d' ' -f2 | awk '{if ($1 > max) max = $1} END {print max}'
####################### 기타 #######################
# 하위 모든 wav에 대한 duration 합
find /your/path -type f -name "*.wav" -exec soxi -D {} + | awk '{ sum += $1 } END { printf "%.2f\n", sum }'
# 하위 모든 text에 대해 개행 추가
find . -type f -name "*.txt" -exec sh -c 'echo >> "$1"' _ {} \;
# 하위 모든 text의 내용을 하나의 text로 생성
find . -name "*.txt" -type f -exec cat {} + > tmp.txt
# "|" 기준 마지막 컬럼 숫자에 50을 더한 파일 생성
awk -F '|' '{last_column = $NF; new_value = last_column + 50; $NF = new_value; OFS="|"; print $0}' in.txt > out.txt
[권한] (돌아가기)
# 권한 확인하기
ll
# 명령어 cal에 대해 권한을 700으로 수정
chmod 700 /usr/bim/cal
# read:4, write:2, execute:1 로 계산하여 rwe에 대한 권한을 숫자의 합으로 표현해서
# 각각 root, group, others에 순서대로 할당
# 권한 부여 예시
# 맨 앞을 제외하고 세 자리씩 끊어 읽는다
# 맨 앞자리의 경우
# d=디렉토리, l=심볼릭링크, - = 일반 파일, s = socket, p = named pipe, c = character
755: -rwxr-wr-x
741: drwxr----x (directiory)
# 파일/폴더 소요권 변경
chown {소유권자}:{그룹식별자} {소유권을 변경하고 싶은 파일명}
# 사용자의 UID, GID, 그룹정보를 확인
id username
[명령어] (돌아가기)
# type
728x90
반응형