$ ls
$ ls -al
: 감춰진 파일은 .이 붙는다. a 옵션을 사용하면 해당 파일을 확인할 수 있다.
$ ls -l
$ mkdir [디렉토리명]
$ mkdir -p [디렉토리명/디렉토리명/디렉토리명...]
: 여러 디렉토리 생성
$ cd [디렉토리명]
$ cd ..
: 부모 디렉토리로 이동
tip) 디렉토리명이 너무 길 때, 조금만 쓰고 tab키 누르면 자동완성
$ rm -r [디렉토리명]
: -r (remove directories and their contents recursively; 해당 디렉토리 아래 있는 내용들도 삭제한다.)
$ touch [파일명]
$ rm [파일명]
$ cp [파일위치 및 파일이름] [목적지 파일위치 및 파일 이름]
$ mv [파일위치 및 파일이름] [목적지 파일위치 및 파일 이름]
$ mv [원래 파일 이름] [바꾸고 싶은 파일 이름]
$ nano [파일명]
: 새 파일 작성 or 존재하는 파일 수정
$ cat [파일명]
$ locate *.log
: (확장자가 .log인 파일 찾기)
: 디렉토리를 뒤지는게 아니라 데이터베이스(mlocate)를 뒤져서 찾는다.
$ find . *.log
: 디렉토리 뒤짐
$ whereis ls
$ whereis rm
: 실행파일 위치 찾기
$ pwd
$ clear
$ [명령어] --help
$ man [명령어]
: /[찾고싶은단어] 사용해서 단어찾기 가능, 그 상태로 n을 누르면 다음 단어 찾기
$ apt-get update
$ apt-cache search [패키지명]
$ apt-get install [패키지명]
$ apt-get upgrade
$ apt-get upgrade [패키지명]
$ apt-get remove [패키지명]
$ wget -O [저장할 파일명] [다운로드 url]
$ apt-get install git
$ git clone [소스코드 url] [디렉토리명]
: 명시한 디렉토리에 소스코드 다운받는다.1. 순차적 실행 (using semicolon)
ex) $ mkdir why; cd why
2. 파이프라인
$ grep linux linux.txt
: 'linux'가 포함된 행 출력$ ls --help | grep sort
: ls --help에서 'sort'가 포함된 행을 출력 (ls --help의 출력을 grep의 입력으로)$ ls --help | grep sort | grep file
: ls --help에서 'sort'와 'file'이 포함된 행을 출력output
$ ls -l > result.txt
: result.txt 확인해보면 ls -l 출력물 담겨있음.
error (에러 결과를 저장하려면? '2>' 를 사용한다. (standard error를 가리킴))
ex) 해당 디렉토리에 rename2.txt가 없을 때
$ rm rename2.txt 2> error.log
: error.log에 에러 내용이 담겨있음.
input
$ cat hello.txt
: cat의 cammand-line arguments로써 역할
$ cat < hello.txt
: hello.txt 내용을 standard input으로..
$ head -n1 < linux.txt > one.txt
: linux.txt 내용을 input, one.txt에 출력물을 저장
$ ps
$ ps aux
$ ps aux | grep apache2
: 'ps aux'의 출력에서 apache2가 포함된 행 출력
$ kill [pid]
$ top
$ htop (top과 비슷하지만, 시각적인 면에서 더 좋음)
ex) nano 에디터 실행하다가 ctrl + z -> 백그라운드에서 돌아가도록 등록
$ jobs
: +가 붙어있는 프로그램 -> fg 실행했을 때, 실행되는 프로그램
: -가 붙어있는 프로그램 -> fg 실행했을 때, + 다음으로 실행될 프로그램
$ fg
$ fg %번호
: 해당 번호 프로그램으로 돌아간다.
$ kill
$ kill -9 %번호
: 강제종료
$ sudo apt-get install apache2
설치 후 /etc/init.d에 가보면 apache2가 있다.
$ sudo service apache2 start
$ ps aux | grep apache2
$ sudo service apache2 stop
$ ps aux | grep apache2
: 목록에 나타나지 않음.
$ crontab -e
: 처음 실행했을 땐, 에디터 골라야 함
m h dom mon dow command
m: 분 주기
ex) 10: 매 시간 10분에 한 번
ex) */1: 1분에 한 번
h: 시간 주기
ex) *: 시간에 상관 없이
ex) 1: 매 1시에
dom: day of month
ex) 24: 매 달 24일에 한 번
mon: month
dow: day of week (요일)
command: 주기적으로 실행할 명령어
테스트
1. command 자리에 date >> date.log
입력 (>>는 해당 파일 아래로 쭉 출력결과가 쌓임)
2. $ tail -f date.log
(꼬리에 새로운 텍스트가 추가 될 때, 실시간으로 표시해줌.)
에러가 난 경우도 로그로 남기는게 좋다.
*/1 * * * * date >> date.log 2>&1
: 표준 출력을 date.log에 남기고 표준 에러가 발생하면 표준 출력으로 리다이렉션
: date.log에 에러도 함께 저장됨
$ alias l='ls -al'
-> l을 입력하면 ls -al의 출력이 나옴
bash가 시작되었을 때 실행됨.
$ id
: 현재 접속한 계정의 정보 확인
$ who
: 이 컴퓨터에 누가 접속해있는가
~$로 끝나면 일반 사용자
~#로 끝나면 root 사용자
$ sudo useradd -m [사용자명]
-> /home에 가보면 사용자가 추가된 걸 볼 수 있음.
-> 그러나, 이렇게 만들면 해당 계정에서 sudo 명령어를 사용할 수 없음.
$ sudo usermod -a -G sudo [사용자명]
$ sudo passwd [사용자명]
$ su - [사용자명]
$ ls -l
-> -rw-rw-r-- 1 egoing egoing 0 Dec 4 23:19 perm.txt
(1) type | (2) access mode (r: read, w: write, x: execute) | (3) owner | (4) group | ||
---|---|---|---|---|---|
-
file: -, directory: d
|
[owenr 권한]rw- |
[group의 권한]rw- |
[other의 권한 (!owner && !group)]r-- |
egoing | egoing |
u: owner
g: group
o: other (not owner, not group)
a: all
$ chmod o-r perm.txt
: perm.txt파일의 other read 권한 삭제
$ chmod o+r perm.txt
: perm.txt파일의 other read 권한 허가
$ nano hi-machine.sh
#!/bin/bash
echo 'hi hi hi hi'
파일 실행 시도 1
$ ./hi-machine.sh
-> 허가 거부 뜸
파일 실행 시도 2
$ /bin/bash hi-machine.sh
-> 실행됨
owner 실행 권한 추가하기
$ chmod u+x hi-mashine.sh
-> 해당 파일 초록색으로 표시됨
파일 실행 시도 3
$ ./hi-machine.sh
-> 실행됨
숫자 | 의미 | 영문으로 표현 |
---|---|---|
0 | none | --- |
1 | execute only | --x |
2 | write only | -w- |
3 | write and execute | -wx |
4 | read only | r-- |
5 | read and execute | r-x |
6 | read and write | rw- |
7 | read, write and execute | rwx |
ex) $ chmod 111 perm.txt
-> --x--x--x로 변경됨.
추가/삭제 개념이 아니라 아예 바뀌는 것
$ chmod a=r perm.txt
-> owner, group, other read만 가능
$ chmod a= perm.txt
-> owner, group, other 아무 권한 없음.
$ ip addr
: 컴퓨터 IP 확인 (private ip)
$ curl ipinfo.io/ip
: ipinfo.io/ip 입장에서 접속된 ip (public ip)
$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo service apache2 start
$ sudo service apache2 stop
$ sudo service apache2 restart
$ sudo apt-get install elinks
$ elinks http://10.0.2.15/
(컴퓨터 IP 입력) -> local 서버 접속
/etc/apache2 에 아파치 설정파일 있음. (apache2.conf)
웹서버가 어떤 storage에서 파일을 찾을 것인가는 설정파일에서 확인.
default는 /var/www/html 인데, 설정 바꿔서 변경시킬 수 있음.
이때 /var/www/html를 document root라고 부른다. (웹페이지를 찾는 최상위 디렉토리)
/etc/apache2/sites-enabled/000-default.conf 가보면 로그는 어디에 기록할지 명시해둔 부분이 있다. (/var/log/apache2)
access.log: 누군가가 웹서버에 접속할 때마다 기록이 남겨짐.
error.log: 에러 로그 확인 가능
실시간으로 확인하려면?
$ tail -f /var/log/apache2/access.log
$ ssh 계정명@접속아이피
$ ssh -p 포트번호 계정명@접속아이피
접속을 시도하는 컴퓨터: 내 컴퓨터
접속 대상이 되는 컴퓨터: 원격 컴퓨터
원격 컴퓨터에 내 컴퓨터의 공개키를 저장해두면, 원격 컴퓨터에 로그인 없이 (비밀번호 입력없이/인증 없이) 로그인 가능
어떤 컴퓨터가 인증된 컴퓨터?
원격 컴퓨터의 ~/.ssh/authorized_keys 파일에 들어있는 키 목록을 보고 판단한다. (authorized_keys 파일은 있을 수도 있고 없을 수도 있음.)
원격 컴퓨터에 내 컴퓨터를 인증시키는 방법
ssh 공개키 비밀키 만들기 [내 컴퓨터에서 실행]
$ ssh-keygen
Q. Enter file in which to save the key?
: (저장되는 위치) 엔터
Q. Enter passphrase
: 비밀번호 쓰려면 입력하고 아니면 그냥 엔터
~/.ssh 들어가보면 id_rsa(ssh private key), id_rsa.pub(ssh public key)가 있음. (id_rsa는 절대로 비공개)
authorized_keys 파일 끝에다가 내 컴퓨터의 id_rsa.pub 내용을 붙여넣는다. (ssh-copy-id 명령어를 사용하여 안전하게 붙여넣자.) [내 컴퓨터에서 실행]
-> $ ssh-copy-id (원격 컴퓨터 계정)@(원격 컴퓨터 주소)
-> 원격 컴퓨터의 비밀번호 입력
잘 붙여넣어졌는지 확인 [원격 컴퓨터에서 실행]
$ cat ~/.ssh/authorized_keys
로그인 없이 로그인 시도 [내 컴퓨터에서 실행]
$ ssh (원격 컴퓨터 계정)@(원격 컴퓨터 주소)
-> 비밀번호 입력 없이 로그인 가능
default port (기본적으로 쓰도록 약속)
ex) 웹서버는 80, ssh 서버는 22
127.0.0.1 google.com
추가하고 브라우저에 google.com 이라고 입력했을 때, 127.0.0.1 웹서버와 매칭됨.$ host [도메인]
-> 호스트 정보 나옴 (어떤 아이피로 연결되어 있는지)admin.egoing.ga
, blog.egoing.ga
, news.egoing.ga
$ mkdir src
$ mkdir dest
src 디렉토리안에 파일 생성
$ touch test{1..10}
: test1~test10까지 생성됨.
$ rsync -a src/ dest
-> src 아래 있는 파일들이 dest 폴더안으로 복사된다.
(a 옵션 : 아카이브 모드로 동작. 파일 뿐만 아니라 디렉토리도 복사되고, 권한과 같은 파일/디렉토리 속성이 바뀌면 반영되고, 변경사항들만 전송)
dest 폴더 가서 test10 삭제
$ rm test10
$ rsync -av(더 자세하게 출력) src/ dest
실행 -> dest안에 있던 test10 다시 생김.
src 폴더 가서 추가 파일 생성 후, rsync 해보면 src에서 만든 파일 만이 dest 안에 생성된다.
$ rsync -azP ~/rsync/src/ k8805@대상아이피:~/rsync/dest
az: 압축한다.
P: 전송되는 상황을 progress bar로 보여준다.
어떤 정보를 암호화/복호화 할 때 키를 사용하는데, 암호화 했을 때와 복호화 했을 때 같은 키를 사용한다면 대칭적인방식
감사합니다 :)