레드헷 리눅스

[Redhat] Chapter 1 CLI 접근 하기

트리스탄1234 2023. 1. 24. 16:46
728x90
반응형

Log in

 

Multi user환경의 OS에서 사용자 식별은 매우 중요한 부분 입니다. 이런 사용자 식별은 하드웨어 기반의 PASSKEY 사용할 수도 있고 BIOMETRIC 이용할 수도 있습니다. 대부분의 OS에서 사용하고 있는 방식은 사용자의 이름과 패스워드를 입력 하는 방식을 많이 사용을 하고 있습니다.

 

이런 OS 중에서 Linux Login process 대해서 알아 보겠 습니다.

  1. Linux system 부팅이 될때, Linux kernel 불러 오고 위치를 시킵니다.
  2. Kerner 로딩 프로세스가 끝나면 통제권을 initial process에게 넘기는데, 보통은 init process에게 넘기게 됩니다.
  3. Init process 현재 정의되어 있는 run-level 따라 초기화 절차를 시작하게 됩니다. (text mode, graphic mode etc)
  4. Text mode로의 로그인은, init프로세스는 하나 또는 여러 개의 getty 프로세스를 실행 시키고 적절한 터미널에 mapping 시킵니다.. 이런 getty 터미널의 하드웨어 설정을 담당하게 되는데요, 이런 getty 보통 agetty라는 package 통해서 제공이 되고, serial terminal셋팅에 적합헤게 구성이 됩니다. 모뎀 터미널의 경우에는 시작되는 process /sbin/mgetty 사용을 하고 가상 터미널의 ㄱ여우에는 /sbin/mingetty 사용하게 됩니다.
  5. Getty 세개의 프로그램 중에 두번째 입니다. Init, getty, login 순서대로 진행이 되죠. init getty 실행을 시키고 getty 사용자 로그인을 위해 login프로세스를 실행을 시킵니다.
  6. Login 프로그램은 사용자에게  password 입력 하게 하고 /etc/passwd 있는 값과 비교   사용자 shell 실행 시킨다.

 

그래픽 로그인이 설정되어 있는 경우  xdm,gdm, kdm 하나의 그래픽 디스플레이를 제공해 준다.

로그인한 터미널 에뮬레이터는 shell이나  GNOME, KDE 명령어를 실행합니다.

 

네트웍 Loging in.telnetd in.rlogind , sshd 통해 제공 됩니다. 이런 프로그램들은 mgetty 가지게 됩니다. 보안상의 이유로 SSH rlogin telnet으로 되었습니다.

 

 

명령어 실행

GUI 환경에서의 프로그램 실행

대부분의 리눅스는 X라고 불리우는 그래픽 서버와 GNOME이나 KDE 데스크탑 환경을 포함하고 있습니다. Workstation 자동으로 그래픽 로그인으로 부팅을 하고 서버 시스템은 설치되어 있는 그래픽 환경을 포함할 있지만 대두분의 경우는 Text Mode 로그인을 제공 합니다.

 

대부분의 그래픽 데스크탑은 단순 메뉴와 같이 프로그램을 실행하기 위한 직관적인 인터페이스를 제공을 합니다.  프로그램이름을 알고 있다면, 터미널 명령어 프롬프트에서 프로그램 이름을 입력 하고 enter키를 누르면 실행이 됩니다. GNOME이나 KDE환경에서는 alt key f2 key 널어서 다이어로그 박스를 호출 명령어를 입력하고 enter 치면 실행이 됩니다.

 

명령어 라인에서 프로그램 실행

리눅스는 명령어 라인에서 프로그램을 실행하기 위해 Shell이라고 불리는 특별한 프로그램을 포함하고 있습니다. Shell이라고 불리는 명령어 라인에서 프로그램 이름을 입력 enter 실행 시키면 해당 프로그램이 실행이 됩니다.

 

 

명령어 라인과 상호 작용

명령어 라인 처리

Shell 명령어 프롬프트는 실행되는 프로그램을 위한 text 기반 상호작용 인터페이스를 제공을 합니다.

현대의 Shell에서는 프로그램이 실행되기 전에 선처리가 수행되는 shell 있습니다. 예를 들면 많은 문자들은 shell에서 특별한 의미를 갖는 문자로 사용이 되는데요.  기본적으로 shell에서 실행되는 명령어는 명령어가 실행되는 동안 동일한 터미널에서 입력되는 값들을 계속하기위해 수용을 할수 있습니다. Shell들은 입력을 논리적인 조각이나 문자 나누기, 문자 사이의 우선 분리자와 함께 나누어 져야 합니다.

 

이렇게 shell 입력을 논리적인 단위로 나눈 해당 프로그램을 실행 시키게 됩니다. Shell 해당 프로그램을 위치 시키지 못할 경우에는 error 표시를 하거나, 프로그램을 종료 시키고 사용자에게 shell prompt 돌려 주기도 합니다. 반면에 정상적으로 실행된 경우에는 추가 입력을 위한 명령어 인터페이스를 제공 하기도 합니다.

 

 

명령어 옵션

프로그램이 어떻게 실행되었는지에 따라서, 대부분의 명령어들은 실행되는 방식을 변경할 있습니다. 이런 추가적인 명령어 기능들은 option이라고 하는 값을 전달 함으로써,  실행되는 방식을 변경 하게 되는데요, shell 이런 옵션값들을 인식하기 위해서 '-' '--' 함께 입력이 됩니다.

 

'-' 함께 오는 옵션들은 short option이라고 불리고, 프로그램의 일치하는 기능을 실행을 시키게 됩니다. 일반적으로 옵션의 순서는 중요하지 않습니다. 아래의 보기들은 모두 동일한 옵션을 실행을 하게 됩니다.

$command -abc

$command -cba

$command -a -b -c

$command -c -b -a

 

option 입력 하기에 빠룹나다. 몇몇의 명령어들은 long option 지원을 합니다. 이런 long option들은 '--'뒤에 오게 됩니다.

 

$command --alpha --betta --charlie

 

종종 몇몇의 명령들은 short option lon option 지원을 합니다. 이런 명령어들의 option

$command -a --alpha -c --delta

 

 

 

명령어 인수

많은 명령어들은 하나 또는 이상의 객체를 운영하게 설계가 되었습니다. 이런 리스트들을 인수라고 하는데요. 일반적으로 명령어 옵션 뒤에 위치를 하게 됩니다. Shell 명령어를 실행 시킬때 shell 이런 인수를 명령어에게 배열로써 전달을 하게 됩니다. 인수는 '-' 구분을 하지 않고, 공백에 의해서 구분을 합니다.

 

$command --option arg1 arg2

 

명령어 error

Shell 프로그램을 위한 설치 위치를 검색을 합니다. 만약 실행 시키고 싶은 프로그램이 하나의 설정 가능한 디렉토리에 설치 되어 있지 않거나 명령어를 잘못 입력 하게 되면 error 돌려 주게 됩니다.

 

$command

Bash: command: command not found

 

프로그램을 포함하고 있는 파일이 실행권한이 없는 경우에도 error 돌려 주게 됩니다.

$command

Bash: bash : command: Permission denied

 

정의되어 있지 않은 option 입력한 경우에는 아래와 같은 error 돌려 줍니다.

$command: invaild option -- a

Try command --help for more information

 

잘못된 인수를 입력한 경우에는 아래와 같은 error 발생 합니다.

$command file1

Command: cannot stat "file1" : no such file or directory

 

 

한개의 명령어 라인에 여러 개의 명령어 실행

가끔 개의 명령어 라인에 한번에 여러 개의 명령어를 입력 하고, 시스템은 개의 명령어를 순차적으로 실행을 합니다. 이럴 경우는 ';'으르 사용 하면 됩니다.

 

$command_1; command_2

 

명령어들이 shell 변수를 공유 하거나 영구적인 setting 피해야 하는 경우(umask) 아래와 같이 명령어를 그룹화 하여 실행 시킬 있습니다.

 

$(foo=bar; echo $foo)

Bar

 

$echo $foo

 

$

 

ROOT 사용자

많은 네트웍 os 특권화된 사용자를 지원 합니다. 리눅스에서는 root user라고 불리 웁니다.

root user 시스템의 거의 모든 권한을 가지고 있습니다. 그리고 UID=0으로 설정이 됩니다.

 

 

User context 전환 하기

Multi-user  시스템에서는 여러 개의 사용자를 가지게 됩니다. 이럴 경우 특정 user 로그인 다른 usr 권한으로 명령을 실행을 해야 되는 경우가 있습니다. 이런 경우는 아래의 절차에 따라 실행이 되게 됩니다.

 

  1. Log out
  2. 새로운 사용자로 log in
  3. 필요한 명령어 실행
  4. Log out
  5. 기존 사용자로 login

 

위와 같이 실행을 하면 많이 번거롭기때문에 리눅스는 su라는 명령어를 제공을 합니다.  절차는 아래와 같습니다.

  1. Su - new_username
  2. 해당 명령어 실행
  3. Exit 입력

 

Su 본래의 목적은 시스템 관리자 계정인 root 권한으로 명령을 실행 시키기 위해 탄생을 하였습니다.

Sudo -i root 계정으로 전환을 시켜 줍니다.

Sudo command root 권한으로 해당 명령을 실행을 시켜 줍니다.

Sudo 명령어는 passwd 기본적으로 첫번째 입력 반복 입력 요구를 하지 않고 5 동안 패스워드를 저장을 합니다. 시간을 늘리고자 경우에는 sudo -v 실행을 하고, 취소를 할때에는 sudo -k 사용을 합니다.

 

Sudo 명령어는 security rule 평가할 많은 변수를 점검을 하게 되는데 이때 아래 5가지 포함을 하게 됩니다.

 

  1. 실행될 명령어
  2. 명령어에 전달되는 인수
  3. 명령어를 실행시키는 사용자
  4. 사용자처럼 실행될 명령어
  5. 명령어가 실행될 호스트

Sudo 모든 로그는 syslog 저장을 하고, 다른 곳으로 저장을 수도 있습니다.

 

이런 sudo 구성은 /etc/sudoers 저장이 되고, vi sudo명령을 통해 수정을 있습니다.

내용을 살펴 보면

 

$wheel    ALL = (ALL)   NOPASSWD:ALL >wheel그룹은 모든 명령어를 모든 호스트에서 패스워드 없이 실행

$operator ALL = user/local/bin/backup, /usr/sbin/lpc, /usr/sbin/lrpm > operator그룹은 모든 호스트에서

                       위의 3개의 명령어만 실행 가능

$guru   www.example.com = sudoedit /etc/hosts.allow ==> guru그룹은 example호스트에서 sudoedit 실행

 

Ssh sudo 같이 사용할 경우에는 아래 처럼 -t 옵션과 같이 사용이 되어야 합니다.

$ssh station1.example.com "sudo service cups restart"

Sudo: sorry, you must have a tty to run sudo

 

$ssh -t station1.example.com "sudo service cups restart"

 

사용자의 id 확인할 경우 아래 명령어르 ㄹ사용

$id

 

어떤 사용자로 로그인을 했는지 확인

$id -un

 

어떤 터미널을 사용중인지 확인

$tty

/dev/tty2

 

Finger 명령어 설치 하기

$su -c "yum install -y finger"

 

로그인한 사용자 모두 보기

$w

$who

 

Finger 사용하여 사용자 정보 상세 조회

$finger visitor

 

시스템에서 유효한 메로리와 RAM 확인 하기

$free

$free -m  ==> 메가 바이트 단위로 조회

$ip addr show dev eth0  ==> eth0 세부 정보 조회

$ip route ==> 라우팅 정보 조회

 

$cat /etc/resolve.conf   ==> 현재의 DNS 조회

$nmcli dev show | grep DNS ==> 현재 시스템이 사용하고 있는 DNS 조회

728x90
반응형