목차
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 한국리눅스커뮤니티 문서 참조