생활코딩 리눅스강의를 듣고 정리합니다.
-
(dash)가 한개, 풀네임을 쓸때는 -
가 2개(--
) 붙는다.rm -a
/ rm --all
.
이 있다면 숨겨진 파일을 의미한다.ls --help
ls -l dir1
man ls
n
입력q
mkdir -p
: 하위 폴더를 여러개 만들어야할 때(=>필요하면 parent 폴더를 만들어야할 때) 사용cp [복사할파일명] [복사할위치]
nano
만 입력하면 새 파일을 작성할 수 있다. ^
은 Ctrl key를 의미한다.nano 파일명
을 입력하면 기존의 파일을 수정하거나 파일명을 정하여 새 파일을 작성한다.sudo apt-get update;
: 프로그램들의 최신 목록들을 가져옴sudo apt-get search htop
: htop이름을 포함한 모든 프로그램의 리스트를 보여줌sudo apt-get install htop
: htop 설치sudo apt-get upgrade htop
: 가장 최신 버전으로 업그레이드sudo apt-get remove htop
: htop 삭제wget URL
: url로 해당 파일 다운로드wget -O filename URL
: 다운로드시 파일 이름을 설정git clone
: 오픈 소스의 모든 것을(히스토리까지) 다운로드함git clone https://github.com/facebook/react.git react_src
cat test.txt
mkdir why; cd why
;
를 넣어줘야 한다.ls --help | grep sort
--help
로 얻은 결과를 grep
에 입력하여 sort를 포함한 행을 불러온다.만약에 어떤 결과를 바로 커맨드 창에 출력하는 것이 아니라 파일로 저장하고 싶다면 ls -a > result.txt
를 사용하면 된다. 이와 같이 >
를 이용하여 output의 흐름을 바꾸는 것(redirection)이 가능하다.
또한 output은 보통 Standard Output(명령이 성공했을때), Standard Error(에러가 발생했을때) 둘로 나뉘는데 default는 1>
이고 명령 수행 후 나타나는 결과만을 의미한다.
만약 에러가 발생했고 그 에러를 따로 파일로 저장하고 싶다면 2>
를 사용해야한다. 없는 파일을 삭제하려고 할때 에러가 발생하는데 이 에러의 내용을 파일로 따로 저장한다고 하면 rm [file-name] 2> error.log
이다.
또한 성공하면 result.txt
에 저장하고 에러가 발생하면 별도의 파일인 error.log
에 기록하고 싶다면 rm [file-name] 1> result.txt 2> error.log
를 실행하면 된다.
Standard Input을 redirction할 때는 <
가 사용된다. 하지만 보통 command line argument를 직접 사용하는 것과 큰 차이가 없다.
쉘 명령어들이 실행되어야 하는 순서를 각본처럼 짜서 저장해 둔 파일. 자주 쓰는 명령들을 자동화 할 수 있다.
/
: 최상위 디렉토리, root/bin
: 실행가능한 프로그램(Binaries), 사용자들이 사용하는 명령어/sbin
: System Binaries/etc
: Configuration Files. 설정을 변경하고자 할 때 여기에 있는 파일의 내용을 변경한다./dev
: Device Files/proc
: Process Information/var
: Variable Files, 내용이 변하는 파일들(i.e. log files)/tep
: 재부팅하면 내용이 사라지는 임시 저장 파일들/usr
: User Programs/home
: 유저의 personal files를 저장하기 위한 디렉토리. Username으로 된 하위 디렉토리가 존재한다. cd ~
을 사용하면 된다.CPU의 처리속도가 빠르기 때문에 Storage의 속도가 따라잡을 수 없다. 그렇기 때문에 CPU에서 처리할 것들은 Memeory에 있어야 한다.
즉, 커맨드들은 컴퓨터상에서 Storage에 프로그램으로 저장되어있다. 그 프로그램을 실행하면 Memory에 적재되고, Processor에서 처리되는 상태에 있는(실행되고 있는) 프로그램을 Process라고 한다.
ps
, ps aux
(현재 실행되고있는 모든 프로세스들을 나타냄), top
, htop
locate
locate *.log
find
보다 빠르지만 현재의 정보를 가져오진 않는다.find
find ~ -name *.log
whereis
$PATH
ls
)가 존재하지 않음에도 불구하고 그냥 ls
만 쳤을때 수행될 수 있는 것은 $PATH
때문이다.$PATH
에는 여러 경로들이 저장되어 있는데, 만약 어떤 명령을 실행하면 이 경로들을 검색하여 해당 프로그램이 존재하는지 확인하고 발견하면 실행시킨다.프로그램을 실행하다가 완전 나가는 것이 아니라 백그라운드에 실행되도록 하고 싶으면 Ctrl+Z
를 누르면 된다.
jobs
: 백그라운드에 실행되는 프로그램들의 목록을 나타냄+
표시는 fg
실행시에 바로 나타나는 프로그램 앞에 붙는다.-
표시는 +
다음으로 실행될 프로그램을 의미+
가 아닌 다른 프로그램을 실행하고 싶다면 %[index]
로 나타낸다.(i.e. kill -9 %4
)fg
: 백그라운드에 있는 프로그램을 다시 foreground로 불러옴&
표시이제까지 살펴보았던 프로그램들(ls, mkdir 등)은 필요할 때마다 실행시키는 프로그램들이었지만 deamon은 항상 켜져있어야하는 프로그램이다. 예를 들어 web server는 web client가 언제 요청을 보낼지 알 수 없기 때문에 항상 실행되고 있어야 한다.
Deamon들을 시작하거나 중지하고 싶을때 사용하는 커맨드이다. /etc/init.d
에 deamon 프로그램들이 존재하는데 여기서 sudo service [프로그램명] start
또는 sudo service [프로그램명] stop
을 하면 된다.
정기적으로 메일을 보내거나, 백업을 하는등의 일을 해야할 때 사용한다.
crontab -e
로 작성할 수 있다.*
을 입력하면 아무 설정도 하지 않는 것이고, 만약 minute부분에 1/*
을 썼다면 1분에 한번을 의미한다. */1 * * * * date >> date.log 2>&1
>>
표시는 새로운 내용을 이전 내용에 이어서 작성한다는 의미이며, 2>&1
은 에러가 발생했을시 이 내용을 date.log에 기록한다는 의미이다.tail -f [파일명]
는 새로 기록되는 내용을 실시간으로 보여준다.어떤 웹페이지에서 사용자가 10만통의 메일을 보낸다고 했을 때 사용자는 모든 메일이 전송될 때까지 화면 앞에서 기다릴 필요가 없다. 화면에 SAVED라는 알림을 보낸 후 웹 서버에서 cron이 정기적으로 SAVED된 작업들을 백그라운드에서 처리한다.
쉘이 시작될 때 어떤 명령을 수행하도록 설정한다.(bash를 사용할때)
nano .bashrc
에서 bash를 시작할 때마다 수행하고 싶은 커맨드를 작성해준다.단축키를 생성한다.
alias c='clear'
이면 c만 입력하기만 하면 clear
를 수행한다.유닉스 계열 운영체제는 여러 명이 함께 사용할 수 있는 기능을 가지고 있다. 하지만 배우기 어렵고 보안의 문제가 발생할 수 있다.
id
: 나는 누구인가?who
: 이 시스템에 누가 접속해 있는가?일반 사용자로 활동하면서 sudo
를 사용해서 강력한 명령을 수행할 수 있지만 super(root) user로 로그인 하고자 할때(ubuntu 환경)
sudo passwd -u root
: 여기서 u는 unlocksu -root
--> super user로 로그인하면 $이 #으로 바뀐다. sudo passwd -l root
: 다시 super user 사용을 잠그기(lock)super user로 로그인하면 홈 디렉토리는 /root
이고 일반 사용자로 로그인하면 홈 디렉토리는 home/[username]
이다.
sudo useradd -m [username]
sudo passwd [username]
: 비밀번호 설정sudo usermod -a -G sudo [username]
: super user 권한을 가질 수 있도록 설정su - [username]
: 해당 유저로 로그인권한이란 사용자가 파일이나 디렉토리를 Read, Write, Execute 할 수 있는가에 대한 것이다.
만약 사용자1이 생성한 파일(i.e. perm.txt)을 사용자2가 echo 'hi' > perm.txt
로 write하려고 한다면 permission denied될 것이다. 왜냐햐면 해당 파일의 소유권은 사용자1에게 있기 때문이다.
ls -l perm.txt
Change access mode를 의미한다.
chmod o-r perm.txt
chmod o+r perm.txt
chmod u-w perm.txt
파일을 우리가 사용하는 커맨드처럼 바로 실행할 수 있도록 하려면 execute 설정을 해주어야 한다.
만약 hi-machine.sh
파일을 다음과 같이 작성하였다고 하자.
#!/bin/bash
echo `hi hi hi hi`
이것을 실행하기 위해서는 bin/bash hi-machine.sh
라고 써야한다. 이것을 바로 ./hi-machine.sh
처럼 실행하기 위해서는 다음과 같은 설정이 필요하다.
chmod u+x hi-machine.sh
디렉토리에서 r는 해당 디렉토리에 있는 것들을 읽는 권한이고 w는 해당 디렉토리에서 파일을 생성, 삭제, 수정 할 수 있는 권한이다. e는 cd
를 통해 해당 디렉토리에 접근할 수 있는 권한이다.
또한 디렉토리 내에 하위 디렉토리가 여러개 존재하고 그 디렉토리들 모두 권한을 설정하고 싶을 때는 R
(Recursive)를 사용한다. ==> i.e. chmod -R o+w perm
(서버 부분은 추후에 강의를 들을 예정입니다.)
커맨드 창에서 ip addr
를 치면 나오는 ip와 curl ipinfo.io/ip
를 쳤을때 나오는 ip가 같을 수도 있고 다를 수도 있다. 그 이유는 각 가전제품(pc, desktop, TV, phone 등)을 사용하기 위해서 통신사와 연결했을때 통신사에서 제공하는 ip(public address)가 있다. 이 ip는 하나의 pc에 직접 연결되었을때는 그 pc의 ip가 될 수 있지만 만약 router(공유기)를 통해 다른 기기들과 연결된 상태라면 router에 통신사가 제공한 ip가 부여된다. 그리고 그 공유기를 함께 사용하고 있는 다른 기기들에는 각각 다른 ip(private address)들이 제공된다.