단축키&명령어
둘러보기로 이동
검색으로 이동
실제 사용
- ffmpeg의 활용
- 베이스
- ffmpeg -i (입력 동영상) (출력 동영상)
- 배속 조절 (2배)
- -filter:v "setpts=PTS/2"
- 범위(시작 시각, 길이)
- -ss 01:23:45.678 -t 01:23:45.678
- 인코딩 없이 자르기만 하기
- -vcodec copy -acodec copy
- 인코딩하기 (qscale은 화질. 숫자가 낮으면 좋다)
- -vcodec mpeg4 -acodec libmp3lame -qscale 1
- 베이스
- ffmpeg에서 사진 모음을 영상으로 만들기
- ffmpeg -r 10 -pattern_type glob -i 'bvp_x_y_*.png' -vf fps=60,scale=1280:-2 -pix_fmt yuv420p result.mp4
- r은 초당 몇 개를 보여줄 것인가
- pattern_type glob -i 는 입력 파일 패턴
- fps는 fps
- scale은 1280으로 만들고, 다음이 -1이면 세로 자동 결정, -2면 세로를 짝수로 만들어 줌
- pdf 관련
- 잘라내기
- pdfcrop --margin '5 5 5 5' 원본파일.pdf 결과파일.pdf
- 페이지 한 개만 따기
- gs -dNOPAUSE -dQUIET -dBATCH -dFirstPage=1 -dLastPage=1 -sDEVICE=pdfwrite -sOutputFile=결과파일.pdf 원본파일.pdf
- 압축하기 최고화질
- gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf
- 압축하기 중간화질 (사진들 개판됨)
- gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf
- 압축하기 최저화질
- gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/display -dNOPAUSE -dQUIET -dBATCH -sOutputFile=결과파일.pdf 원본파일.pdf
- 잘라내기
- 우분투 화면 회전
- 쉬운 방법
- xrandr -o normal
- xrandr -o left
- 화면 선택 회전
- xrandr -q
- xrandr --output HDMI1 --rotate normal
- xrandr --output HDMI1 --rotate left
- 쉬운 방법
- 압축 파일 한글 인코딩 깨질때
- unzip -O cp949 xxxx.zip
- 압축하기/압축풀기
- 압축: tar -zcvf data.tar.gz ./data
- 풀기: tar -xvf data.tar.gz ./data
- 압축 멀티 코어로 하기 (-z 플래그가 아닌 아예 다른 압축 프로그램을 쓴다)
- apt install pbzip2
- 압축: tar --use-compress-prog=pbzip2 -cvf data.tar.bz2 ./data
- 풀기: tar --use-compress-prog=pbzip2 -xvf data.tar.bz2 ./data
- 무식한 dmesg tail
- while true;do sudo dmesg -c;done
- 액세스 로그 보기
- 앞에서부터 180바이트 자르고, %형 유니코드 디코드 후 표현 -> IP 주소 및 요청 API 확인
- 뒤에서부터 150바이트 표현 -> 접속 디바이스 정보 확인
tail -f access.log.1 | php -R '$len = strlen($argn); $ret = substr($argn, 0, 180); $ret2 = substr($argn, $len-150, $len); echo urldecode($ret)."\n"; echo "==============================$ret2"."\n\n";'
- 키보드 키 반복 입력 안 될 때
- xset r on
- 마우스 휠 스크롤이 화면 스크롤이 아니라 과거 이력이 나올 때
- tput reset
- zsh 기존 명령어 검색
- Ctrl+R
- !?검색어?
- zsh: no matches found: ~~ 뜨면서, 정규표현식이 명령어 안에 있는게 실행 안 될 때
- setopt NO_NOMATCH
- gnome shell 이상할 때
- alt+f2 하고 r 엔터
- alt+f2 안먹히면 쉘 열어서 nohup gnome-shell --replace > /dev/null 2>&1 &
- killall -3 gnome-shell 도 된다고 함
- 이거 하는 순간 gnome-session-failed 나올 것임..
- gnome-session-failed의 Log out 버튼 누르면 로그아웃됨. 그러나 byobu 세션은 남아있음.
- CPU 클럭, 온도
- watch -n.5 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
- watch -n.5 "sensors | grep -i Package"
- 파일 폴더 용량 확인 (크기, 사이즈)
- du
- du -h -d=1 (사람이 읽을 수 있게, 깊이 1까지만 리스트)
- du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)
- du -h -d=1 -a (사람이 읽을 수 있게, 깊이 1까지만 리스트, 파일까지 정보 표시)
- du | sort -hr (정렬)
- 그냥 돌리던거 screen에서 돌리기
- 먼저 screen 띄운다
- echo 0 > /proc/sys/kernel/yama/ptrace_scope
- reptyr (대상 프로그램 pid)
- 파일 인코딩 일괄 바꾸기
find . -type f -iname '*.cpp' -exec sh -c 'iconv -f SHIFT_JIS -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;
소유권 변경
- 소유자와 그룹 모두 변경(재귀적으로)
- chown -R kdm:kdm [폴더]
- 폴더 파일별 권한 다르게 주고 일괄적으로 소유자까지 바꾸기
#!/bin/bash
path='/home/kdm/'
user='kdm'
group='kdm'
#rw-rw-r--
find ${path}/ -type f -print0 | xargs -0 chmod 0664
#rwxrwxr-x
find ${path}/ -type d -print0 | xargs -0 chmod 0775
chown -R ${user}:${group} ${path}/
- 그냥 다 777 주기 (현재 폴더와 하위 폴더까지)
find . -type f -exec chmod 777 {} \;
find . -type d -exec chmod 777 {} \;
- 현재 버전 확인
- cat /etc/issue
- lsb_release -a
- mysql 관련
- 접속
- mysql -h localhost -u myname -pmypass mydb
- sql 로그 보기(위험!)
- SHOW VARIABLES LIKE "general_log%";
- SET GLOBAL general_log = 'ON';
- SET GLOBAL general_log = 'OFF';
- 접속
폴더 삭제
- 항상 safe-rm 사용하기
- 정상적인 방법
- rm -rf [폴더 이름]
- 약간 위험한 방법
- 폴더 안으로 들어가서 rm -rf ./*
절대 금지
- rm -rf /
- rm -rf /* preserve도 못 막음!!!!!!!
하드 복구 관련
ddrescue --no-split /dev/hda1 imagefile logfile
ddrescue --direct --max-retries=3 /dev/hda1 imagefile logfile
ddrescue --direct --retrim --max-retries=3 /dev/hda1 imagefile logfile
세팅용
- 시작 프로그램 설정
- gnome-session-properties
- 시스템 스왑 사용량 조절 (http://askubuntu.com/questions/103915/how-do-i-configure-swappiness)
- 확인: cat /proc/sys/vm/swappiness
- 바꾸기: /etc/sysctl.conf 에 vm.swappiness = 10 수정 또는 추가
- 이렇게도 바꿀 수 있음: sysctl vm.swappiness=10
- 재부팅 안하고 스왑 비우기: swapoff -a
- 다시 스왑 켜기: swapon -a
- 기본 프로그램 설정은 이렇게
sudo apt-get install exo-utils
exo-preferred-applications
ISCSI 관련
딱 접속할 노드만 접속하고, 재부팅해도 접속되는 방법
- 기존 설정 제거
- cd /etc/iscsi rm -rf /etc/iscsi/nodes/* rm -rf /etc/iscsi/send_targets/*
- 서비스 중단
- service open-iscsi stop systemctl stop iscsi.service systemctl stop iscsid.socket
- 노드 생성 및 자동 접속 설정
- iscsiadm \ --mode node \ --target "iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa" \ --portal [타겟 ip 주소] \ --op new
- iscsiadm \ --mode node \ --target "iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa" \ --portal [타겟 ip 주소] \ --op update \ -n node.startup \ -v automatic
- 서비스 재시작
- systemctl restart iscsi.service
- service open-iscsi status
- 붙었는지 확인하기
- iscsiadm -m session -P 3 | grep -i 'attached scsi'
- 붙은 하드 파티션 만들기
- mkfs.ext4 /dev/[방금 확인한 장치명]
- 부팅시 자동으로 붙게 하기
- mkdir /mnt/docker-test
- vi /etc/fstab
- /dev/[장치명] /mnt/docker-test ext4 _netdev 0 0
- mount -av
헷갈리는 것 (하면 안 됨)
- 디스커버리 하기
- iscsiadm -m discovery -t sendtargets -p [타겟 ip 주소]
- iscsiadm \ --mode discoverydb \ --type sendtargets \ --portal [타겟 ip 주소] \ --op new
- 한 번 discovery 하는게 아니라 계속 반복해서 시도할 것인지
- iscsiadm \ --mode discoverydb \ --type sendtargets \ --portal "192.168.0.16" \ --op update \ -n discovery.sendtargets.use_discoveryd \ -v Yes
- 계속 시도하는거 몇 초에 한 번 씩 할 것인지
- iscsiadm \ --mode discoverydb \ --type sendtargets \ --portal "192.168.0.16" \ --op update \ -n discovery.sendtargets.discoveryd_poll_inval \ -v 30
- 로그인 하기. 근데 이건 한번만 접속하고 재부팅하면 접속 안 하는듯?
- iscsiadm -m node --targetname "iqn.2000-01.com.synology:fs5.docker-test.b59e2281aa -p [타겟 주소] -l
- 이거 하면 모든 discovery 된 node가 다 부팅시 연결됨
- 그리고 discovery 하고 아래 설정을 바꾸면 자동으로 모든 노드를 다시 연결하는게 하니라, 아래 설정 후 discovery 한 항목부터 자동 연결 설정이 적용됨
- 즉, 이미 discovery 된 node나 target은 해당 node나 target 안의 conf 파일 안의 node.startup 등을 바꿔줘야 하는 것
- vi /etc/iscsi/iscsid.conf
- node.startup = manual 에서 node.startup = automatic 으로
- node.leading_login = No 에서 node.leading_login = Yes 으로