세리프 따라잡기

linux(리눅스) 명령어 모음 및 팁, 패키지 매니저(apt, yum) 본문

Linux

linux(리눅스) 명령어 모음 및 팁, 패키지 매니저(apt, yum)

맑은 고딕 2021. 1. 30. 23:36

※ 강조 글씨는 자주 사용되며, 중요한 명령어라는 뜻.

[명령어를 입력할 때 대·소문자를 잘 구분해야 한다]

ls (=list) 파일과 디렉토리의 목록 ('ls 디렉토리명' 이렇게 해주면 해당 디렉토리 목록을 보여줌 - ex. ls dir1)
ls -l 목록을 자세히 보여준다
ls -a (=all) 모든 파일(숨긴 파일 포함)을 보여주는 것
ls -al 모든 파일을 상세히 보여주는 것.
pwd 내가 위치한 곳이 어딘지 알려줌
mkdir 이름 디렉토리 생성
mkdir -p 이름/이름/이름/… 필요하면 부모 디렉토리를 생성하여 에러없이 디렉토리를 만드는 것.
touch 이름 비어있는 파일 생성
cd 이름 '이름'의 위치로 나를 옮길 때
cd .. 1. 부모 디렉토리로 가는 방법 (상위 폴더) - 상대 경로
cd /이름/이름/… 2.  입력한 폴더로 지정해 가는 방법 - 절대 경로
cd ~ 3. 자신의 디렉토리에 빠르게 가는 명령어
clear 화면을 깨끗하게 해주는 것
rm 이름 (=remove) 파일을 삭제하는 것
rm -r 이름 디렉토리를 삭제해주는 것 (이 디렉토리 이하의 파일도 다 삭제되는 것이기 때문에 잘 사용하자)
명령어 --help 1. 명령어에 대한 도움말 (간단한 메뉴얼)
man 명령어 2. 명령어에 대한 상세한 사용 설명서가 나옴 (키보드를 이용한 스크롤, '/찾는 문구'를 이용해 n을 눌러 스크롤)
cp 파일명 이동할위치/파일명 (ex. cp hello.txt dir1/hello.txt) 파일 복붙하기
mv 파일명 위치/파일명 1. (ex. mv hi.txt dir1/hi.txt) 파일 이동시키기
mv 파일명 바꿀파일명 2. (ex. mv hi.txt bye.txt) 파일 이름 바꾸기
sudo (=substitute user do) 보통은 일반 유저로서 사용하지만, root 권한이 필요할 때 사용하는 것 (관리자 권한)
nano 파일 편집기
wget 링크 url을 통해 파일을 다운받을 수 있다.
wget -O 파일명 링크 url을 통해 다운받는 파일의 이름을 원하는 대로 설정하여 다운할 수 있다.
git clone 링크 ( ) url에 해당하는 오픈 소스 프로젝트를 전부 복제한다.
( )에 디렉토리명을 적으면 그 디렉토리 안으로 들어간다.
cat 파일명 파일의 내용을 화면에 출력해준다.
cat 사용자가 키보드로 입력한 정보를 standard input로 받는다.
grep 단어 파일명 특정한 정보에서 원하는 정보(단어)가 포함된 행을 찾아주고 화면에 출력해준다.
head 파일명 이 파일의 앞 부분의 텍스트만을 출력하게 해주는 것. (10줄 정도)
head -n숫자 파일명 해당 파일의 앞 텍스트 n숫자 만큼 출력해준다.
(-n1 일시 1줄 출력)
echo " " " " 안의 문자를 그대로 화면에 출력해준다. [표준 출력]
* (=wildcard) 와일드 카드 문자. 모든 파일을 가리키거나 특정한 패턴이 있는 문자, 파일을 찾을 때 쓰인다.
chmod +x 파일명 파일명에 대해 x를 추가한다.
(실행 가능한(x) 모드(mod)를 추가해서 바꿔준다는 것(ch))
즉, 실행 가능한 파일로 바꿔주는 명령어
ps 프로세스 리스트를 보여주는 명령어
ps aux 백그라운드에서 돌아가는 많은 프로그램들을 보는 명령어
locate 파일명 해당 파일명에 대한 파일들을 찾아줌
crontab -e 하고자 하는 일을 정의할 수 있다.
crontab -l cron 처리한 리스트를 보여준다.
tail -f 파일명 파일에 대해 감시를 해주며 마지막에 추가된 부분을 지속적으로 출력해준다. [ctrl+c로 빠져나감]
alias 단어='명령어' '명령어'를 단어로 설정해주어, 단어만 입력해도 해당 명령어를 실행하게 해준다. 별명의 기능
id 유저 식별. 나는 누구인가
who 현재 접속한 유저가 누구인가
!! !를 두 번 쓰면 직전에 사용한 명령어를 다시 사용해준다.
   
   
   
   

※ 왜 리눅스로 CLI 방식을 배우고 있을까?

1. GUI vs CLI를 비교하면, GUI>>>CLI로 훨씬 더 GUI가 에너지(cpu, memory)를 많이 사용하고 소모한다. 예를 들어 서버 컴퓨터나 데이터 분석 시스템에서는 보기 편리한 그래픽은 필요 없다. 이럴 때 쓰이는 게 용량도, cpu도, 메모리도 적게 잡아먹는 CLI이다.

2. GUI를 배우고 사용하는 방식은 쉬우나, 많은 양에 대해 순차적으로 진행되는 일을 자동화하기도 어렵고 많은 기다림을 거쳐야 한다. 반면에 CLI에 명령을 순서대로 내리고 나면, 최종 결과가 나올 동안 다른 작업을 할 수 있다. 즉 중간 과정을 지켜보지 않아 굉장히 편리하다.

※ Tip

1. ls -l, a 등 -와 함께 쓰이는 것들을 옵션, parameter라고 한다.

 

2.

-rw는 파일이라는 것을 알 수 있으며, 0은 용량을 가리킴.

drw는 디렉토리라는 것을 알 수 있고, 4096은 용량을 가리킨다.

 

3. 'tap 키'는 글자를 자동 완성시켜준다. [유용]

 

4. '/' = root 디렉토리. 즉 최상위 디렉토리를 뜻한다.

 

5. 리눅스에서는 동작을 성공적으로 처리하면 어떤 표시도 해주지 않는다. [오류가 있을 경우에 표시해줌]

 

6. 리눅스 파일 편집 프로그램에는 vi, nano 등이 있다.

 

7.

패키지 매니저란 필요한 소프트웨어들을 검색, 설치, 제거 등 관리 작업을 해주는 것을 말함.

패키지 매니저에는 apt, yum 등이 있다. [이용하려면 sudo를 입력해야 함]

☞ apt

sudo apt-get → apt-get의 사용법이 나열된다.
sudo apt-get update; → 인터넷을 통해 apt 서버에 접속하여 최신 상태의 소프트웨어 목록을 가져온다.
sudo apt-cache search 패키지명 → 관련된 소프트웨어 패키지 목록을 가져온다.
sudo apt-get install 패키지명 → 프로그램을 설치한다.
sudo apt-get upgrade (패키지명) → 모든 패키지를 업데이트해준다. ()을 적었을 시, 그에 한해서만 업데이트.
sudo apt-get remove 패키지명 → 패키지 삭제 작업.

yum(yellow dog update)이란 RPM 설치를 개선하기 위해 개발한 패키지 관리자. 이는 패키지 저장소에서 수요 되는 패키지를 검색하고 다운로드하여 설치해준다. 즉 패키지 의존성을 고려하여 자동으로 처리하면서 설치, 업데이트, 삭제를 진행할 수 있다.

패키지 의존성이란 내가 설치하고자 하는 C패키지를 다운받기 위해 A, B패키지를 먼저 다운받아야 하는 것. 즉 패키지가 많아져 관리가 어려워진다.

☞ yum

yum install 패키지명 → 패키지 설치
yum check-update → 업데이트 가능한 패키지 목록 확인
yum update (패키지명) → 모든 패키지 업데이트. ()을 적을 시 이에 한해서만 업데이트
yum remove 패키지명 → 패키지 삭제
yum info 패키지명 → 패키지 정보 확인
yum list → 패키지 목록 확인

 

8. 복사/붙여넣기 기능은 ctrl+shift+c/v를 하면 된다.

 

9.

명령어를 한 줄에 같이 쓸 때, 세미콜론(;)을 이용해서 구분한다. [ ;을 이용해 더 쓸 수 있음 ]

mkdir example;cd example → example 디렉토리를 만들고 example 위치로 간다.

 

10. 파이프라인(pipeline) = |

프로그램과 프로그램을 파이프라인을 통해 연결해준다. [ |를 이용해 더 쓸 수 있음 ]

☞ 사용 예시 : [출력 | 입력]

ls --help | grep sort → list 도움말에서 sort라는 단어(정보)를 가진 행을 찾아 출력해준다.

 

11. IO redirection (input/output)

- Output에 대해

http://slideplayer.com/slide/5126304

보통은 ls -l을 입력하면 화면에 목록이 출력되는데, ls -l > list.txt 이렇게 해준다면 목록이 출력되지 않는다. 이는 화면으로 출력되는 것이 기본값인데, 출력되는 방향을 다른 곳(> list.txt)으로 돌려서 파일을 저장했기 때문이다. 이것을 리다이렉션이라고 한다.

이때 >1>를 뜻하는데(1은 생략 가능), 이는 standard output을 의미한다. 2>라고 해준다면 standard error라는 의미가 된다.

☞ red.txt 파일이 없는데 지울 때

rm red.txt 1> list.txt 2> err.log → rm red.txt에서 출력하는 결과가 있다면 기본 출력(1>)이 되어 list.txt에, rm red.txt에 에러가 포함되어 있다면 그 출력은 에러 출력(2>)이 되어 err.log에 출력될 것이다.

- Input에 대해

cat hello.txtcat < hello.txt에 대한 결과가 외관상 똑같이 출력되지만, 실제로는 다르다.

cat hello.txt는 인자로써 안의 내용을 입력받은 것이고, cat < hello.txt는 표준 입력으로 입력시킨 것이다.

☞ IO redirection (=IO stream) [표준 입/출력 리다이렉션에 대한 예시]

head -n2 < list.txt > result.txt → list.txt 파일이 리다이렉션 되어 head -n2 프로세스에 입력이 되고, 처리 결과를 result.txt에 출력한 것. 즉 list 파일의 앞 2줄만 result 파일에 저장해.

+ append (tip 개념)

-1. 출력에 대해 >> 이렇게 두 번 붙이면 리다이렉션 한 결과를 추가, 덧붙인다는 의미.

ls -l >> list.txt → ls -l한 결과를 list.txt 파일에 내용을 추가적으로 덧붙인다.

-2. 입력에 대해 << 이렇게 두 번 붙이면 앞의 명령어 프로세스에 input 해준다는 것.

-3. 화면에도 출력되지 않고 파일에도 출력되지 않게 하고 싶을 때는: > /dev/null 이라고 해주면 된다. 이는 유닉스에서의 휴지통이라고 생각하면 된다.

 

12. Shell vs Kernel

- shell : 사용자가 입력한 명령을 해석하는 프로그램. 사용자가 커널을 직접 제어하긴 어렵기 때문에, 사람이 쉘을 통해 이해하기 쉬운 형태의 명령어를 입력하면 shell의 프로그램들이 해석해서 커널에게 전달해준다. [명령어들의 편의성이 각각의 shell 마다 다르다. ex. bash에서는 안 되는 것이 zsh에서는 된다]

echo $0 → 화면에 -bash라고 출력되는데, 이는 shell 중에서 bash라는 제품을 쓰고 있다는 걸 보여줌. (기본값)

- kernel : 하드웨어를 제어해서 어떤 처리를 수행할 수 있도록 명령함.

- shell script : shell에서 실행되는 쉘 명령어들이 실행되야될 순서를 사용자가 각본을 짜서 저장해놓은 파일.

☞ 예시

#!/bin/bash
if ! [ -d bak ]; then
        mkdir bak
fi
cp *.log bak

밑에 있는 코드들이 bash의 문법에 따라 만들어졌기 때문에 명령어 해석기에 해당되는 프로그램이 실행될 수 있도록 한 것. 현재 디렉토리에 bak라는 디렉토리가 존재하지 않는다면(! =부정), bak라는 디렉토리를 생성하고 모든 .log 파일들을 bak 디렉토리에 카피하라는 코드를 nano를 통해 작성.

 

13. Directory 구조

www.thegeekstuff.com/2010/09/linux-file-system-structure/ 참고

 

14. process에 대해

/bin, /sbin과 같은 program이 파일의 형태로 strorage에 저장. 프로그램을 실행하면 memory에 적재되어 cpu(processor)에 의해 처리되는 상태에 있는 것을, 즉 실행되는 프로그램을 process라고 한다.

 

15. ctrl+z 의 기능은 해당 프로세스를 일시 정지하는 것이다.

일시 정지된 프로세스를 보는 방법 = jobs
일시 정지된 프로세스를 foreground로 돌리는 방 = fg or fg 해당 숫자
일시 정지된 프로세스를 background로 돌리는 방법 (명령어 &와 같이 &를 붙여 실행하는 것과 같다) = bg

 

16. locate vs find vs whereis

- locate 명령어 사용법

배포판에 따라 locate 명령어가 없을 수 있는데, 아래와 같이 다운로드하면 된다.

sudo apt-get install mlocate

locate는 디렉토리를 찾아보는 게 아닌, 데이터베이스를 찾아본다. DB는 컴퓨터 안의 파일들의 정보가 저장되어 있는 공간이다.

 

- find 명령어

www.tecmint.com/35-practical-examples-of-linux-find-command/ 참고

 

- whereis

$PATH를 통해 찾아본다. [path값은 변경할 수 있다. 건들지 않았다면 기본값으로 제공되는 경로를 쓰는 것]

$PATH는 환경변수라고 한다.

 

17. top 명령어 종료 = q 버튼을 누르면 된다.

 

18. 데몬(daemon)

daemon 프로그램은 항상 실행되고 있다. (ex. server라고 부르는 프로그램들)

ls, rm, mrdir와 같은 프로그램들은 필요할 때 키고 없을 땐 꺼져있는 상태의 프로그램.

-1. apache 웹 서버 다운

sudo apt-get install apache2 → 아파치 최신 버전 다운. 중간에 continue는 그냥 y 눌러주면 된다.

-2. 제대로 다운 확인 및 위치가 보고 싶다면?

cd /etc/init.d/ → init.d는 데몬 프로그램들이 위치한 디렉토리

-3. 켜고 끄려면?

sudo service apache2 start → apache2 실행
service apache2 stop → 멈추기
ps aux → 실행되는 프로세스 목록 확인을 통해 실행이 제대로 되었는지 확인

항상 실행되게 하고 싶으면
cd etc/rc3.d 에서 명령어 입력....

 

19.

Cron은 정기적으로 명령을 실행시켜주는 도구/소프트웨어 [ex. 데이터 정기 백업 및 전송]

crontab -e → 하고자 하는 일을 정의할 수 있다. [처음 시작하는 것이라면 에디터를 선택하는 창이 뜬다]

에디터 설명에 m h dom mon dow command 라고 쓰여있는데, 차례대로 풀이하자면 다음과 같다.
minute(0-59) hour(0-23) day of month (1-31) month(1-12) day of week(0-6: 이때 0이 sunday) 명령어

☞예시
*/1 * * * * date >> date.log 2>&1 → 모든 시간대의 1분씩 date 명령에 대한 처리를 date.log에 출력/저장하고, 에러가 발생하면 표준 출력으로 리다이렉션 되어 date.log에 함께 저장시킨다는 의미.

 

20. alias에 대해

www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html 참고

 

21. .bashrc

 

22. 다중 사용자 시스템 (Mult user)

unix는 기본적으로 다중 사용자를 토대로 한다.

 

23. super(root) user vs user

super user는 전지전능, 즉 최고 관리자 [ex. super user do => sudo]

user는 말 그대로 그냥 일반 유저.

gothic@ubuntu:~$은 일반 유저 상태라는 것이고, 만약 root@ubuntu:~# 이렇게 되어있다면 수퍼 유저라는 것.

일반 유저에서 수퍼 유저 되는 방법

-1. su를 이용

su - root → 루트 사용자가 되겠다는 명령어. 이후 root 이용에 대한 패스워드를 작성하고 들어가면 된다.
빠져나가는 명령어는 exit

-2. 위의 방법이 실패한 경우 (Authentication failure = 인증 실패)

특히 현재 사용하는 ubuntu의 경우는 root 사용자가 되길 막아두었다. (잘못 만졌을 때 문제를 야기할 수 있으므로) 이를 해제하는 방법은 다음과 같다.

sudo passwd -u root → root 사용자의 패스워드를 푸는 것. [반대로 -l 을 하면 잠긴다. 평상시엔 잠그는 걸 추천]

※ 만약 잠금을 풀고 다시 su - root를 이용하여 password를 쳤는데 인증 실패 문구가 뜬다면?
= root로의 접속을 처음 하는 것일 확률이 높다. 즉, root 비밀번호를 설정해주지 않았기 때문에 발생하는 문제.
이는 sudo passwd root 를 이용해 비밀번호를 설정해주면 된다.

+3. root 사용자의 경로 root는 어디?

user의 cd / 경로를 보면 이 또한 최상위 디렉토리인 root를 가리키는데, super user일 때의 홈 디렉토리도 pwd를 통해 확인하면 /root 이다. 이 둘은 이름만 같지 전혀 다르다! super user의 /root는 /의 root라는 다른 디렉토리를 사용하는 것이다. [user의 상황에서 들어가려고 하면 승인이 나지 않아서 못 들어간다. 즉 root user만의 공간]

 

24. 사용자 추가하기

-1. 일반 사용자 추가

sudo useradd -m 이름 → 이름이라는 사용자가 추가된다. 이 사용자에 접속하려면 먼저 sudo passwd 이름 을 통해 비밀번호를 설정해줘야 접속을 할 수 있다.

-2. 추가한 일반 사용자가 sudo 권한 갖게 하기

일단 추가한 일반 사용자에서 exit하여 sudo 권한을 이미 갖고 있는 사용자 id로 접속한다.

sudo usermod -a -G sudo 이름 → 이름의 유저에 대해 수정(usermod)하고 sudo 그룹(-G)에 속하게 한다(-a)는 의미.

 

25. permission(권한)

unix 계열 시스템에서는 file과 directory에 대해 제어한다. 어떤 사용자에게 할 수 있게 하거나 없게 하는 것. (read, write, excute 등을)

☞ 예시

gothic 사용자가 touch per.txt를 생성하면 ls -l을 통해 per.txt가 gothic의 소유라는 것을 알 수 있다.
이때 다른 사용자 malgun이 per.txt에 echo "hi" > per.txt 라고 한다면 승인이 거부된다는 메시지가 뜬다.
= 말 그대로 소유주가 아니라 승인이 거부되었기 때문이다.

리눅스 파일 구조는 ls -l을 했을 시 아래와 같다.

 

- 기본

-rw-rw-r-- 1 gothic gothic 0 Jan 31 18:24 per.txt

1st: owner(user), 주인의 권한

2nd: group, 그룹의 권한

3rd: other, 다른 사람들(모든 사람들)에 대한 권한

 

r: read (읽기) / w: write (쓰기) / x: excute (실행)

u: user / g: group / o: other / a: all

 

- chmod

만약 자신과 그룹에게는 공개하되 다른 이에게는 공개하지 않는 파일을 만드려면 위의 구조에서 other 부분의 r--이 ---가 되어야 한다. 이를 바꾸려면 access mode를 바꿔야하는데, 이것이 chmod(change mode)이다.

en.wikipedia.org/wiki/Chmod 참고

☞ 방법1
chmod o-r per.txt
→ per.txt의 o(ther)부분에 대해 r(ead)를 없앤다(-).
= -rw-rw---- 상태로 바뀐다.

반대로 추가하려면 +로 해주면 된다. (o+r) 이는 쓰기도 적용된다. (o+w)
소유자의 권한도 승인을 없애주려면 u와 함께 쓰면 된다. (u-r, u+r 등), 이는 실행 또한 동일하다.

즉, chmod (u, g, o, a)(+, -)(r, w, x) (파일이름, 폴더이름), 으로 써주면 mode를 바꿀 수 있다.

directory에 속한 모든 파일에 대해 권한 바꿔주기는 chmod -R ~이하 같음~ 붙여주면 된다.

☞ 방법2
chmod 숫자 per.txt → per.txt를 8진법을 이용해 바꿔준다는 뜻
예를 들어, -r--r--r--파일을 --wx-wx-wx로 바꾸고 싶다면 chmod 333 per.txt 라고 해주면 된다.

 

26. group

www.cyberciti.biz/faq/howto-linux-add-user-to-group/ 참고

askubuntu.com/questions/124246/what-command-changes-the-group-setting-for-a-directory 참고

sudo groupadd 그룹이름 → 그룹 이름을 생성
생성이 제대로 되었다면 nano /etc/group 를 통해 확인할 수 있음.
sudo usermod -a -G 그룹이름 사용자이름 → 그룹이름에 사용자를 넣어주는 수정작업
이후 exit를 이용해 로그아웃을 하고 다시 로그인해야 적용된다.
sudo chown root:그룹이름 디렉토리명 → 디렉토리명의 root root인 부분에 대해 root 그룹이름으로 권한을 변경해준다.
이후 앞서 배운 chmod를 이용해 w권한도 추가해주면 끝!

 

27. internet, network, server

late add

Comments