본문 바로가기
서버 관련

리눅스 쉘 사용법 및 관련 개념

by 도쿠니 2022. 5. 13.

새로운 것을 사용할 때 마다 계속해서 갱신할 예정입니다.

파일 기본 명령어

  • whoami : 로그인한 사용자 ID를 알려줌
    • whoami를 했을 때 root이 나오면 슈퍼관리자를 뜻함
  • sudo : root 권한(관리자 권한)으로 실행하기
    • sudo 명령어 형식으로 사용
  • pwd : 현재 디렉토리(경로) 위치
  • cd : 디렉토리 이동
    • cd 경로 형식으로 사용
    • cd / : root 디렉토리( / )로 이동
    • cd 절대경로 : 루트 디렉토리 기준으로 절대경로를 사용하여 이동
    • cd . : 현재 디렉토리로 이동
    • cd .. : 상위 디렉토리로 이동
    • cd 상대경로 : 상대 경로를 이용하여 이동
      • ex) cd ../user -> 현재 디렉토리 기준 상위 디렉토리의 user 디렉토리로 이동)
    • cd ~ : 사용자 홈 디렉토리로 이동
    • cd - : 이전 디렉토리로 이동 (뒤로가기, 이전에 위치해있던 경로로 이동)
  • ls : 현재 위치한 디렉토리의 파일 목록 출력
    • 파일별 권한 읽는 법 (자세한 용어는 chmod에서 다룹니다)

  • chmod : 파일 권한 변경
    • chmod 권한명령어 파일명 형식으로 사용
    • chmod -R 권한명령어 디렉토리명 를 하면 디렉토리와 디렉토리 내부의 모든 파일을 지정한 권한으로 바꿔준다.
      • 명령어 위치에는 숫자로 권한을 부여하는 방식과 문자로 부여하는 방식이 있다.
        • 사용자 종류 (ugo)
          • u : user
          • g : group
          • o : other
          • a : all
        • 권한 (permission) 종류 (rwx/421)
          • r : read -> 4
          • w : write -> 3
          • x : execute -> 1

문자로 지정하는 방식 (ex. chmod u=rw File)
숫자로 지정하는 방식 (ex. chmod 777 File )

  • cat : 파일의 내용을 출력
    • cat 파일명
  • rm : 파일 및 폴더 삭제
    • rm (-rf) 파일명
      • rf 옵션은 그 디렉토리와 디렉토리 내부를 모두 삭제한다.
      • r 옵션 : 하위 디렉토리를 포함한 모든 파일 삭제
      • f 옵션 : 강제로 파일이나 디렉토리 삭제
      • 기본적으로 리눅스에서는 윈도우와 같은 휴지통이 없어 바로 지워지기 때문에 root와 같은 슈퍼 관리자로는 이러한 작업을 하지 않는다.
rm -rf * // 현재 디렉토리 기준 전체 삭제
  • mkdir : 디렉토리 생성
    • mkdir 디렉토리명
  • rmdir : 디렉토리 삭제
    • rmdir 디렉토리명
    • rm -R 디렉토리명 or rm -rf 디렉토리명 해도 지워진다.
    • rm 디렉토리명 만하면 안지워진다.
  • 파일생성
    • touch 파일명
    • vi 파일명
    • cat > 파일명
rm -rf * // 현재 디렉토리 기준 전체 삭제

표준 입출력 (Standard Stream)

  • stdin - 표준 입력 스트림
  • stdout - 표준 출력 스트림
  • stderr - 표준 오류 스트림

리다이렉션 (Redirection)

  • 표준 스트림의 흐름을 바꿔줄 수 있다.
    • > , < 로 흐름을 제어함
    • 기존 파일에 추가는 >> 또는 << 을 사용한다.
    • 주로 명령어 표준 출력을 화면이 아닌 파일에 쓸 때 사용한다.
    • 응용 프로그램 > 파일 -> 응용 프로그램의 출력이 파일로 들어간다. (프로그램 결과물을 저장하고 싶을 때)
    • 응용 프로그램 < 파일 -> 파일의 내용이 응용 프로그램의 입력으로 들어간다.
// ls로 출력되는 표준 출력 스트림의 방향을 text.txt로 바꿔주기 때문에 
// ls의 결과물인 파일목록이 콘솔창에 뜨는 것이 아닌 text.txt에 기록된다. 
ls > text.txt

// text.txt의 내용이 head라는 명령의 입력으로 들어가서 출력된다.
// head는 파일의 처음부터 10 라인 까지 출력해주는 명령
head < text.txt

// 기존에 있던 text.txt 파일에 ls 출력 결과를 추가적으로 저장한다.
// > 만 써서 집어넣으면 덮어 씌워버리기 때문에 >> 를 사용해야한다.
ls >> text.txt

파이프 (Pipe)

  • 두 프로세스 사이에서 한 프로세스의 출력 스트림을 다른 프로세스의 입력 스트림으로 사용할 때 사용
  • | 를 사용하여 표현
// ls 명령을 통한 출력 내용이 grep 명령의 입력 스트림으로 들어가서 grep을 출력
// grep 명령은 입력 스트림 내용 중에 grep 뒤에 붙는 내용이 들어있는 내용만 출력
// 즉, ls로 들어온 값에 text.txt라는 내용이나 text라는 내용이 있는 부분들을 뽑아내준다.
// ls는 곧 현재 디렉토리의 파일 목록이니 현재 디렉토리에 text.txt가 있는지 검색하는 것과 동일
// ls | grep 파일명 은 현업에서 특정 파일이 존재하는지 찾을 때 사용된다.

ls | grep text.txt
ls | grep text

// 둘다 text.txt가 출력된다.
  • grep : 검색 명령
    • grep (option) (pattern) 파일이나 디렉토리명
      • option 종류
        • -i : 대소문자 구분하지 않고 검색할 때
        • -v : 패턴을 포함하지 않는 것을 검색
        • -l : 파일명만 출력
        • -r : 하위 디렉토리까지 검색
        • -c : 패턴과 일치하는 라인의 개수만 출력
        • -n : 검색 결과의 각 행의 맨 앞에 행 번호를 넣음

프로세스 관련

  • foreground process : 쉘에서 해당 프로세스 실행을 명령한 후, 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하는 프로세스
    • 프로세스가 진행 중인 상황에서 다른 프로세스를 실행시킬 수 없다.
    • 기본적으로 프로세스들은 foreground process 다.
    • 도중에 작업을 취소시키고 싶은 경우엔 Ctrl + c 를 눌러서 프로세스를 종료하면 된다.
  • background process : 사용자 입력과 상관없이 실행되는 프로세스
    • 해당 프로세스 실행 시, 맨 뒤에 & 를 붙여준다
    • 처리시간이 오래걸리는 프로세스에 사용한다
    • 처리를 하는 도중에도 다른 프로세스 처리가 가능
sleep 120 &
ls // 바로 작동

sleep 120 
ls // 작동 X

프로세스 관련 명령어

  • jobs : background로 실행되는 프로세스들의 상태를 표시
    • jobs 출력 해석
      • [번호] : job 번호
      • -,+
        • + : fg나 bg 명령어 수행 시 , 가장 먼저 가져와서 실행될 프로세스
        • - : 현재 실행중인 job이 끝나면 바로 다음에 수행될 프로세스
      • Running, Stopped, Done : 현재 작업 상태

  • bg : foreground 프로세스를 background 로 전환
    • 이미 foreground에서 프로세스가 돌아가고 있으면 아무 입력도 안되기 때문에 Ctrl + Z 를 눌러서 작업을 일시중지 시킨 후 bg를 입력해야한다.
  • fg : background 프로세스를 foreground 로 전환
    • fg %job번호 형식으로 사용
  • nohup : 사용자가 로그아웃 하거나 터미널창이 닫혀도 실행중인 명령어를 종료하지 않고 계속 실행
  • ps : 현재 실행중인 프로세스 상태 확인 (사용자가 실행한 프로세스만 나오는 것이 기본값)
    • 옵션
      • -a : 시스템을 사용하는 모든 사용자의 프로세스 출력
      • -u : 프로세스 소유자에 대한 상세 정보 출력
      • -l : 프로세스 관련 상세 정보 출력
      • -x : 터미널에 로그인한 후 실행한 프로세스가 아닌 프로세스들도 출력, 주로 데몬 프로세스 확인용
        • daemon process : 사용자 모르게 시스템 관리를 위해 실행되는 프로세스, 보통 부팅 시에 자동 실행
      • -e : 해당 프로세스와 관련된 환경 변수 정보도 함께 출력
      • -f : 프로세스 간 관계 출력
// 보통 아래와 같이 사용
// 모든 프로세스 + 프로세스 실행한 사람 + 터미널 로그인 이전 프로세스
ps aux

ps aux | grep 프로세스명  // 이것도 실무에서 많이 사용, 특정 프로세스가 실행중인지 확인하고 정보출력
  • kill : 프로세스 종료
    • 사용법
      • kill %j(ob number)
      • kill pid
      • kill -9 : 작업 강제 종료
      • Ctrl + c : foreground 프로세스 종료
kill %2 // 백그라운드 프로세스 중 job number가 2인 프로세스 종료
kill 41189 // pid가 41189인 프로세스 종료

// 만약 41189가 종료가 안됐다면
kill -9 41189 //pid가 41189인 프로세스 강제종료, 실무에선 두번일 하기 싫으니 처음부터 강제종료 시킨다.

하드 링크와 소프트 링크

  • cp : 파일 복사
cp a.txt b.txt  // a를 b로 복사, b가 없다면 b생성, 있다면 덮어씌움
cp -rf folder1 folder2  // folder1 디렉토리 안에 있는 것을 모두 복사하여 folder2 디렉토리로 복사
cp -rf * folder2 // 현재 디렉토리에 있는 모든 파일을 복사하여 folder2에 복사
  • 하드 링크
    • ln A B
      • 파일을 복사하는 명령어지만, 원본이나 복사본을 변경하면 둘다 같은 내용으로 변경된다.
      • 둘 중 하나를 삭제하더라도 삭제하려는 파일만 지워지지 나머지는 그대로 남는다.
In test1.txt test_hard.txt 
// test_hard.txt는 일종의 test1.txt의 바로가기로 
// 만약 test1.txt에서 내용을 변경하면 test_Hard.txt를 열어봤을 때도 내용이 변경되어있음
// 그 반대도 성립한다.
// 만약 둘 중 하나를 삭제하더라도 다른 하나는 계속 존재한다.
  • 소프트(심볼릭) 링크
    • ln -s A B
      • 복사하지만 바로가기와 동일
      • 복사본을 통해 내용 변경가능
      • ls -al을 하면 파일이 소프트 링크인 파일인지 확인가능
      • 원본을 삭제하면 바로가기(복사본) 이용 불가능
ln -s test1.txt test2.txt
// test1.txt의 바로가기인 test2.txt 를 생성(복사)
// test2.txt에 들어가서 내용을 수정하더라도 test1.txt에 반영된다.
// 다만, 원본파일인 test1.txt를 삭제하면 test2.txt는 이용할 수 없다.
  • 소프트링크과 하드링크의 구조


Ubuntu 패키지 관리

  • CentOS,Fedora 같은 RedHat 계열 배포판은 RPM이라는 패키징 시스템 이용
  • ubuntu 같은 데비안 계열 배포판은 deb라는 패키징 시스템 이용
  • 패키지 관리자를 통해 패키지 저장소에 접근하여 소프트웨어 업데이트,다운로드 등을 한다.

패키지 관련 명령어

  • 관리자 권한(sudo)으로 실행해야한다.
    • sudo apt-get update : ubuntu 패키지 인덱스 정보 업데이트 (최신버전 확인 등)
    • sudo apt-get upgrade : ubuntu 패키지 업그레이드
      • 한번에 모든 프로그램을 업그레이드 해버리기 때문에 호환잘되는 걸로 버전 맞춰놨는데 다 업데이트 되어서 에러가 날 수도 있으니 함부로 하면 안된다.
    • sudo apt-get install 패키지명 : 패키지 설치
    • sudo apt-get remove 패키지명 : 설정파일을 제외한 패키지 삭제
    • sudo apt-get --purge remove 패키지명 : 설정파일을 포함한 패키지 삭제
      • 이렇게 삭제해도 정상적으로 삭제 안될 수도 있다. 설치를 할 때 신중할 것

댓글