키보드
| 키 | 동작 |
Tab | 명령, 파일 이름 자동 완성. 두 번 누르면 후보 목록 |
↑ / ↓ | 이전 / 다음 명령 |
Ctrl-C | 실행 중인 명령 중단 |
Ctrl-D | 입력 끝. 빈 프롬프트에서는 셸 종료(ssh 접속이면 로그아웃) |
Ctrl-Z | 실행 중인 명령 일시 정지. fg로 다시, bg로 백그라운드에서 계속 |
Ctrl-R | 명령 기록 검색. 다시 누르면 더 이전 것 |
Ctrl-L | 화면 지우기 (clear) |
Ctrl-A / Ctrl-E | 줄 맨 앞 / 맨 뒤로 |
Ctrl-U | 커서 앞 내용 지우기 |
!! | 직전 명령 다시. sudo !! |
!$ | 직전 명령의 마지막 인자 |
history | 명령 기록 목록. !번호로 다시 실행 |
이동과 파일
| 명령 | 동작 |
pwd | 현재 디렉터리 |
ls -lh | 자세히, 크기는 읽기 쉽게. -a는 숨김 파일까지, -t는 수정 시각 순 |
cd 경로 | 이동. cd만 치면 홈, cd ..는 위로, cd -는 직전 위치 |
mkdir -p a/b/c | 중간 디렉터리까지 한 번에 만들기 |
cp a b, cp -r dir1 dir2 | 복사. 디렉터리는 -r |
mv a b | 이동, 이름 바꾸기 |
rm 파일, rm -r dir | 삭제. 휴지통이 없다 |
*.out, h2o_?.xyz | 와일드카드. *는 아무 글자나 여러 개, ?는 한 글자 |
find . -name '*.out' | 하위 디렉터리까지 이름으로 찾기 |
du -sh * | 항목별 용량 |
df -h | 파일 시스템별 크기와 여유 |
tar czf a.tar.gz dir / tar xzf a.tar.gz | 묶고 압축 / 풀기. tar tzf는 목록 |
보기와 찾기
| 명령 | 동작 |
less h2o.out | 한 화면씩 보기. /단어 검색, n 다음, G 끝, q 나가기 |
head -n 20 / tail -n 20 | 앞 / 뒤 20줄 |
tail -f h2o.out | 늘어나는 출력 따라 보기. Ctrl-C로 멈춤 |
grep 'FINAL SINGLE POINT' *.out | 패턴이 든 줄 찾기. -n 줄 번호, -i 대소문자 무시, -r 하위 디렉터리, -c 개수 |
wc -l | 줄 수 |
cmd | less | 출력을 다음 명령으로 넘기기(파이프) |
cmd > f, cmd >> f | 출력을 파일로(덮어쓰기 / 덧붙이기) |
cmd 2>&1 | 오류 출력도 같은 곳으로 |
nano f | 편집. Ctrl-O 저장, Ctrl-X 종료 |
vim f | 편집. i 입력, Esc 후 :wq 저장하고 종료, :q! 저장 안 하고 종료 |
권한
| 명령 | 동작 |
ls -l | -rwxr-xr--: 소유자 / 그룹 / 나머지의 읽기·쓰기·실행 |
chmod +x run.sh | 실행 권한 주기 |
chmod 600 f | 나만 읽고 쓰기 (개인 키, ~/.ssh/config) |
chmod 700 dir | 나만 접근 (~/.ssh) |
chmod -R g+r dir | 그룹에 읽기 권한을 하위까지 |
프로세스와 환경
| 명령 | 동작 |
top, htop | 실행 중인 프로세스, CPU와 메모리. q로 나가기 |
ps ux | 내 프로세스 목록 |
kill PID, kill -9 PID | 종료 요청 / 강제 종료 |
cmd & | 백그라운드 실행. jobs로 목록 |
nohup cmd > log 2>&1 & | 로그아웃해도 계속 실행 |
echo $PATH | 변수 값 보기 |
export OMP_NUM_THREADS=4 | 환경 변수 설정 (현재 셸과 그 자식 프로세스) |
which orca | 명령이 어느 파일인지 |
source ~/.bashrc | 설정 파일 다시 읽기 |
ssh와 전송
| 명령 | 동작 |
ssh user@host, ssh vanda | 접속 (별명은 ~/.ssh/config) |
ssh-keygen -t ed25519 | 키 쌍 만들기 |
ssh-copy-id vanda | 공개 키를 서버에 등록 |
ssh-add, ssh-add -l | agent에 키 넣기 / 목록 |
ssh-keygen -R host | known_hosts에서 옛 호스트 키 지우기 |
ssh -v vanda | 접속 과정 자세히(문제 진단) |
scp f vanda:~/dir/ | 올리기 |
scp vanda:~/dir/f . | 받기. 디렉터리는 -r |
rsync -avhP src/ dst/ | 바뀐 것만 동기화. 원본 끝 /는 "내용물" |
rsync -n ... | dry-run. 무엇을 옮길지만 보기 |
--include='*/' --include='*.out' --exclude='*' | 특정 확장자만 |
--exclude='*.gbw' | 특정 파일 빼기 |
tmux
| 명령 / 키 | 동작 |
tmux new -s NAME | 새 세션 |
tmux ls | 세션 목록 |
tmux attach -t NAME | 다시 붙기 |
tmux kill-session -t NAME | 세션 끝내기 |
Ctrl-b d | 떼기 |
Ctrl-b c / n / p | 새 창 / 다음 / 이전 |
Ctrl-b % / " | 좌우 / 위아래로 나누기 |
Ctrl-b 방향키 | 칸 이동 |
Ctrl-b z | 칸 확대 / 되돌리기 |
Ctrl-b [ | 스크롤(복사 모드). q로 나가기 |
PBS와 Slurm
| 할 일 | PBS Pro | Slurm |
| 모듈 | module avail · module load 이름 · module list · module purge |
| 제출 | qsub run.pbs | sbatch run.sh |
| 내 작업 | qstat -u $USER | squeue -u $USER |
| 자세히 | qstat -f ID | scontrol show job ID |
| 취소 | qdel ID | scancel ID |
| 대화형 | qsub -I -l select=1:ncpus=4 -l walltime=1:00:00 | srun --cpus-per-task=4 --time=1:00:00 --pty bash |
| 자원 | #PBS -l select=1:ncpus=8:mem=16gb | #SBATCH --ntasks=8 --mem=16G |
| 시간 | #PBS -l walltime=02:00:00 | #SBATCH --time=02:00:00 |
| 이름 | #PBS -N name | #SBATCH --job-name=name |
| 제출 디렉터리 | cd $PBS_O_WORKDIR | $SLURM_SUBMIT_DIR (기본으로 거기서 시작) |
| 출력 파일 | name.o<ID> | slurm-<ID>.out |
스크립트 문법은 셸 스크립팅 치트시트에 따로 정리했다.