ls
현재 디렉토리의 파일 목록을 출력하는 명령어
ls
ls -l
은 자세히 보기(-
은 파라미터(parameter)라는 의미)
pwd
현재 위치하고 있는 디렉토리를 알려주는 명령어
mkdir
mkdir 새로 생성할 디렉토리명
cd
cd 이동할 디렉토리의 경로명
change directory
부모 디렉토리로 가는 방법 2가지
cd /home/sua
절대 경로cd ..
부모 디렉토리로 이동하는 명령. 참고로 현재 디렉토리는 .
상대 경로/
이다.)clear
화면을 깨끗이
rm 파일명
rm -r 디렉토리명
--help
명령어 뒤에 --help를 붙이면 명령의 사용설명서가 출력된다.
ls --help
rm --help
mkdir --help
pwd --help
man
man ls
man rm
특정 단어를 검색하고 싶을 때는 /
입력 후 원하는 단어 검색, 알파벳 N
으로 이동
Q
로 빠져나옴
help는 화면을 빠져나가지 않고 간단한 매뉴얼을 출력
man은 전용페이지로 이동해서 상세한 매뉴얼을 출력
사용설명서 보는 법
1) mkdir --help
mkdir -p dir1/dir2/dir3/dir4
부모 디렉토리를 생성하고 자식 디렉토리를 만든다.
mkdir -parents dir1/dir2/dir3/dir4
위와 같은 의미
2) ls --help
ls -a
모든 파일을 보여 준다. 숨김 파일은 앞에 .
이 붙는다.
ls -al
감춰진 파일을 보여주는 것(ls -a
)과 자세히 보여주는 것(ls -l
)을 함께 하고 싶을 경우, 많이 씀.
ls -S
대문자 구분, 파일 사이즈를 기준으로 sort, largest부터
cp cp.txt dir1/cp.txt
파일 복사하기mv mv.txt dir1/mv.txt
파일 이동하기mv rename.txt rename2.txt
파일 이름 바꾸기rm -rf /
루트 디렉토리에 있는 모든 파일을 삭제하라는 명령을 실수할 수 있음(절대 하면 안 됨)apt-get install git
하면 거부됨. sudo apt-get install git
라고 해야 함. 즉, 임시로 그 명령만 super user의 권한으로 실행하도록 하는 것이 sudo
파일에 정보를 추가하고 편집하는 방법으로서 nano 에디터를 사용하는 방법을 알아본다.
파일 = 정보를 저장하는 가장 기본적인 저장소
디렉토리 = 그 파일을 잘 보관하기 위한 수납함
파일에 정보를 저장하는 방법?
명령어 기반의 시스템에서도 메모장 같은 편집기가 있다. 초급은 nano, 중고급은 vi을 추천한다.
nano
입력ctrl + O
hello.html
엔터키ctrl + X
로 빠져나옴.nano hello.html
ctrl + K
Cut Text 잘라내기(한 줄 다)ctrl + U
Uncut Text 붙여넣기ctrl + 6
누르면 Mark Set이 된다.ctrl + W
apt로 설치할 수 있는 소프트웨어의 목록을 최신 상태로 업데이트
sudo apt-get update;
검색
sudo apt-cache search htop
htop과 관련된 패키지들의 목록을 보여줌
설치
sudo apt-get install htop
설치할 것인지 물어보면 y
입력
설치된 프로그램 업그레이드
sudo apt-get upgrade htop
삭제
sudo apt-get remove htop
명령어 기반의 시스템에서 파일을 다운로드 하는 방법을 소개한다.
wget 파일url
git은 버전 관리 시스템 중 하나
git을 통해 오픈소스 코드를 다운로드 하는 법
sudo apt-get install git
git clone https://github.com/facebook/react.git react_src
react_src
라는 디렉토리에 이 주소가 가리키는 오픈소스 프로젝트가 다운로드됨(오픈소스의 파일 뿐만 아니라 모든 변천사들을 다 복제)ls -l
로 확인cd react_src/
로 들어가서 ls -l
하면 모든 소스코드가 클론되어 있음왜 배우기 어려운 명령어(CLI)를 사용하는 것일까?
mkdir why
와 cd why
명령을 한 번에 mkdir why; cd why
로 실행할 수 있다.grep
이란?
원하는 정보가 들어있는 행을 찾는 명령어
grep linux linux.txt
linux.txt 파일에서 linux가 포함된 행만을 화면에 출력
파이프 라인
파이프( | )로 프로그램을 연결, 앞 프로그램의 출력을 뒷 프로그램의 입력으로 연결
예시1
ls --help | grep sort
--help로 출력된 내용을 (파이프로 연결해서) grep의 명령으로 입력한다. 그리고 grep은 sort를 포함한 행을 불러온다.
예시2
ps aux | grep apache
ps aux
로 컴퓨터에서 현재 실행되는 프로그램의 리스트를 확인 가능, 그 중 apache
라는 텍스트가 포함된 것들만 출력
ls -l
의 결과값을 파일로 저장하고 싶으면? ls -l > result.txt
(cat result.txt
로 저장되었는지 확인)
-> 원래 화면에 출력되는 것인데 파일에 저장되게 했음 = output의 출력의 방향을 바꿈, 리다이렉션
유닉스 계열의 시스템은 어떤 프로그램이 실행(process)될 때 출력 형식이 2가지이다.
Standard Output(성공)와 Standard Error(오류가 있을 때)
Standard Output
ls -l 1> result.txt
1
:Standard Output(생략 가능) / >
: Redirection
Standard Error
rm rename2.txt 2> error.log
2
: Standard Error / >
: Redirection
둘 다 적용
rm rename2.txt 1> result.txt 2> error.log
실행 결과에 따라 저장됨
프로그램? 프로세스?
프로그램은 컴퓨터에 저장되어 있는 코드, 그 프로그램이 실행되고 있는 상태를 프로세스
하나의 프로그램은 여러 개의 프로세스를 가질 수 있다.
예시1
cat hello.txt
cat
이라는 프로그램의 인자로 hello.txt
를 받은 것, Command-line Arguments
Standard Input
cat
명령, 사용자가 입력하는 정보를 Standard Input 받음
(ctrl + D
를 누르면 나옴)
리다이렉션
cat < hello.txt
cat
은 기본적으로 키보드의 입력값을 받지만 <
로 리다이렉션을 시켜주면 파일에 저장된 내용을 입력으로 받는다. 1번 방식처럼 그냥 인자로 받으면 되기 때문에 실용적이지 않다.
예시2
head linux.txt
10줄만 출력(기본)
head -n1 linux.txt
1줄만 출력(Command-line Arguments)
head -n1 < linux.txt
1줄만 출력(Standard Input, Redirection), <
있어도 결과는 같음
출력된 결과를 다시 텍스트에 저장
head -n1 < linux.txt > one.txt
linux.txt 파일의 첫 번째 행만 one.txt에 저장
>>
꺽쇠를 두 번 쓴다.ls -al >> result.txt
<<
은 여러 개의 입력을 합친다.ls -al > /dev/null
echo $0
로 어떤 쉘을 사용하고 있는지 확인nano backup
backup 이라는 이름의 프로그램을 만들 것 -> nano 안으로 들어감// nano에서 작성
#!/bin/bash` // 먼저 이 코드를 무조건 작성해준다. 밑에 작성된 코드가 /bin/bash를 통해 해석되어야 한다는 의미
if ! [ -d bak ]; then // 현재 디렉토리에 bak라는 디렉토리가 존재하지 않으면(!)
mkdir bak // bak 디렉토리를 만든다
fi // 조건문 종료
cp *.log bak // 현재 디렉토리의 log로 끝나는 파일을 bak 디렉토리로 저장한다
위 내용 저장 ctrl + X
yes
enter
./backup
하면 권한이 없다고 나옴
chmod +x backup
으로 실행가능한 모드 부여하고, 다시 ./backup
하면 실행됨!
/
: 최상위 디렉토리, root/bin
: User Binaries, 실행가능한 프로그램, 사용자들이 사용하는 명령들이 위치/sbin
: System Binaries, 컴퓨터를 끄거나 재부팅, 시스템 관리자가 사용하는 프로그램/etc
: Configuration Files, 어떤 프로그램의 동작하는 방법의 설정을 변경하고자 할 때 /dev
: Device Files/proc
: Process Information/var
: Variable Files, 내용이 변하는 파일들(ex. log files)/tep
: 재부팅하면 내용이 사라지는 임시 저장 파일들/usr
: User Programs/home
: 유저의 personal files를 저장하기 위한 디렉토리. Username으로 된 하위 디렉토리가 존재한다. 홈 디렉토리로 바로 이동하기 위해서는 cd ~
을 사용하면 된다./opt
: 어떤 프로그램을 설치할 때 자동으로 특정 디렉토리에 설치되는데, 수동으로 설정할 경우 opt에 설치하면 된다. storage에 깔려 있는 프로그램을 읽어서 memory에 적재, memory의 올라와 있는 프로그램을 cpu가 읽어서 동작
process란? 사용자가 입력하는 명령어(command ex. mkdir, top, rm)는 /bin, /sbin 등에 파일의 형태로 저장(storage), 이것이 바로 프로그램. 그 프로그램을 실행하면 memory에 적재. 그리고 processor에 의해 실행되고 있는 프로그램을 process라고 한다.
ps aux
프로세스 리스트를 보여주는 명령ps aux | grep apache
apache라는 텍스트를 포함하고 있는 텍스트만 출력sudo kill 22142
프로세스 강제로 종료, 22142는 원하는 프로세스 아이디 값으로 변경 가능sudo top
sudo htop
파일은 2가지 용도로 사용된다. 데이터를 보관하는 파일, 명령을 보관하는 실행파일
locate 파일이름
(mlocate 설치해야 함)sudo updatedb
현재 파일들의 정보를 저장하는 명령. 리눅스에서는 하루에 한 번 실행)locate *.log
find [시작 디렉토리] [어떤 파일인지]
sudo find / -name *.log
루트 디렉토리에서 시작해서 하위 디렉토리에서 찾겠다. 이름으로 찾겠다. .log로 끝나는 파일을 찾겠다.find ~ -name *.log
홈 디렉토리에서 찾겠다. sudo를 안 써도 된다.find . -type f -name tecmint.php
파일 확장자를 f(file)로 지정한다.whereis
실행파일을 찾아주는 명령어, 실행파일, 소스, 매뉴얼을 찾아준다.
$PATH
ls
등의 명령어가 존재하지 않음에도 불구하고 그냥 ls
만 쳤을때 수행될 수 있는 것은 $PATH
때문이다.PATH와 관련된 참고사이트
https://m.blog.naver.com/PostView.nhn?blogId=occidere&logNo=220821140420&proxyReferer=https:%2F%2Fwww.google.co.kr%2F
멀티태스킹을 리눅스에서도 할 수 있다.
ctrl + z
: 실행중인 프로그램을 백그라운드로 보내는 단축키. 이 기능을 실행하면 명령어가 일시 정지된다.
fg
: 작업하던 프로그램이 다시 켜진다.
fg %2
2번째 프로그램이 켜진다.
jobs
: 백그라운드 작업들의 목록을 보여준다.
kill
: 프로그램을 종료시킨다.
kill %4
일반적인 종료 kill -9 %4
강제종료
&가 명령어 뒤에 붙으면 명령어가 실행될 때 백그라운드로 실행된다.
ls -alR / > result.txt 2> error.log &
ls
, mkdir
, rm
는 필요할 때 키고 필요없을 때는 꺼져있는 프로그램이다. 반면, 데몬은 항상 켜져 있어야 하는 프로그램이다. web server
는 언제 web client
가 요청을 보낼 지 모르므로 항상 켜져 있어야 한다. sudo apt-get install apache2
apache라는 web server 설치
cd /etc/init.d
로 데몬 프로그램들을 확인 가능함
데몬 프로그램을 켜고 끄는 것은 service
라는 명령을 통해 수행
sudo service apache2 start
켜기 (ps aux | grep apache2
로 확인)
sudo service apache2 stop
끄기
추가 내용
만약 어떤 프로그램이 부팅될 때 자동으로 실행하고 싶으면 /etc/rc3.d
에 프로그램의 링크를 걸면 된다. (rc3.d
CLI로 구동하고 있을 경우, rc5.d
GUI로 구동하고 있을 경우) 이 때 이름이 S로 시작하면 시작, K로 시작하면 시작하지 않는다.
cron은 정기적으로 명령을 실행해야 할 경우에 사용한다. 정기적으로 메일을 보내거나 백업을 하는 등
crontab -e
로 에디터 입장
minute / hour / day of month / month / day of week / command 순서로 입력한다.
ex) */1 * * * * date >> date.log 2>&1
2>&1
표준에러를 표준출력으로 리다이렉션, 즉 에러도 함께 출력된다. tail -f date.log
date.log를 감시하고 있다가 뒤 쪽에 텍스트가 추가되면 자동으로 화면에 리프레시
Startup script은 쉘을 시작했을 때 특정 명령어가 자동으로 실행되도록 하는 방법이다.
alias l='ls -al'
별명, 단축키
alias ..='cs ..'
alias c='clear'
이러한 명령어를 쉘이 시작될 때마다 실행되도록 하려면? (bash에서)
cd ~
nano .bashrc
안에서 작성해두면 된다.
유닉스 계열 운영체제는 여러 명이 함께 사용할 수 있는 기능을 가지고 있다. 이 기능은 강력 하지만 혹독한 대가도 따른다. 배우기 어렵고, 보안의 문제가 발생할 수 있다
id
나는 누구인가
who
이 컴퓨터에 누가 접속해있는가
super(root) user vs user
sudo 명령어
일시적으로 슈퍼 유저의 권한으로 실행한다. 슈퍼 유저가 될 수 있는 일반 유저만 가능
슈퍼 유저가 되는 방법?
먼저 자신이 슈퍼 유저인지 판단. 슈퍼 유저는 root라는 이름을 가지고 있음. $
일반유저, #
슈퍼유저
슈퍼 유저 되려면
su - root
로 슈퍼 유저 되기
exit
로 빠져 나오기
우분투에서 수퍼 유저 되려면
sudo passwd -u root
u는 unlock의 의미 (안 되면 sudo passwd root
로 먼저 비밀번호를 설정)
su - root
로 슈퍼 유저 되기
exit
로 빠져 나오기
sudo passwd -l root
로 super user 사용을 잠그기
루트 사용자의 홈 디렉토리는 /root
이다.
sudo useradd -m [username]
사용자 추가sudo passwd [username]
비밀번호 설정sudo usermod -a -G sudo [username]
super user 권한을 가질 수 있도록 설정su - [username]
해당 유저로 로그인유닉스 계열에서 퍼미션이란 User가 File & Directory를 Read & Write & Excute 할 수 있도록 또는 할 수 없도록 제어하는 것이다.
사용자1
touch perm.txt
파일 생성
ls -l perm.txt
로 파일의 소유자 확인
echo 'hi' > perm.txt
파일에 내용 넣기
사용자2
cd /home/사용자1
echo 'hello' > perm.txt
소유자가 아닌 사람이 쓰기를 했을 때 Permission denied 당한다.
ls -l perm.txt
했을 때 나오는 정보를 자세히 알아보기-
이면 파일, d
면 디렉토리r
: read 읽기, w
: write 쓰기, x
: excute 실행rw-rw-r--
는 소유자와 그룹은 읽기와 쓰기가 가능하고, 그 외는 읽기만 가능한다는 의미access mode를 변경하고 싶다면 chmod
명령어를 사용한다.
chmod o-r perm.txt
chmod o+r perm.txt
chmod u-r perm.txt
실행이란?
nano hi-machine.sh
nano
로 들어옴#!/bin/bash
/bin/bash를 이용해서 아래 코드를 해석해서 실행하라 뜻echo 'hi hi hi hi'
nano
나감./hi-machine.sh
라고 치면 에러가 나온다. (Permission denied)/bin/bash hi-machine.sh
이라고 치면 실행된다. chmod u+x hi-machine.sh;
이렇게 실행 권한을 주면./hi-machine.sh
이 정상적으로 실행된다.디렉토리는 읽기, 쓰기, 실행이 불명확하다.
실습을 위해 mkdir perm;cd perm;echo 'hi' > perm.txt
작성
perm 디렉토리 정보 :drwxrwxr-x 2 sua sua 4096 1월 7 17:50 perm
cd
명령으로 그 디렉토리에 들어갈 수 있느냐Tip) 디렉토리 안에 디렉토리가 있을 경우, 한꺼번에 모두를 바꾸고 싶을 경우
chmod -R o+w perm
R은 recursive 재귀적
chmod는 중급자로 갈수록 중요해지는 명령
chmod [options] mode[,mode] file1 [file2 ...]
이 때까지는 액세스 모드를 지정할 때 chmod o+w perm.txt
방식을 사용했었음. 사람이 이해하기 쉬우나, 한 번에 여러 설정을 바꿀 수 없다.
chmod o+r perm.txt
chmod o+x perm.txt
이렇게 여러 번 작성해야 함.
# | Permission | rwx | Binary |
---|---|---|---|
7 | read, write and execute | rwx | 111 |
6 | read and write | rw- | 110 |
5 | read and execute | r-x | 101 |
4 | read only | r-- | 100 |
3 | write and execute | -wx | 011 |
2 | write only | -w- | 010 |
1 | execute only | --x | 001 |
0 | none | --- | 000 |
chmod 111 perm.txt
하면---x--x--x 1 sua sua 3 1월 7 17:50 perm.txt
으로 한 번에 변경됨chmod a+r perm.txt
모든 사용자에 대해서 r 권한 부여chmod a=rwx perm.txt
모든 사용자에 대해 모든 권한 부여chmod a= perm.txt
모든 사용자에 대해 모든 권한 삭제https://en.wikipedia.org/wiki/Chmod 참고하기
user, other가 아닌 특정 사람들에게만 파일에 대한 권한을 주고 싶을 때, group으로 묶고 이름(ex. developer)을 부여한다.
(리눅스는 다중 사용자 시스템이므로 그룹이 별로 중요하지는 않다.)
예시
developer라는 그룹에 속한 사용자는 파일을 수정할 수 있는 권한이 있고, 속하지 않는 사용자는 수정할 수 있는 권한이 없다라고 가정
cd /var
이 디렉토리는 변화가 잦은 파일이 위치
mkdir developer
Permission denied
sudo mkdir developer
cd developer
echo 'hi, egoing > egoing.txt
Permission denied
기억할 필요없이 필요할 때마다 검색을 통해 해결
groupadd developer
developer라는 group 생성, Permission denied
sudo !!
!!은 직전에 입력했던 명령어
잘 됐는지 확인하려면 nano /etc/group
파일을 열어보면 된다.
usermod -a -G developer egoing
Permission denied
sudo usermod -a -G developer egoing
sudo usermod -a -G developer k8805
exit
후 다시 접속해야 함
cd /var/developer/
으로 이동
sudo chown root:developer .
.은 현재 디렉토리라는 의미
sudo chmod g+w
echo 'hi, egoing' > egoing.txt
오류 없이 실행!
본 포스팅은 생활코딩 리눅스 강의(https://opentutorials.org/course/2598)를 참고하여 작성하였습니다.