목차
Linux 간단한 명령
ls (파일 리스트 조회)
옵션
-
a - 숨긴 파일 보기
-
l - 자세히 보기
-
R - 재귀적으로 보기
-
t - 시간순으로 출력
-
SS - 크기순으로 출력
-
h - 파일 사이즈를 보기좋게 출력 (K, M, G 단위로 출력)
-
F - 디렉토리를 보다 보기좋게 출력
-
r - 역순으로 출력
기본적으로 bash에서 ll 을 사용할 경우 ls -al 과 동일한 내용을 출력하게끔 매크로 정의가 되어 있다.
-
ls - 파일 리스트 보기
-
ls -l - 파일 리스트 상세 보기
-
ls -al - 파일 리스트 상세 보기 및 숨긴 파일, 디렉토리 출력
-
ls -alhF - 파일 리스트 상세보기 및 숨긴파일, 디렉토리 출력, 용량과 디렉토리를 보기좋게 출력한다.
-
ls -alt - 제일 최신에 수정된 파일부터 오래된 파일순으로 출력한다.
-
ls -altr - 제일 오래된 파일부터 최신 수정된 파일 순으로 출력한다.
-
ls -alhSS - 파일의 크기가 큰 순에서 작은 순으로 출력하며, 용량을 보기좋게 출력한다.
-
ls -alhSSr - 파일의 크기가 작은 순에서 큰 순으로 출력한다.
cd (경로 이동)
-
~ - 홈 디렉토리
-
. - 현재 디렉토리
-
.. - 상위 디렉토리
사용법
cp (파일, 디렉토리 복사)
-
r - 하위 디렉토리까지 복사
-
f - 복사될 파일이 이미 존재할 경우 덮어씀
-
a - 원본 파일의 속성, 링크까지 모두 복사
-
p - 원본 파일의 소유자 그룹, 권한을 유지하며 복사
1
2
3
4
5
6
|
cp -r <복사할 파일 또는 디렉토리1> <복사할 파일 또는 디렉토리2> ...중략... <복사될 위치>
# aaa, bbb, ccc를 ddd 디렉토리 안에 복사한다.
cp -r aaa bbb ccc ddd/
# sshkey의 권한을 유지한 채로 /etc/ssh/로 복사한다.
cp -rfp sshkey /etc/ssh/
|
mv (파일, 디렉토리 이동)
-
f - 이동할 곳에 파일이 존재할 경우 덮어쓴다.
1
2
3
|
mv <이동할 파일 또는 디렉토리1> <이동할 파일 또는 디렉토리2> ...중략... <복사될 위치>
# 현재 경로의 aaa, bbb, ccc를 ddd 디렉토리로 이동한다.
mv aaa bbb ccc ddd/
|
rm (파일, 디렉토리 삭제)
-
r - 하위 디렉토리까지 삭제한다.
-
f - 삭제할지 묻지 않고 강제로 삭제한다.
1
2
3
|
rm -rf <삭제할 파일 또는 디렉토리1> <삭제할 파일 또는 디렉토리2> ...중략...
# 현재 경로의 aaa, bbb, ccc 디렉토리 및 디렉토리 안의 하위 내용을 모두 삭제한다.
rm -rf aaa/ bbb/ ccc/
|
mkdir (디렉토리 생성)
-
p - 생성할 곳에 디렉토리가 없을 경우 재귀적으로 생성한다.
1
2
3
4
5
6
|
mkdir <생성할 디렉토리명1> <생성할 디렉토리명2> <생성할 디렉토리명3> ... 중략...
# 현재 경로에서 aaa, bbb, ccc 디렉토리를 생성한다.
mkdir aaa/ bbb/ ccc/
# 현재 경로에서 aaa 및 하위 디렉토리가 없을 경우, aaa -> bbb -> ccc 디렉토리를 생성한다.
mkdir -p aaa/bbb/ccc/
|
touch (파일 생성)
파일을 생성한다.
1
2
3
|
touch <생성할 파일명1> <생성할 파일명2> <생성할 파일명3>
# 현재 경로에서 aaa.c, bbb.cpp, ccc.json 파일을 생성한다.
touch aaa.c bbb.cpp ccc.json
|
pwd (현재 경로 확인)
자신이 현재 위치해 있는 경로가 어디인지 확인한다.
-
-P - 심볼릭 링크가 적용되지 않은 실제 경로를 확인한다.
ln (심볼릭 링크 (Windows의 바로가기) 생성)
find (파일 찾기)
디렉토리 내 문자열에 해당하는 파일명을 찾는다.
-
-type - 파일 또는 디렉토리를 검사할 것인지 정한다.
-
-type f - 파일만 찾는다.
-
-type d - 디렉토리만 찾는다.
-
-maxdepth - 하위 경로를 얼마만큼 검사할 것인지 정한다.-
-maxdepth 1 - 하위 경로를 검사하지 않고 현재 디렉토리의 내용만 검사한다.
-
regex - 정규식 (regular express) 과 매칭되는 파일 및 디렉토리를 검사한다.
-
-exec - 찾을 파일을 인자로 넘겨 명령을 추가 수행할 수 있다.- 해당
-exec 옵션을 적절히 사용하면, 찾을 파일에서 추가로 복사, 이동, 삭제, 검색 명령을 수행할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
find <경로> <옵션> "찾을문자열"
# 현재 디렉토리에서 모든 하위 디렉토리를 검사하며 .c 확장자의 파일을 찾는다.
find . -name "*.c" -type f
# test 문자열을 포함하는 디렉토리를 찾는다.
find . -name "*test*" -type d
# _test 문자열로 끝나는 파일을 찾는다.
find . -name "*_test" -type f
# 현재 디렉토리에서 build 디렉토리를 제외하고 CMakeLists.txt 파일과 Makefile 이라는 이름을 가진 파일을 찾는다.
find . ! \( -type d \( -path "./build" \) -prune \) -regex ".*\/\(CMakeLists.txt\|Makefile\)$" -type f
# /etc/ 디렉토리에서 .sh 확장자로 끝나는 파일을 모두 찾는다.
find /etc -name "*.sh" -type f
|
grep (문자열 찾기)
-
-r - 하위 디렉토리 탐색.
-
-n - 검색 결과 출력 라인 앞에 라인 번호 출력.
-
-I - 바이너리 파일은 검사하지 않음.
-
-F - PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.
-
-E - PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
-
-G - PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
-
-P - PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
-
-e - 매칭을 위한 PATTERN 전달.
-
-f - 파일에 기록된 내용을 PATTERN으로 사용.
-
-i - 대/소문자 무시.
-
-v - 매칭되는 PATTERN이 존재하지 않는 라인 선택.
-
-w - 단어(word) 단위로 매칭.
-
-x - 라인(line) 단위로 매칭.
-
-z - 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
-
-m - 최대 검색 결과 갯수 제한.
-
-b - 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
-
-H - 검색 결과 출력 라인 앞에 파일 이름 표시.
-
-h - 검색 결과 출력 시, 파일 이름 무시.
-
-o - 매치되는 문자열만 표시.
-
-q - 검색 결과 출력하지 않음.
-
-a - 바이너리 파일을 텍스트 파일처럼 처리.
-
-d - 디렉토리 처리 방식 지정. (read, recurse, skip)
-
-D - 장치 파일 처리 방식 지정. (read, skip)
-
-R - 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
-
-L - PATTERN이 존재하지 않는 파일 이름만 표시.
-
-l - 패턴이 존재하는 파일 이름만 표시.
-
-c - 파일 당 패턴이 일치하는 라인의 갯수 출력.
-
--exclude=<file> - 해당 파일명은 제외하고 검색 (asterik 문자 (*) 를 전체문자로 인식)
-
--exclude-dir=<dir> - 해당 디렉토리는 제외하고 검색 출처 : https://recipes4dev.tistory.com/157
1
2
3
4
5
6
7
8
9
10
|
# 현재 경로 및 하위 디렉토리의 모든 .c 확장자의 파일을 검사하여
# "include" 문자열이 존재할 경우 해당 라인과 내용을 출력
grep -rnF "include" *.c
# 현재 경로 및 하위 디렉토리의 모든 .c 확장자의 파일을 검사하여
# 모든 if문을 검사하고, if문이 존재할 경우 해당 라인과 내용을 출력
grep -rn "if\(.*\)" *.c
# 응용 : find로 .c, .cpp 확장자를 가진 파일을 찾고, 해당 확장자에서 #include로 시작하는 문자열을 출력한다.
find . -regex ".*\.\(c\|cpp\)" -type f -exec grep -Hn --color "^#include" {} \;
|
cat (파일 내용을 출력)
1
2
3
4
5
|
cat <파일명>
# test.c 의 파일내용을 출력한다.
cat test.c
# 응용 : test.c 의 파일내용 중에서, 해당 내용 중 #include 문자열로 시작하는 내용이 있을 경우 모두 찾아 출력한다.
cat test.c | grep "^#include"
|
readlink (파일 경로 확인)
현재 파일의 절대경로를 확인할 수 있다.
sed (파일 내용 조작)
내용 참조
https://dev.iasdf.com/wiki/manual/bash#%EB%B2%88%EC%99%B8-sed-%EC%82%AC%EC%9A%A9%EB%B2%95
test (파일의 상태 확인)
심화 명령
계정에 sudo 권한 주기
split 명령어 간단 사용법
1
2
3
|
split <파일명>
split <파일명> <분할할 파일명>
|
아무 옵션 없이, 분할할 파일명을 기입하지 않고 실행하면 1000줄씩 파일을 나누고 파일 이름은 xaa, xab, xac… 형식의 영문 2자리가 추가되어 구분된다.
분할할 파일명을 기입할 경우 <분할할 파일명>aa, <분할할 파일명>ab, <분할할 파일명>ac… 형식으로 파일이 생성된다.
옵션
-
-l : 라인수 기준으로 파일을 분할split -l 100000 logtest.log logtest_
-
--additional-suffix : 분할된 파일명에 추가할 문자열split --additional-suffix=.log logtest.log logtest_
-
-d : 알파벳 대신 숫자를 사용하여 분할된 파일명을 구분split -d logtest.log logtest_
내가 자주 사용하는 split 옵션은 다음과 같다.
100만줄 이상의 대용량 로그 파일의 경우 5~10만줄 단위로 끊어서 분석하기 위해 사용한다.
1
|
split -l 100000 --additional-suffix=.log logtest.log splogtest
|
분할을 진행했을 경우 grep을 통해 검색을 진행한다.
1
|
grep -n "검색어" splogtest*.log
|
timezone을 KST (한국)으로 설정
설정 가능한 timezone 검색
1
2
|
timedatectl list-timezones | grep Seoul
결과 : Asia/Seoul
|
적용
1
|
sudo timedatectl set-timezone Asia/Seoul
|
대용량 파일 또는 특정 용량 파일 생성
- fallocate 사용
1
2
3
4
5
|
# 100 byte 크기의 test.txt 파일을 생성한다.
fallocate -l 100 test.txt
# 10G 크기의 test.txt 파일을 생성한다
fallocate -l 10G test.txt
|
- dd 사용 (dd의 경우 디스크 성능측정 및 IO 테스트 명령어로도 쓰임)
1
2
3
4
5
6
|
dd if=/dev/zero of=파일명 bs=1 count=0 seek=크기
# 변수1 * 변수2 바이트의 파일이 생성된다.
# 변수2(buffer size)의 크기를 변수 1(count)번 만큼 생성한다.
dd if=/dev/zero of=파일명 count=변수1 bs=변수2
|
파일명 일괄 변경
find와 sed를 이용하여 파일명을 일괄 변경할 수 있다.
파일명에 0000-00-00- 문자열이 포함되어 있다면 0001-01-01- 문자열로 변경한다.
1
|
find ./ -name "*0000-00-00-*" | sed -e 'p' -e "s/0000-00-00-/0001-01-01-/g" |xargs -n 2 mv
|
현재 경로의 모든 파일에서 공백의 문자열을 _로 변경한다.
1
|
find ./ -name "*" -type f | sed -e 'p' -e "s/ /_/g" | xargs -d '\n' -n 2 mv
|
1
2
|
find ./ -name "*" -type f | sed -e 'p' -e "s/Complete_Mono/CM/g" | xargs -d '\n' -n 2 mv
find ./ -name "*" -type f | sed -e 'p' -e "s/_Windows_Compatible/WC/g" | xargs -d '\n' -n 2 mv
|
특정 확장자의 내용 일괄 변경
md 확장자를 가진 파일에서 foo 문자열을 모두 bar로 변경한다.
1
|
find . -name "*.md" -type f -exec sed -i'' -e "s/foo/bar/g" {} \;
|
.js 확장자를 가진 파일에서 /" 문자열을 " 로 변경한다. (첫 번째로 매칭되는 문자만 변경한다. sed에 g 옵션이 없기 때문)
1
|
find . -name "*.js" -type f -exec sed -i'' -e "s#/\"#\"#" {} \;
|
파일시스템 전체 or 디렉토리 트리 구조를 동일하게 복사
1
|
find . -depth -print | cpio -pmdvl /path/to/dest/
|
파일 크기 0으로 만들기
아래 3개의 방법 중 택 1
1
|
cp -f /dev/null /path/to/file
|
1
|
cat /dev/null > /path/to/file
|
1
|
echo -n "" > /path/to/file
|
gzip 압축된 텍스트 검색
zgrep 을 이용하자.
gzip 압축을 풀지 않고도 텍스트를 검색할 수 있다.
파일을 제외하고 디렉토리 이름만 보기
1
|
ls -la | grep --color=never "^d"
|
리눅스 로그아웃 시 백그라운드로 프로세스 계속 실행시키기
nohup을 이용하면 된다.
1
2
|
nohup <command> &
nohup ./req.sh &
|
grep 매치되지 않은 결과를 보고 싶을 때
more, less 상태에서 편집하기
more <filename> 상태에서 v 키를 누르면 vi로 해당 파일 편집 가능
cat <filename> | more 로 진행할 경우 작동 X
프로그램 실행시간 체크
1
2
3
4
|
time <명령어>
# example
time ./req.sh
time make all
|
내 시스템이 다른곳에서의 ping에 응답하지 않게 하려면?
1
|
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
|
다시 응답하게 할때는
1
|
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
|
명령어 출처 - KLDP 한국리눅스커뮤니티 문서 참조