리눅스 기본 명령어 - User environments, Manipulating text

Hyungseop Lee·2023년 9월 18일
0

User environments

  • Linux는 multi user system이므로 user environments에 대해서 살펴본다

Identifying Current User

  • whoami : To identify the current user.

  • who : To list the currently logged-on users.

Users and Groups

  • uid : All users has a unique user ID.
  • gid : Linux uses groupf for organizing user. A group has a unique group ID.
  • usergroup에 관련된 정보들은 /etc/passwd and /etc/group에서 찾을 수 있다.
    • /etc/passwd :
      • line 하나하나가 모두 user이다.
      • seop을 제외한 나머지 user들은 직접 만들지 않은 user들이다.
        system이 접근 권한을 설정하기 위해서 내부적으로 만들어진 가상의 user.
      • x : passwd인데, 보안상 x로 표시
      • 첫번째 1000 : UID
      • 두번째 1000 : GID
      • seop : 사용자가 계정을 만들 때, 입력한 full name
      • /home/seop : home directory
      • /bin/bash : default로 사용하는 shell
    • /etc/group :
      • seop : group name
      • 1000 : GID

Adding and Removing Users

  • useradd(모든 Linux에서 사용가능) or adduser(Debian 계열 배포판에서만 사용가능) :

    • id : gives information about a user
      seop이라는 user는 "seop", "adm", ... "sudo", 등 여러 group에 자동적으로 속해 있다.
      또한 "sudo" group에 속해있기 때문에 권한이 요구되는 Job들을 수행할 수 있다.
      (sudo apt-get install ... 등)

    • 만약 user1을 sudo user로 만들고 싶으면?
      기존 user1은 sudo group에 추가되어 있지 않기 때문에 super user 권한을 얻을 수 없어서
      user1_1이라는 새로운 User를 adding하는 것이 deny되었다.user1을 sudo group에 추가해준다면 해결될 것이다.

  • userdel(모든 Linux에서 사용가능) or deluser(Debian 계열 배포판에서만 사용가능) :
    -r : home directory의 내용까지 모두 지워라

Adding and Removing Groups

  • groupadd or addgroup :

  • groupdel or delgroup :

root account and sudo command

  • root :
    The root account is very powerful and has full access to the system.
    In Unbuntu, root account is diabled for security reason

  • sudo :
    sudo gives temporary superuser privileges

➡️ root account는 system에 대한 full access가 있기 때문에 매우 강력하면서 위험하다.
(해킹이나 보안에 취약점이 있기도 하고, 실수로 중요한 파일들을 삭제할 수 있다)
그래서 Ubuntu에서 root 계정이 없는 대신 sudo command로 root의 권한을 일시적으로 부여할 수 있다.

Environment Variables

  • Environment Variables :
    각 사용자 별로 환경 변수를 다르게 설정하여 다른 값을 사용하도록 설정하는 변수(character string).
    환경변수는 보통 대문자로 표기한다.

Setting Environment Variables

  • echo : 특정 환경변수를 보고 싶을 때, (환경변수이름) 앞에 $를 붙여서 echo로 확인한다.

    • Some Example Environment Variables :
      • echo $PATH에서 ':'이 자주 보이는데,
        ':'(column)은 각각이 실행파일들이 있는 directory라는 의미이다. (ls, pwd, ...)
      • HISTSIZE는 hist
  • export : 새로운 환경변수를 만들고 싶을 때

    • 방법 1 : export (만들 환경변수이름)=value

    • 방법 2 : (만들 환경변수이름) = value; export (만들 환경변수이름)

    • 방법 3 : ':'(column)을 이용하여 기존 환경변수를 수정하는 방법

  • ~/.bashrc :
    로그인할 때마다 export하지 않고 자동으로 환경변수가 설정되도록.
    즉, Add a variable permanently
    • (Edit ~/.bashrc) and (source ~/.bashrc or ./bashrc)

User startup file : .bashrc

  • ~/.bashrc : defines aliases(별명) and environment variables.
    • alias : 매우 긴 명령어를 ~/.basrc file에 미리 축약해놓은 작은 명령어로 대신하여 사용
    • example :
      1. 기존 alias 사용 :
        (la와 'ls -A'가 똑같은 결과 ➡️ la는 'ls -A'의 alias임)
      2. 새로운 alias 추가 :
        history 명령어를 실행했을 때, 마지막 5줄만 나오도록 ~/.bashrc 수정

File Ownership

  • In Linux, every file is associated with a user = u, a group = g and others = o
  • Files have permissions(read = r, write = w, and execute = x)
    • chown : change user ownership of a file or directory
    • chgrp : change group ownership of a file or directory
    • chmod : Permission can be set separately for owner, group, and other
      • rwx:rwx:rwx ➡️ u:g:o
        7 = ob111 ➡️ rwx
        6 = ob110 ➡️ rw-
        5 = ob101 ➡️ r-x
  • ls -l (file이름) : file에 대한 접근권한 확인하기
    1. Example :
    • 기존 myscript.sh file의 접근 권한 : user : rw-
      group : rw-
      others : r--

    • chmod uo+x,g-w myscript.h :
      user : rwx
      group : r--
      others : r-x

    • chmod 765 myscript.h
      user : rwx
      group : rw-
      others : r-x

    1. Example : user1이 file을 실행하는 것을 막기. = execute
      • "Hello World!\n"를 출력하는 실행파일인 helloworld를 생성.
        defualt로 others는 execute의 권한이 있다
      • others인 user1도 helloworld를 실행할 수 있다
      • seop계정에서 others의 execute 권한을 없애기
      • 이제 others인 user1은 helloworld를 실행할 수 없다.

        참고로 directory에 대한 execute 권한을 막는 것은 해당 directory에 접근을 못하도록 하는 것이다.

Quiz >
User, Group, Others 모두에게 실행권한을 주는 명령어를 별칭으로 생성한 후 아무 파일이나 만든 별칭을 사용해 실행권한을 추가하시오.


Manipulating text

  • sed : Stream Editor = sed is used to modify the contents of a file or input stream
  • awk : awk extracts and prints specific contents of a file
  • sort : sorting
  • grep : Scans files for specific patterns; regular expression can be used.
  • tee : tee takes output from any command, and send it to both a file and to standard output.
  • wc : word count. (line, word, byte)

sed

  • sed s/pattern/replace_string/ file : substitute first string occurence in every line

  • sed s/pattern/replace_string/g file : substitute all string occurences in every line

  • sed 1,3s/pattern/replace_string/g file : Substitute all string occurence in a range of lines

  • sed -i s/pattern/replace_string/g file : Save changes for string substitution in the same file

Quiz > ls_man.txt 파일에세 모든 ls를 대문자 LS로 변경하여 LS_man.txt로 저장하시오. (출력은 상위 10줄)

awk

  • awk '{ print $0 }' file : print entire file ($0 : 파일 전체)

  • awk -F: '{ print $1 }' file : print first field of every line, separted by a space
    ➡️ ':'을 기준으로 분리했을 때, 첫번째 field

  • awk -F: '{ print $1 $7 }' file : print first and seventh field of every line
    ➡️ ':'을 기준으로 분리했을 때, 첫번째 field와 일곱번째 field
    (/pattern/ 을 줘서 해당하는 line들만 출력하도록 할 수도 있다)

sort

  • sort file : sort the lines in the specified file

  • cat file1 file2 | sort : combined the two files, then sort the lines

  • sort -r file : sort the lines in reverse order

  • sort -k 3 file : sort the lines by the 3rd field on each line
    (0, 1000, 1001 ...)

    (진짜 숫자 크기로 정렬 하기 위해 -g option)

grep

  • grep [pattern] <file> : search for a pattern in a file
    (s로 끝나는 줄을 모두 출력)

  • grep -v [pattern] <file> : print al lines that do not match the pattern

  • grep [0-9] <file> : print the lines that contain the number 0-9

  • grep -C 3 [pattern] <file> : pattern을 만족하는 line 기준 위, 아래 3줄. 총 7줄 출력.

tee

  • tee : takes output from any command, and send it to both standard output, and to a file

Regular expressions

  • Consider sentence : "The quick brown fox jumped over the lazy dog"

    • . : match any single character
      • a.. : azy
    • a | z : match a or z
      • b. | j. : br or ju
    • $ : match end of string
      • ..$ : og
    • ^ : match beginning of string
    • * : match preceding item 0 or more times
      • l.* : lazy dog
      • l.*y : lazy
      • The.* : 문장 전체
  • examples :
    • z로 시작하는 단어 찾기
    • 'o', 'o' 사이에 0~n개 문자가 들어있는 단어 출력
    • 'a', 'a' 사이에 'a' or 'n' 들어있는 단어
      -> a[an]a
      |은 아님.

응용

  • /etc 디렉터리 밑에 있는 일반 파일 개수 세기 :

  • 현재 디렉터리에 있는 모든 ".txt" file들의 접근 권한 변경하기

  • myhello 실행파일이 있는 디렉터리를 환경변수로 설정하여 ls처럼 사용하기

  • 일시적인 환경변수 설정이 아닌 system을 재부팅했을 때도 계속해서 환경변수로 남게 만들기
    (이제 system 재부팅 후 다시 시도해도 될 것이다)

  • myhello.c file에 있는 모든 int를 double로 바꾸기
    (아래와 같이 하면 안된다. "printf"에 "int"가 있으니까 의도한 대로 바뀌지 않음)

    (아래와 같이 해야 한다. \(공백) : 공백)
  • 현재 디렉터리에 대하여, 파일/디렉터리명 \t\t 크기 순서로 나타내라
profile
Efficient Deep Learning Model, Compression

0개의 댓글