Linux

succeeding·2022년 3월 2일
0

생활코딩 강의를 듣고 공부한 내용을 정리한 문서.

1. 기초


pwd

  • "print working directory"의 준말
  • 현재 작업 중인 디렉터리의 이름을 출력함.

man <명령어>

명령어의 메뉴얼을 보여준다. --help 옵션보다 상세한 메뉴얼을 제공해준다.

  • /<검색어> : 메뉴얼 내 찾기 기능
    - n 키를 입력하면 찾은 단어 중 다음에 등장하는 단어로 화면을 움직인다.
  • q를 입력하면 메뉴얼을 종료한다.

1) 모르는 명령을 구글링하는 법

"create directory in linux"

2) NANO, VI

파일 편집기
nano는 초급자한테 추천, vi는 중고급자에게 추천

3) homebrew

brew help
# brew 간이메뉴얼

brew search <프로그램명> 
# 프로그램을 검색해줌

brew list
# brew로 설치된 프로그램 list를 보여줌

brew install <프로그램명>
# 프로그램 설치

brew uninstall <프로그램명>
# 프로그램 삭제

brew upgrade <프로그래명>
# 프로그램 업그레이드

brew upgrade
# 설치된 모든 프로그램 업그레이드

brew update
# homebrew 검색 목록 최신화

2. IO Redirection


1) Output

Redirection : 방향 바꾸기
1. the redirection of standard output(stdout)
1> 혹은 1이 생략된 > 을 사용한다.

ls -l > result.txt
# result.txt 파일에 ls-l 결과값이 저장됨
  1. the redirectiono of standard error
    2>를 사용한다.
rm cp.txt
rm cp.txt 2> error.log
# 에러문구가 error.log에 저장됨
  1. 혼합
rm cp.txt 1> result.txt 2> error.log
# 결과가 있다면 result.txt에 결과가 저장되고, error가 발생하면 error.log에 저장된다.


출처 : https://slideplayer.com/slide/5126304

2) Input

< 을 사용한다

cat < hello.txt 
# cat이란 프로그램에 hello.txt의 내용을 입력

3) append

는 나중에 듣자.

3. 쉘과 쉘스크립트


1) SHELL VS. KERNEl

shell은 껍데기, kernel은 알맹이란 뜻이 있다.

  • kernel 은 하드웨어를 다루는 Os에서 가장 중심이 된다.
  • shell은 사용자가 입력한 명령을 kernel이 이해하도록 전달해준다. 혹은 kernell이 전달한 정보를 사용자가 알아보게끔 전달해준다.
  • shell과 kernel의 분리를 통해 여러개의 shell이 나타나고, 사용자 입맛에 맞는 shell을 고를 수 있다.

2) bash vs. zsh

둘 다 shell이다.

  • 자신의 shell 확인방법 : 터미널에서 echo $0를 입력한다.

예를 들어, zsh(지셸)은 cd 명령어에서 tab리를 눌러서 경로 자동완성 기능, 혹은 같은 레벨의 있는 다른 디렉터리로 이동하는 기능을 제공한다.(cd A B A에서 B 디렉터리로 바뀜)

3) Shell Script

script는 대본이란 뜻을 갖고 있다.
shell script는 여러개의 명령을 순차적으로 실행하는 것

  • 예시) backup 파일
#!/bin/bash
if ! [ -d bak ]; then
        mkdir bak
fi
cp *.log bak

$ chmod +x backup : backup파일에 실행 권한 부여
$ ./backup : 백업파일 실행

4. 디렉토리 구조와 파일 찾는 법


1) linux directory structure

/bin - User Binaries

  • 사용자들이 사용하는 명령어들
  • 실행가능한 파일들을 Bminaries(bin)이라고 함

/sbin - System Bianries

  • 시스템 관리자가 사용하는 명령어들이 모여있음

/etc - Configuration Files

  • 설정 파일들

/var - Variable Files

  • 변할 수 있는 파일들

/home - Home Directories

  • 사용자들의 개인 파일을 저장하는 경로

2) 파일 찾는 법

locate

  • 직접 디렉터리에 있는 파일을 탐색하는 것이 아니라 데이터 베이스를 탐색하기 때문에 속도가 빠름

find

  • 직접 디렉터리에서 파일을 찾음. 속도는 더 느림
  • 다양한 용법이 존재하며 여기를 참고

whereis

  • 실행 파일을 찾아주는 명령어

5. 프로세스와 실행

mkdir와 같은 명령어들은 모두 프로세스로서 동작한다.

1) 프로세스 리스트 출력

ps

  • 프로세스 리스트를 보여준다
  • ps aux 백그라운드 프로세스까지 모두 보여준다.

top

htop

  • load average: 부하량

2) 백그라운드 실행

  • ctrl + Z로 백그라운드 실행
  • jobs: 백그라운드로 실행 중인 목록을 보여줌
  • fg
    • 백그라운드 프로세스를 포그라운드로 전환
    • jobs가 보여주는 목록 중 +기호가 붙은 프로세스가 타겟임
    • -기호가 붙어 있는 프로세스는 다음으로+가 될 후보 프로세스임
    • fg %숫자 를 입력하면 jobs 중 숫자에 해당하는 프로세스를 포그라운드로 전환

백그라운드로 프로세스 실행

마지막에 &를 붙여준다
ex) 아래 명령어를 치고 jobs를 쳐보면 백그라운드에서 running이라고 뜨는 것을 확인할 수 있다.

ls -alR / > result.txt 2> error.log &

3) Daemon

  • 항상 실행되고 있다는 특징이 있음
  • /etc/init.d에 저장됨
  • service 명령어로 키고 끈다.
sudo service <APP NAME> start/stop

부팅 시 자동실행

  • /etc/rc3.d: CLI 환경에서 자동실행
  • /etc/rc5.d: GUI 환경에서 자동실행
  • /etc/rc3.d에서 파일 리스트를 보면 S01<APPNAME> 이런 식이다.
    • S 로 시작하는 파일은 부팅시 자동실행되는 파일
    • K 로 시작하는 파일은 부팅시 실행되지 않음
    • 알파벳 뒤에 숫자는 실행 우선순위

4) CRON

  • 정기적으로 명령을 실행시켜주는 프로그램
  • 명령어는 아래와 같다.
crontab
  • 옵션
    • -e: 에디터

tail

tail -f FILE

FILE의 변화를 팔로우하며 출력해준다.

5) 쉘 실행시 자동 실행

  • ~/.bashrc는 쉘이 실행될 때 자동으로 읽혀진다.

alias

6. 사용자


1) 다중사용자

  • 장점: 사용자마다 권한 설정
  • 단점: 권한체크 등 시스템 복잡도가 높아짐

id

나는 누구인지 알려줌

who

컴퓨터에 접속해있는 사용자를 알려줌

2) 슈퍼유저와 일반유저

su

  • 현재 사용자를 슈퍼유저로 만들고 싶을 때 혹은 다른 사용자로 전환하고 싶을때 사용한다

passwd

  • 사용자의 비밀번호를 바꿀 때 사용
  • AWS에서 root 사용자 비밀번호를 사용하기 위해선 먼저 이 명령어로 비밀번호를 변경해주어야 한다.
sudo passwd root

3) 사용자 추가

useradd

  • 사용자 추가할 때 사용한다
sudo useradd -m <USERNAME>
  • -m 옵션은 /home/<USERNAME> 디렉터리를 같이 만들어준다
  • 그러나 이 명령어만으로 생성된 유저는 sudo를 사용하지 못한다

usermod

  • 유저의 권한을 수정한다.
  • 아래 명령어는 해당 유저에게 sudo를 사용할 수 있도록한다
    • -a 옵션은 그룹에 추가한다. -G 옵션이 반드시 함께 쓰여야한다
    • -G 옵션은 그룹을 지정한다
    • 따라서 아래 명령어는 해당 유저를 sudo라는 그룹에 추가해준다
sudo usermod -a -G sudo <USERNAME>

7. 권한


유저가 파일, 디렉터리에 대해서 읽고 쓰고 실행하는 것에 대한 권한을 관리할 수 있다.

-rw-rw-r-- 1 ubuntu ubuntu 3 May 19 11:29 perm.txt

위는 ls -l perm.txt 명령어의 결과이다. 이 결과를 다음과 같이 나누고 분석해본다.

[type]- | [access mode]rw-/rw-/r-- | 1 | [owner]ubuntu [group]ubuntu | 3 May 19 11:29 | perm.txt
  • [type]: perm.txt가 파일인지 디렉터리인지 링크인지 알려준다.
    • -: 파일을 의미한다
    • d: 디렉터리를 의미한다
  • [access mode]
    • 3개 씩 쪼개서 순서대로 owner, group, other(owner도 group도 아닌 불특정 유저, 즉 해당 컴퓨터에 존재하는 모든 유저)의 권한을 명시한다
    • chmod로 access mode를 수정할 수 있다
    • 각 3 자리는 rwx의 순서로 정해져있다. 알파벳으로 명시돼 있으면 해당 하는 권한이 있다는 것이고 -은 해당 권한이 없다는 것이다.
      • r: read, cat nano 등으로 읽을 수 있음
      • w: write, echo nano 등으로 쓸 수 있음
      • x: execute
    • 예를 들어, 주어진 결과에 대해서 owner는 읽고 쓸 수 있으나, 실행할 순 없다. group에 속하지 않은 다른 사용자는 읽을 수만 있다.
  • [owner]: perm.txt의 소유자

chmod

chmod ugoa|+-=|perm FILE

예를 들어

chmod o-r perm.txt

라고 하면 perm.txt 파일에서 other의 읽기 권한을 삭제한다.

1) 디렉터리에서 권한

  • 읽기: 디렉터리 안에 있는 파일, 디렉터리를 열람 권한
  • 쓰기: 디렉터리 안에서 파일이나 디렉터리 생성 권한
  • 실행: 해당 디렉터리에 대한 cd명령어 입장 권한
chmod -R

-R 옵션은 디렉터리 안에 있는 모든 디렉터리에 대해서 권한을 한 번에 수정할 때 사용한다.

2) chmod 정리

  • rwx를 세자리의 이진수라고 생각하여 rwx 권한을 user, group, other에게 한 번에 부여할 수 있다.
    • 예를 들어 chmod 444 perm.txt라고 하면 4는 이진수로 100(2)이므로 r--를 의미한다. 따라서 이 명령어는 perm.txt에 대해서 u, g, o에게 모두 읽기 권한만 허가하는 것이다.

8. 그룹


자주 사용되는 기능은 아니어서 일단 넘긴다.

9. 인터넷, 네트워크, 서버


자신의 IP 확인하기

  1. 실제 내 pc의 사설(private) ip 알아내기

linux

ip addr

에서 inet이라고 적힌 부분을 보면 됨
MAC
$ ipconfig getifaddr en0
$ ifconfig | grep inet

  1. 외부 접속시 사용하는 외부(공인) ip
    $ curl ipinfo.io/ip 혹은 $ curl ifconfig.me
    - curl 은 해당 웹페이지의 html 파일을 다운받아 터미널에 출력한다.
    통신사(ISP, Internet Service Provider)가 우리집에 놔준 회선의 ip이며 공유기(router) 해당 ip를 갖게 된다.

같은 wifi를 사용하는, 즉 같은 외부 ip를 사용하는 기기들은 서로의 사설 ip에 접속할 수 있다. 마치 내선 전화를 사용하는 한 회사 안에서 한 부서가 다른 부서에게 내선 번호만을 이용해서 전화를 걸 수 있는 것처럼.

1) Apache

linux에 WEB server 설치하기

web server는 server에 설치된 프로그램. client의 request에 대해서 web server 프로그램이 server에 설치된 request의 파일(가령 html)을 찾아서 client에게 response한다.
WEB server 중 apache를 사용하며, 맥은 기본적으로 설지되어 있다.

# 서버 활성화
$ apachectl start

# 서버 비활성화
$ apachectl stop

# 서버 재시작
$ apachectl restart

elinks는 셸에서 동작하는 인터넷 브라우저이다.

$ elinks <url> 을 입력하여 웹 페이지를 읽을 수 있다.

127.0.0.1 는 자신을 뜻하는 ip이며 변하지 않는다. 이 ip의 도메인은 localhost이다.
따라서 다음 두 명령어의 결과는 동일한 웹페이지를 보여준다.

$ elinks <사설 ip>
$ elinks 127.0.0.1

conf

웹서버가 클라이언트가 요청한 페이지를 서버에서 찾는데, 찾는 것이 이루어지는 최상위 폴더가 설정되어 있다. 이 최상위 폴더를 document root라고 한다.

log

웹서버에는 client request에 대한 response를 기록한 .log 파일과 웹서버에서 발생한 error를 기록한 error.log 파일이 존재한다.

2) SSH

서버시장에서 linux가 앞도적 다수여서 중요함. 인터넷을 통해 사물을 제어하는 사물인터넷(IoT) 안에 설치되어 있는 컴퓨터 또한 linux. client 상태에서 server 컴퓨터를 원격제어할 때 SSH(Secure Shell)를 사용하면 된다.
이를 위해선 client에는 SSH client 프로그램이, server에는 SSH server 프로그램이 설치되어 있어야한다. 유닉스 계열의 컴퓨터는 웬만하면 SSH가 기본적으로 설치되어 있다.

3) Port

포트는 65,000개가 존재한다.

well known port

1024까지의 포트를 말하며, 매우 잘 사용되는 유명한 프로그램들이기에 표준으로 사용한다. 대표적으로 22번 포트는 ssh, 80번 포트는 웹서버를 사용한다. 보안상의 이유 등으로 해당 프로그램의 설정에서 포트는 바꿀 수 있다.

Port Forwarding

외부에서 사설 ip에 접속하는 것은 어려운데, 같은 공유기를 사용하는 기기들이 같은 사설 ip를 갖는 경우가 대다수이기 때문이다. 이를 Port Forwarding으로 해결할 수 있다.
라우터 역시 port를 갖고 있다. 외부에서 라우터의 특정 포트로 접속하면 라우터는 라우터에 연결된 특정 컴퓨터 특정 포트로 연결해준다. 이를 Port Forwarding이라 한다.

  1. default gateway 접속하기
  • 공유기 내부 ip를 일컬으며, 공유기에 연결된 기기에서 공유기의 웹서버에 접 속할 때 사용된다.
  • 맥에서 이를 확인하려면 '네트워크환경설정 -> wifi에서 고급 -> TCP/IP 탭
    의 라우터'를 확인하면 된다.
  1. 포트포워트 설정하기
  • 브라우저에서 default gateway에 접속하면 라우터 설정관리자 페이지가 나온다.
  • iptime 라우터를 사용하는 경우, '고급설정 -> NAT/라우터 관리-> 포트포워드 설정' 에서 포트포워드를 설정할 수 있다.
  • 내부 ip 주소에는 사용하는 기기의 내부 ip를 입력하고, 외부 포트는 외부에서 접속할 때 입력해야할 포트를(예를 들어 9000), 내부 포트는 서버로 사용할 기기의 웹서버 포트(80)를 입력한다.

0개의 댓글