
까먹지 않으려고 적어 놓는 유용한 쉘 명령어
시작 서비스 켜기
아래 명령에서 서비스명은 apache2 같은 것.
sudo systemctl enable 서비스명
실제 명령은 아래처럼 될 것.
sudo systemctl enable apache2
끄는 건 enable
말고 disable
이다.
리눅스에서 euc-kr 한글 파일명 압축 풀기
unzip -O cp949 filename.zip
unzip -O euc-kr filename.zip
윈도우에서 압축한 파일이라면 cp949가 더 정확한 인코딩명이지만, euc-kr도 상관없다. cp949가 euc-kr을 약간 확장한 것이다.
JPG 화질 떨어뜨려서 용량 줄이는 스크립트
for i in *.jpg; do convert -strip -interlace Plane -quality 80 $i $i; done
화질을 80으로 만들지만 그리 나빠 보이지 않는다. 메타데이터를 지우지 않으려면 -strip
옵션을 뺀다.
for i in *.jpg; do convert -interlace Plane -quality 80 $i $i; done
-interlace Plane
은 프로그레시브 이미지로 만들라는 것이고, Plane
은 프로그레시브 방식 중 하나다. Line
, Partition
방식이 더 있다. 인터레이스 옵션에 대한 설명은 Interlace Option을 참고하라.
이미지를 리사이즈하고 자르기(imagemagick 사용)
convert -resize 1242x2208^ -gravity North -extent 1242x2208 source.png output.png
현재 폴더에 있는 전체 파일을 그렇게 하려면 아래 명령.
for f in *.png ; do convert -resize 1242x2208^ -gravity North -extent 1242x2208 $f $f ; done
PDF를 JPG로 변환(imagemagick 사용)
convert -density 300 파일명.pdf 파일명.jpg
이렇게 하면 파일명-1.jpg
식으로 페이지별 파일이 생긴다. -density
옵션은 인치당 픽셀수를 말하는데 인쇄할 때 제대로 나오려면 300은 돼야 한다.
PDF에 암호 걸기
pdftk 1.pdf output 1.128.pdf owner_pw foo user_pw baz
128비트 암호화밖에 지원하지 않는 듯.
user_pw
는 읽기 암호, owner_pw
는 인쇄 등 각종 권한에 대한 암호라고 한다. 기본적으로 읽기 보안을 걸려면 user_pw
를 설정하면 된다.
mysql client 프로그램에서 결과값 less로 보기
pager less -niS
-n
줄번호감춤(성능향상), -i
대소문자구분x, -S
줄바꿈 안함.
현재 폴더의 하위 폴더들 용량 보기
du -hd 1
-h
는 사람이 읽기 좋게 용량 표시, -d 1
하위 1단계 폴더까지만 검사해서 표시. 간혹 -d 1
대신 --max-depth=1
이라고 써야 하는 경우가 있다.
맨 아래 것(.)이 하위 폴더까지 합한 현재 폴더 용량.
더 자세한 것은 [링크] Shell에서 용량 관리 위한 명령어 참고.
IP 스캔하기
nmap -sP -PI 192.168.0.0/24
192.168.0
부분만 변경해 주면 되겠지.
오래된 파일 삭제(7일 넘은 파일)
find . -ctime +7 -exec rm -rf {} ;
현재 폴더에 있는 놈만 7일 넘은 파일 삭제
find . -maxdepth 1 -ctime +7 | xargs rm
파일 문자열 치환
sed 's|mytory.net|mytory.net|g' db.sql > db.local.sql
보면 알겠지만 s|타겟|변경결과|g
형식임. 펄 정규식이 아니라 오래된 정규식을 사용하는 거니까 자세한 사항을 알고 사용하려면 man sed
해볼 것.
-r
옵션을 넣으면 regex extended를 사용한다.
파일 찾기
locate 파일명
이러면 DB에 색인해 놓은 걸 바탕으로 파일을 찾는다. 속도가 빠르다.
방금 들어온 파일이라 DB에 색인돼 있을 것 같지 않다면 아래처럼 찾는다.
find /folder -name "filename"
더 자세한 내용은 [번역] 쉘에서 파일 찾기를 참고.
모든 하위폴더에 있는 .svn 폴더 삭제하기
rm -rf `find . -type d -name .svn`
현재 폴더에 있는 특정 확장자 파일 문자열 검색
find -name "*.php" -o -name "*.html" | xargs fgrep -il 'test'
아래처럼 하면 하위 디렉토리의 모든 파일에서 찾는다.
grep some_text -r .
더 자세한 내용과 질문은 [Shell] 특정 문자열이 들어있는 파일 찾기를 참고.
클립보드에 파일 내용 붙여 넣기(리눅스)
xclip -sel clip < 파일
7z 압축률 0으로 압축하기
OS간 파일명 인코딩이 깨지지 않게 압축을 하는 가장 간편한 방법으로 가장 간편해 보이는 게 7z을 사용하는 것이다.
7za a -mx=0 압축명.7z 압축대상
-mx=9
로 하면 압축률을 최대로 설정한다.
gzip 원본 파일 유지하면서 압축하기
gzip -c 파일명.txt > 파일명.txt.gz
mysql process 보기
쉘의 mysql client에서 다음 명령을 치면 된다.
SHOW PROCESSLIST;
다음은 더 상세한 내역을 보여 준다.
SHOW FULL PROCESSLIST\G
맨 뒤에 ;
를 붙이지 않아도 된다. \G
를 반드시 붙여야 하고 \g
는 안 된다.
git log
에서 각 커밋당 수정한 파일 목록 보기
git log --name-only
git log --name-status
위는 이름만 보는 거, 아래는 이름과 A(추가), M(수정) 같은 플래그 같이 나오는 거.
git log 뭐 했는지만 볼 수 있게 뽑기
git log --pretty="format:%ad %s (%an)" --date=short --since=2014-05-01
큰 파일 쪼개고 합치기
쪼개기
split -b 1024m "YourFile.iso" "YourFile.iso.”
합치기
cat YourFile.iso.* > YourFile.iso
쉘에서 기본 브라우저 변경
sudo update-alternatives --config x-www-browser
파일명 일괄변경
i=0;for f in *.jpg;do i=$(expr $i + 1); mv "$f" left21_0126_$(printf %04d $i).jpg; done
mp4에서 오디오 추출
ffmpeg -i video.mp4 -vn -acodec copy audio.m4a
mp3 파일 합치기
ffmpeg -i "concat:input1.mp3|input2.mp3|input3.mp3" -acodec copy output.mp3
영상 용량 줄이기
ffmpeg -i input.mp4 -s 640x360 -vcodec libx265 -crf 28 output.mp4
-s
: 리사이즈-crf
: h264 인코딩시 품질 지수. 높을수록 저품질. 참고: https://trac.ffmpeg.org/wiki/Encode/H.264#crf
이미지와 음원 합쳐서 영상 만들기
ffmpeg -r 1 -loop 1 -i "image.jpg" -i "audio.mp3" -acodec copy -r 1 -shortest -vf scale=1280:720 "video.mp4"
영상의 특정 부분 자르기
ffmpeg -i input.mp4 -ss 11:40 -to 23:21 -c copy output.mp4
-ss
: 시작 시분초(00:00:00 형식)-to
: 종료 시분초(00:00:00 형식)
디렉토리에 있는 모든 파일 확장자 한 번에 변경
이건 긁어다 쓰라고 적어 둔 건 아니고, 쉘 스크립트 짤 때 참고하라고.
for f in $(ls); do extension="${f##*.}"; filename="${f%.*}"; mv "$f" "$filename.txt"; done
설치한 RPM 패키지 파일들 보기
rpm -ql 패키지명
혹은
rpm --query --list 패키지명
pdftk로 모든 페이지 -90도 회전
pdftk A=asdf.pdf cat A1-endwest output a.pdf
cat
은 catenates의 약어다. asdf.pdf
를 A
라는 변수에 할당하고, cat
이라는 operation에서 A
의 1-end
를 west
로 돌리라고 명령을 내린 것이다. 그리고 output
뒤에 출력 파일명을 적어 준 거고.
pdftk로 pdf 합치기
pdftk file1.pdf file2.pdf file3.pdf cat output newfile.pdf
pdftk *.pdf cat output newfile.pdf
뭐 추가로 설명할 건 없다. ‘How to Combine Multiple PDF Files With pdftk’에서 가져온 명령어다.
imagemagick으로 스크린 캡쳐
일단 imagemagick(오타 아님. ick 맞음)이 설치돼 있어야 한다.
import -screen root screen.png
root
는 스크린 이름을 뜻하는 것 같다. 복잡한 작업을 하는 사람이라면 자기의 스크린 이름을 알 테고, 그런 거 없으면 그냥 root
인 것 같으니 root
라고 적자.
이러면 우선 마우스 커서가 십자 모양으로 변한다. 캡쳐 기회가 두 번 주어진다. 윈도우를 클릭하면 해당 윈도우만 캡쳐된다.
두 번 클릭하면 십자모양 커서가 풀리고 홈 폴더에 가 보면 screen-0.png
, screen-1.png
이렇게 파일이 두 개 생겨 있다.
시스템 언어 설정 변경(데비안 계열 리눅스)
dpkg-reconfigure locales
시작 서비스 프로그램 켜고 끄는 프로그램(데비안 계열 리눅스)
rcconf
프롬프트에 배터리 정보와 날짜 표시해 주기(데비안 계열 리눅스)
PS1="${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\] - \e[32m\$(acpi)\e[m | \e[32m\$(date +'%m-%d %R')\e[m
\[\033[01;33m\]\w\[\033[00m\]\$ "
트루크립트, 시스템 볼륨 마운트
truecrypt --mount /dev/sdb2 /mnt/truecrypt --filesystem=ntfs-3g -m system
마지막 -m system
옵션이 시스템 볼륨임을 알려 주는 옵션이다.
버추얼박스 커널 모듈 새로 컴파일
버추얼박스의 에러 메시지에선 /sbin/rcvboxdrv setup
하라고 나오는데 그러면 Bad argument setup
이라고 에러 난다.
아래 명령어가 제대로 작동한다(출처).
/usr/lib/virtualbox/vboxdrv.sh setup
특정 파일들의 용량 합산
중복 파일 찾기
fdupes
는 파일 사이즈와 md5 hash를 기반으로 중복 파일을 찾아 준다. 아래는 하위 폴더를 순환하며 중복 파일을 찾는 명령어.
fdupes -r .
아래는 하위 폴더를 순환하며 찾은 뒤, 중복된 파일들 중 맨 처음에 찾은 것만 남기고 나머지를 삭제하는 명령어.
fdupes -dN -r .
아래는 중복된 것들 중 무엇을 남길지 묻게 하는 명령어.
fdupes -d -r .
동적으로 JAVA_HOME 설정
vi /etc/profile.d/java_home.sh
로 편집 연 뒤, 아래 코드를 넣는다.
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac))))
재부팅하면 모든 사용자에게 JAVA_HOME
이 적용된다. 자세한 내용은 Setting JAVA_HOME
Dynamically on Linux 참고.
find해서 for문 돌릴 때 파일명에 공백 있으면 줄바꿈되는 문제 해결
find . -type f | while read f; do echo "---"; echo "$f"; done
youtube-dl 표지 이미지, 메타데이타 임포트해서 mp4로 다운로드
youtube-dl --add-metadata --embed-thumbnail -f mp4 -o "%(upload_date)s-%(title)s-%(display_id)s.%(ext)s" {URL}
youtube-dl 플레이리스트 mp3 다운로드
youtube-dl --add-metadata --embed-thumbnail --extract-audio --audio-format mp3 -o "%(title)s.%(ext)s" {url}
맥에서 “응용프로그램이 손상되었습니다” 하고 실행되지 않을 때 해결법
sudo xattr -cr /Application/Name.app