단축키&명령어

DM wiki
둘러보기로 이동 검색으로 이동

실제 사용

  • 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 으로