Linux Study

rang-dev·2020년 3월 30일
0

생활코딩 리눅스강의를 듣고 정리합니다.

MEMO

  • 축약형을 쓸때는 -(dash)가 한개, 풀네임을 쓸때는 -가 2개(--) 붙는다.
    • rm -a / rm --all
  • 파일명 앞에 .이 있다면 숨겨진 파일을 의미한다.

Commands

ls

  • ls --help
    • ls 커맨드에 관련된 간단한 설명을 보여줌
  • ls -l dir1
    • 현재 위치의 하위폴더인 dir1에 있는 목록을 보고자함

man

  • man ls
    • ls 커맨드에 관련된 자세한 메뉴얼 제시
  • 검색시 다음 페이지: n 입력
  • man 나가기: q

mkdir

  • mkdir -p: 하위 폴더를 여러개 만들어야할 때(=>필요하면 parent 폴더를 만들어야할 때) 사용
    • ex) mkdir dir1/dir2/dir3/dir4

mv

  • move, rename
    • mv 현재파일위치/현재파일명 바꿀파일위치/바꿀파일명
    • 파일명은 바꿔도 되고 안바꿔도 된다. 하지만 이 파일명을 새로 써주는 옵션이 rename에서도 사용된다.
    • rename 현재파일명 바꿀파일명

cp

  • copy
  • cp [복사할파일명] [복사할위치]

sudo

  • sudo: super user do에서 유래, 현재는 subtitute user do를 의미한다.(다른 사용자의 권한으로 실행)
  • 관리자 권한으로 명령을 실행해야할 때(when permission is denied)

nano

  • 파일 에디터
  • nano만 입력하면 새 파일을 작성할 수 있다.
  • ^은 Ctrl key를 의미한다.
  • nano 파일명을 입력하면 기존의 파일을 수정하거나 파일명을 정하여 새 파일을 작성한다.
  • Ctrl + 6: 부분 블록설정

apt

  • 패키지 매니저: 기본적으로 가지고 있는 프로그램 이외의 프로그램들을 다루고 싶을 때 사용
  • 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

  • wget URL: url로 해당 파일 다운로드
  • wget -O filename URL: 다운로드시 파일 이름을 설정

git

  • git clone: 오픈 소스의 모든 것을(히스토리까지) 다운로드함
    • ex) git clone https://github.com/facebook/react.git react_src
    • 현재 위치에서 react_src라는 폴더에 해당 오픈 소스를 다운로드함

cat

  • 파일의 내용을 커맨드 창에 출력함
    • ex) cat test.txt

Why CLI?

  • GUI에 비해서 용량, 메모리, CPU가 적게 든다.
  • 순차적 진행이 가능하다.
    • 여러 명령을 한번에 전달 후 종료시 결과만 보고 받는다.(계속 지켜볼 필요가 없다.)
    • ex) mkdir why; cd why
    • 커맨드들을 이어서 실행하기 위해서는 각 커맨드 사이에 ;를 넣어줘야 한다.
  • 파이프라인
    • 하나의 프로그램의 결과를 다른 프로그램의 입력으로 준다.
    • ex) ls --help | grep sort
    • --help로 얻은 결과를 grep에 입력하여 sort를 포함한 행을 불러온다.

IO Redirection

output

만약에 어떤 결과를 바로 커맨드 창에 출력하는 것이 아니라 파일로 저장하고 싶다면 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를 실행하면 된다.

Input

Standard Input을 redirction할 때는 <가 사용된다. 하지만 보통 command line argument를 직접 사용하는 것과 큰 차이가 없다.


Shell vs Kernel

  • Kernel: Hardware를 직접 제어한다.
  • Shell: 사용자의 명령을 받고 kernel이 이해할 수 있도록 바꾸어 kernel에 전달한다. 또한 hardware에서 명령을 수행한 결과가 전달된다. 여러 shell 프로그램이 존재하며 사용자의 기호에 따라 골라 사용할 수 있다.

Shell Scripts

쉘 명령어들이 실행되어야 하는 순서를 각본처럼 짜서 저장해 둔 파일. 자주 쓰는 명령들을 자동화 할 수 있다.


Directories

  • /: 최상위 디렉토리, 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 ~을 사용하면 된다.

Process

  • SSD, HDD: Storage, 용량이 크고 속도는 느리다.
  • RAM: Memory, 용량은 작고 속도가 빠르다.
  • CPU: Processor

CPU의 처리속도가 빠르기 때문에 Storage의 속도가 따라잡을 수 없다. 그렇기 때문에 CPU에서 처리할 것들은 Memeory에 있어야 한다.

즉, 커맨드들은 컴퓨터상에서 Storage에 프로그램으로 저장되어있다. 그 프로그램을 실행하면 Memory에 적재되고, Processor에서 처리되는 상태에 있는(실행되고 있는) 프로그램을 Process라고 한다.

Process Monitoring

  • ps, ps aux(현재 실행되고있는 모든 프로세스들을 나타냄), top, htop

파일을 찾는법

  • locate
    • i.e. locate *.log
    • 디렉토리를 뒤지지 않고 데이터베이스를 뒤진다.
    • 그러므로 처리속도는 find보다 빠르지만 현재의 정보를 가져오진 않는다.
  • find
    • 디렉토리를 실제로 뒤진다.
    • 현재 상태를 가져오며 다양한 사용법이 존재한다.
    • i.e. find ~ -name *.log
  • whereis
    • 찾고자 하는 파일의 이름을 가진 모든 파일의 경로를 찾는다.
  • $PATH
    • 현재 디렉토리에 명령어(i.e. ls)가 존재하지 않음에도 불구하고 그냥 ls만 쳤을때 수행될 수 있는 것은 $PATH 때문이다.
    • $PATH에는 여러 경로들이 저장되어 있는데, 만약 어떤 명령을 실행하면 이 경로들을 검색하여 해당 프로그램이 존재하는지 확인하고 발견하면 실행시킨다.

백그라운드 실행

프로그램을 실행하다가 완전 나가는 것이 아니라 백그라운드에 실행되도록 하고 싶으면 Ctrl+Z를 누르면 된다.

  • jobs: 백그라운드에 실행되는 프로그램들의 목록을 나타냄
    • +표시는 fg 실행시에 바로 나타나는 프로그램 앞에 붙는다.
    • -표시는 +다음으로 실행될 프로그램을 의미
    • 만약 여러 리스트 중에 +가 아닌 다른 프로그램을 실행하고 싶다면 %[index]로 나타낸다.(i.e. kill -9 %4)
  • fg: 백그라운드에 있는 프로그램을 다시 foreground로 불러옴
  • 오래 걸리는 명령을 백그라운드에 보내놓고 다른 커맨드를 실행하고 싶을 때는 명령 뒤에 &표시

항상 실행

Deamon

이제까지 살펴보았던 프로그램들(ls, mkdir 등)은 필요할 때마다 실행시키는 프로그램들이었지만 deamon은 항상 켜져있어야하는 프로그램이다. 예를 들어 web server는 web client가 언제 요청을 보낼지 알 수 없기 때문에 항상 실행되고 있어야 한다.

Service

Deamon들을 시작하거나 중지하고 싶을때 사용하는 커맨드이다. /etc/init.d에 deamon 프로그램들이 존재하는데 여기서 sudo service [프로그램명] start 또는 sudo service [프로그램명] stop을 하면 된다.


정기적으로 실행

Cron

정기적으로 메일을 보내거나, 백업을 하는등의 일을 해야할 때 사용한다.

  • crontab -e로 작성할 수 있다.
  • minute hour dayOfMonth month dayOfWeek command의 순서로 입력이 가능하다.
  • *을 입력하면 아무 설정도 하지 않는 것이고, 만약 minute부분에 1/*을 썼다면 1분에 한번을 의미한다.
  • 예제에서는 매 분마다 시간을 기록하는 로그를 작성했다.
    • */1 * * * * date >> date.log 2>&1
    • >>표시는 새로운 내용을 이전 내용에 이어서 작성한다는 의미이며, 2>&1은 에러가 발생했을시 이 내용을 date.log에 기록한다는 의미이다.
    • tail -f [파일명]는 새로 기록되는 내용을 실시간으로 보여준다.

사례

어떤 웹페이지에서 사용자가 10만통의 메일을 보낸다고 했을 때 사용자는 모든 메일이 전송될 때까지 화면 앞에서 기다릴 필요가 없다. 화면에 SAVED라는 알림을 보낸 후 웹 서버에서 cron이 정기적으로 SAVED된 작업들을 백그라운드에서 처리한다.


Startup Scripts

쉘이 시작될 때 어떤 명령을 수행하도록 설정한다.(bash를 사용할때)

  • 홈 디렉토리로 이동한 후 nano .bashrc에서 bash를 시작할 때마다 수행하고 싶은 커맨드를 작성해준다.

alias

단축키를 생성한다.

  • alias c='clear'이면 c만 입력하기만 하면 clear를 수행한다.

다중사용자

유닉스 계열 운영체제는 여러 명이 함께 사용할 수 있는 기능을 가지고 있다. 하지만 배우기 어렵고 보안의 문제가 발생할 수 있다.

  • id: 나는 누구인가?
  • who: 이 시스템에 누가 접속해 있는가?

관리자와 일반 사용자

일반 사용자로 활동하면서 sudo를 사용해서 강력한 명령을 수행할 수 있지만 super(root) user로 로그인 하고자 할때(ubuntu 환경)

  • sudo passwd -u root: 여기서 u는 unlock
  • su -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]: 해당 유저로 로그인

권한(Permission)

권한이란 사용자가 파일이나 디렉토리를 Read, Write, Execute 할 수 있는가에 대한 것이다.
만약 사용자1이 생성한 파일(i.e. perm.txt)을 사용자2가 echo 'hi' > perm.txt로 write하려고 한다면 permission denied될 것이다. 왜냐햐면 해당 파일의 소유권은 사용자1에게 있기 때문이다.

  • ls -l perm.txt
  • r: read, w: write, e: execute

chmod

Change access mode를 의미한다.

  • 다른 user들이 해당 파일을 read할 수 없도록 설정
    • chmod o-r perm.txt
  • 다른 user(others)들이 해당 파일을 read할 수 있도록 설정
    • chmod o+r perm.txt
  • 소유자(user)가 해당 파일을 write할 수 없도록 설정
    • chmod u-w perm.txt

Execute

파일을 우리가 사용하는 커맨드처럼 바로 실행할 수 있도록 하려면 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

커맨드 창에서 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)들이 제공된다.

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글