본문 바로가기
IT/리눅스

[리눅스] 기초 내용 정리 (명령어, 원격 터미널, 사용자)

by dwoi 2023. 3. 28.

리눅스 명령어에 대해서 학습한 내용을 정리한 글

목차

     


    리눅스

    사진: Unsplash 의 Gabriel Heinzer

    우분투?


    1. Bash 쉘

    1.1. 터미널

    1. 콘솔(Console)
      • 서버의 로컬 장치에서 직접 명령어를 실행할 수 있는 입출력 장치
    2. 터미널(Terminal)
      • 서버에 로컬 또는 원격으로 접속할 수 있는 콘솔을 구현한 소프트웨어
    3. 프롬프트(Prompt)
      • 사용자와 상호작용가능한 명령을 주고 받을 수 있는 대기 표시자

     

    1.2. 쉘

    • 사용자 명령어 및 프로그램을 실행 할 수 있는 인터페이스

     

    1.2.1  쉘의 종류

    메인 종류
    • Bourne shell : 특징 $ 프롬프트
    • C shell : 특징 % 프롬프트


    Bourne 쉘의 변천사
    • Bourne shell : sh
    • Korn shell : ksh
    • Bourne Again shell : bash
    • POSIX shell : sh


    C 쉘의 변천사
    • C shell : csh
    • TENEX/TOPS C shell : tcsh

    1.3. 기본 명령어

    화면 출력
    • 화면 문자열 출력 : echo
    • 터미널 지우기 : clear


    명령어 출력 리다이렉션(redirection)
    • > : stdout output to…
    • >> : stdout append to…
    • 2> : stderr error output to…


    2. 파일 명령어

    2.1. 파일 목록 보기(ls = list)

    ls [OPTION]… [FILE]…
    다양한 옵션을 이용하여 디렉토리 내 파일 목록 조회하기

    ls               : list
    • ls -l            : long list
    • ls -a           : all
    • ls -a -l        : all + long
    • ls -al          : all + long
    • ls *.txt        : 확장자가 *.txt 파일인것

     

    2.2. 파일 생성 명령어(touch)

    touch [OPTION]… [FILE]…
    파일을 툭~ 건드리기

    • 정확히는 파일의 변경 시간을 현재 시간으로 바꾸기
    • 해당 파일이 존재하지 않는 경우 0바이트 파일 생성

    touch hello.txt

     

    2.2.1. 파일 내용 보기 (cat = concatenate → 연쇄시키다)

    cat [OPTION]… [FILE]…
    파일 내용 보여주기

    • 정확히는 input 과 output 을 연결(concatenate)하기
    • input = 파일, output = standard out

     

    2.2.2. 파일 내용 보기 (more)

    more [OPTION]… [FILE]…
    파일 내용 보여주기

    페이지 단위로 이동 : space
    • 줄 단위로 이동 : enter


    • more hello.txt
    • more /etc/passwd
    • more /var/log/syslog

     

    2.2.3. 파일 내용 보기 (less)

    less [OPTION]… [FILE]…
    파일 내용 보여주기

    • 페이지 단위로 이동 : space
    • 줄 단위로 이동 : enter
    • 상하좌우/페이지 이동 : 방향키(상하좌우) 및 pag up/down

    • less hello.txt
    • less /etc/passwd
    • less /var/log/syslog

    more 보다 향상된 기능, 그리고 모든 파일을 메모리에 올리지 않아 more 대비 속도가 빠름

     

    2.3. 파일 다루기

     

    2.3.1. 파일 복사(cp = copy )

    cp [OPTION]… [SRC] [DST]
    파일 복사

     

    • 사전 준비
    touch hello.txt
    echo “hello” > hello.txt


    • cp hello.txt hello2.txt : 파일 복사


    • 확인
    cat hello.txt
    cat hello2.txt

     

    2.3.2. 파일 링크 (ln = link )

    ln [OPTION]… [TARGET] [LINKNAME]
    파일에 하드링크/소프트링크(심볼릭 링크)만들기

    • 사전 준비
    touch hello.txt


    • ln -s hello.txt hello2.txt : 파일 링크 생성


    • 확인
    ls -l
    cat hello.txt
    cat hello2.txt

     

    2.3.3. 파일 이동 (mv = move )

    mv [OPTION]… [SRC] [DST]
    파일 이동

    mv hello2.txt hello3.txt : 파일 이동
     mv hello.txt hello2.txt


    주의1 : 심볼릭 링크의 원본 파일 이름이 변경 될 경우, 심볼릭 링크는 더 이상 유효하지 않음.
    주의2 : 이동하고자 하는 곳에 파일명이 이미 존재 할 경우, 해당 파일을 경고 없이 덮어 쓰게 됨 (overwrite)

     

    2.3.4. 파일 삭제 (rm = remove )

    rm [OPTION]… [File]...
    파일 (또는 디렉토리) 삭제

    • rm hello.txt
    • rm test1 test2

    2.3.4. 파일 속성 보기 (file)

    file [OPTION]… [File]...
    파일의 속성 보여주기

    file hello.txt
    • file /etc/passwd
    • file 문서
    • file /usr/bin/file
    • file hello2

     

    3. 디렉토리 명령어 및 구조

    3.1. 디렉토리 구조

    • . : 내 디렉토리 = 나 자신 / 현재위치
    • .. : 상위(부모) 디렉토리
    • ~ : 홈 디렉토리)
    • - : 이전 디렉토리


    3.1.1. 디렉토리 명령어

    • pwd : 현재 디렉토리 위치 출력 (print working directory)

    3.1.2.  디렉토리 구조

    • 계층적(hierarchical) tree 구조
    • 최상위 디렉토리 : / (root directory)

     

    3.2. 디렉토리 다루기

    3.2.1.디렉토리 생성 (mkdir = make directory)

    mkdir [OPTION]… [FILE]…
    디렉토리 생성


    • mkdir dir1
    • mkdir dir2 dir3\


    • mkdir dir1/sub1
    • mkdir dir1/sub2


    • mkdir dir2/sub1/sub2 : (실패)
    • mkdir -p dir2/sub1/sub2 : p = parents

     

    3.2.2. 디렉토리 이동 (cd = change directory)

    cd [디렉토리명]
    디렉토리 이동

    • cd dir1
    • cd .. : 부모 디렉토리 = parent directory

    • cd dir1/sub1
    • cd . : 현재 디렉토리 (변화 없음)
    • cd ../..

    • cd - : 이전 디렉토리
    • cd / : 루트 디렉토리
    • cd ~ : 내 홈 디렉토리

    3.2.3. 디렉토리 복사 (copy) 및 이동 (move/rename)


    cp -r : 디렉토리 복사 (recursive)
    • cp -r [src] [dst]

    mv : 디렉토리 이동(move/rename)
    • mv [from] [to]

     

    3.2.4. 디렉토리 안으로 파일 복사 (cp = copy)

    cp [OPTION]… [SRC] [DST]
    파일 복사


    • 사전 준비
    touch test1 test2
    • cp test1 dir1 : 디렉토리 안으로 파일 복사
    cp test2 dir1
    • cp -r dir1 dir2 : 디렉토리 (통째로) 복사

     

    3.2.5. 디렉토리 안으로 파일 이동 (mv = move)

    mv [OPTION]… [SRC] [DST]
    파일 복사

    • 사전 준비
    touch test1 test2
    mkdir dir1


    • mv test1 dir1 : 디렉토리 안으로 파일 이동
       mv test2 dir1


    • mv dir1 dir2 : 디렉토리 이동 (rename)

     

    3.2.6. 디렉토리 삭제(rmdir = remove directory)

    rmdir [OPTION]… [FILE]…
    디렉토리 생성

    • rmdir dir1
    • rmdir dir2 
    • rmdir dir3


    • rmdir -p dir2 : p = parents


    참고(주의)

    • rm dir1 (실패)
    • rm -r dir1 (성공) : r = recursive

     

    3.3. 명령어의 매뉴얼

    • man [OPTION]… [PAGE] [COMMAND]
    매뉴얼 보기


    4. 원격 터미널

    4.1. 원격 터미널의 필요성

    데이터센터에는 모니터가 없고 원격으로 터미널을 설치해서 진행함.

    ssh로 접속 가능!

     

    + VS code의 확장 기능 ssh를 통해 연결해서 개발 환경을 구성하는 것도 가능

    5. 사용자 계정

    5.1. 사용자 계정 관리

    5.1.1. superuser와 user

    슈퍼유저란?
    • 시스템 운영 관리자 계정으로 일반적으로 리눅스 운영체제에서는 루트(root) 유저를 말한다.
    • 관리자 권한을 일반 사용자 권한과 구분하며 사용자의 부주의로 발생하는 시스템 손상과
      바이러스, 악성코드의 침입에 의한 피해를 보호한다.


    주요 명령어
    • whoami :
     내가 누구인지 내 계정 확인
    • id : 
    내가 갖고 있는 권한 및 포함된 그룹 확인

     

    권한의 대여 (사용에 매우 주의!)
    • sudo : 슈퍼유저의 권한으로 명령어를 실행 (superuser do = sudo)

    5.1.2. 사용자 계정 확인

    사용자 계정 확인
    • cat /etc/passwd


    사용자 암호
    • cat /etc/shadow : 권한 오류 확인
    • sudo cat /etc/shadow : 사용에 매우 신중해야 함


    사용자 그룹 확인
    • cat /etc/group

     

    5.1.3. 사용자 추가 (adduser = add user)

    adduser [options] [--home DIR] [--shell SHELL] [--disabled-password] 
    [--disabled-login] user

    새로운 사용자 추가

    • adduser : 권한 실패 확인
    • sudo adduser user2 


    • cat /etc/passwd : 생성된 사용자 확인


    참고 : 빠르게(?) 새로운 사용자 추가 (None-dialog 모드)
    • useradd -D : 기본 설정은 /etc/default/useradd 참고
    • sudo useradd user2 -m -p abcd1234 -s /bin/bash

    5.1.3. 사용자 암호 변경 (passwd)

    passwd [username]
    사용자 암호 변경 (또는 내 암호 변경)

    • passwd : 내 암호 변경
    • (sudo) passwd user2 : user2 의 암호 변경

    5.1.4. 사용자 이름 변경 (usermod - user modify)

    usermod [options] user
    사용자 계정 정보 수정

    • usermod -c <name change> user2
    user2 의 이름(=주석 comment) 수정

    • usermod -l <new id> <old id>
    사용자의 계정 id 변경 (id만 변경, home 은 그대로 유지됨)

    • usermod -l <new id> <old id> -d /home/<new_id> -m <old id>
    사용자의 계정 id 변경 후 디렉토리도 변경하며 이전 디렉토리 내용을 함께 이동 함

     

    5.1.4. 사용자 암호 정책 변경 (chage - change age)

    chage [options] username
    사용자 암호 정책 변경


    • chage -l user2 : user2 의 암호 정책 확인
    • chage user2 : user2 의 암호 정책 변경

    • chage -E 2030-12-31 -m 1 -M 90 -W 7 user2
      만료일
      최소 유효기간
      최대 유효기간
      암호 사용만료 예고

     

    5.1.5. 사용자 삭제 (deluser - delete user)

    deluser [options] username
    사용자 계정 삭제


    • deluser user2 : user2 의 계정 삭제
    • deluser user2 --remove-home : user2 의 계정 및 디렉토리 삭제


    참고 : 빠르게(?) 새로운 사용자 삭제 (None-dialog 모드)

    • userdel user2 --remove

     

    5.2.그룹 계정 관리

    5.2.1. 그룹 생성 (addgroup - add group)

    addgroup [options] group
    그룹 계정 생성


    • addgroup team1 : team1 그룹 계정 생성
    • cat /etc/group

    5.2.2. 그룹에 사용자 할당 (usermod - user modify)

    usermod [options] user
    사용자 계정 정보 수정 / 사용자를 그룹에 추가

    • usermod -c <name change> user2 : user2 의 이름 수정

    • usermod -a -G team1 user2 : user2를 team1 그룹에 추가

    • deluser user2 team1 : user2를 team1 그룹에서 삭제
    (순서 변경에 주의)

     

    5.2.3. 그룹 삭제 (delgroup - delete group)

    delgroup [options] group
    그룹 계정 삭제

    • delgroup team1 : team1 그룹 계정 삭제
    • cat /etc/group

     

    6. 사용자/그룹 권한

    6.1. 사용자 접근 권한의 구분

    소유자(User) / 그룹(Group) / 그 외(Other)

    0 --- : 권한무
    1 --x : 실행
    2 -w- : 쓰기
    3 -wx : 쓰기 & 실행
    4 r-- : 읽기
    5 r-x : 읽기 & 실행
    6 rw- : 읽기 & 쓰기
    7 rwx : 읽기 & 쓰기 & 실행

    6.2. 권한 변경 (chmod - change mode)

    chmod [options]… [mode]… file… 
    파일/디렉토리 권한의 변경

    • 소유자(User) / 그룹(Group) / 그 외(Other)


    • chmod u+x hello.txt : user에 x(실행) 권한 추가
    • chmod u-x hello.txt : user에 x(실행) 권한 삭제
    • chmod g+rw hello.txt : group 에 rw(읽기/쓰기) 권한 추가
    • chmod g-rw hello.txt : group 에 rw(읽기/쓰기) 권한 삭제
    • chmod o+rwx hello.txt : other에 rwx(읽기/쓰기/실행) 권한 추가
    • chmod o-rwx hello.txt : other에 rwx(읽기/쓰기/실행) 권한 삭제
    • chmod +x hello.txt : user/group/other 에 x(실행) 권한 추가


    • chmod 700 hello.txt : user에 rwx 권한만 부여
    • chmod 760 hello.txt : user에 rwx / group에 rw권한만 부여

     

    6.3. 사용자/그룹 접근 및 실행 권한

    6.3.1. 소유권 변경 (chown - change owner)

    chown [options]… [USER][:GROUP] file… 
    파일/디렉토리의 소유자/그룹 변경

     

    소유자(User) / 그룹(Group) / 그 외(Other)


    • chown user2 hello.txt : hello.txt의 소유자를 user2로 변경


    • chown user2:team1 hello.txt : hello.txt 의 소유자를 user2로, 그룹을 team1으로 변경


    • chown :team1 hello.txt : hello.txt 의 그룹을 team1 으로 변경

     

    6.3.1. 그룹 소유권 변경 (chgrp - change owner)

    chgrp [options]… [GROUP] file…
    파일/디렉토리의 그룹 변경

    소유자(User) / 그룹(Group) / 그 외(Other)


    • chgrp team1 hello.txt : hello.txt 의 그룹을 team1 으로 변경


    • chown :team1 hello.txt : hello.txt 의 그룹을 team1 으로 변경

    댓글