본문 바로가기
Server/Linux

[Linux] 리눅스 쉘과 명령어 기초

by 꼬바리 2021. 5. 26.

■ 리눅스와 쉘

- alias
alias란, 여러가지 옵션을 가지는 명령을 짧은 이름으로 대체하는 것으로써 윈도우의 바로가기 아이콘 정도로 생각하면 됩니다. 
파일/디렉토리에 있어서는 바로가기 아이콘과 유사한 기능으로 리눅스에서는 심볼릭 링크라는 개념을 사용합니다.

 

- 쉘과 쉘 스크립트
쉘이란, 운영체제에서 제공하는 명령을 실행하는 프로그램이며 운영체제의 관리하에 있는 파일, 프린팅, 하드웨어 장치, 

그리고 애플리케이션과의 인터페이스 (커뮤니케이션 채널)를 제공합니다. 

즉, 운영체제에서 제공하는 각종 명령들을 쉘 인터페이스에서 실행하면 운영체제가 그 명령에 해당하는 일을 수행하게 됩니다.

쉘 스크립트란, 인터프리터로써 다음과 같이 리눅스 시스템에서 지원하는 명령어들의 집합을 묶어서 프로그램화한 것을 말합니다. 
그리고 기본 명령어들과 함께 if문, test문 또는 loop문 등의 쉘 내장명령어 (built-in)들을 사용하기도 합니다.
쉘 스크립트는 시스템 관리자의 시스템 관련 작업이나 반복적인 작업들에 있어 유용하게 사용됩니다.

리눅스의 bash 쉘에서 $ 표시는 일반유저의 쉘을 의미합니다.
리눅스의 bash 쉘에서 # 표시는 슈퍼유저의 쉘을 의미합니다.

bash 쉘은 본 쉘 기반이기 때문에 /bin/sh 또는 /bin/bash로 실행이 가능합니다.
하지만, "./스크립트 파일명" 형식을 사용할 때에는 스크립트 파일명이 현재 쉘에 접근한 사용자에 대한 실행 권한이 주어져야 한다는 것이 특이사항입니다.

쉘 스크립트를 작성할 때 스크립트의 최상단에 본쉘일 경우 #!/bin/sh, 배시 쉘일 경우 #!/bin/bash, 파이썬일 경우 #!/usr/bin/python, 

펄일 경우 #!/usr/bin/perl을 입력하여 스크립트를 실행할 언어를 지정해야 합니다.

환경 변수에 지정된 PATH 변수의 경로 내에서 실행 파일의 이름을 검색하고자 할 때에는 "which 명령어" 형식을 사용합니다.
"whereis 명령어" 형식은 명령의 실행 파일, 소스, 맨페이지의 위치를 검색하는 명령어입니다.
물론 find 명령어도 사용 가능합니다.

■ 리눅스에서의 파일과 파일시스템
리눅스의 파일시스템은 윈도우와 다릅니다. 

원도우는 일반적으로 파티션별로 C, D, E와 같은 방식으로 구분을 하지만 리눅스는 디렉터리를 기준으로 파티션을 구성하는 방법을 사용합니다.

리눅스에서 최상의 디렉토리 (루트 디렉토리)는 /로 표시하고, 그 하위에 /root, /usr, /etc, /boot, /tmp 등으로 구분하며, 
각 디렉토리들은 파티션으로도 구성될 수 있습니다. 
즉, 하나의 파티션이 하나의 디렉토리가 될 수 있다는 의미입니다.

이와 같이 파티션을 디렉토리에 매칭시키기 위해서는 mount라는 개념을 사용합니다.
디렉토리 중 하드 디스크와 같은 디바이스 관련 파일이 있는 디렉토리는 /dev 디렉토리인데, 

이 디렉토리를 보면 여러 가지 장치들이 디바이스 파일로 매칭되어 있음을 확인할 수 있습니다. 
이 중에서 캐릭터 디바이스 파일은 쉘 프로그래밍에서 없어서는 안 될 디바이스 파일입니다.

Linux를 설치하려고하면 Linux가 다음과 같은 많은 파일 시스템을 제공함을 알 수 있습니다.

 

파일 시스템 종류 설명
Ext 오래된 것으로 제한이 많아 더 이상 사용되지 않습니다.
Ext2 2테라 바이트의 데이터가 허용되는 최초의 Linux 파일 시스템입니다.
Ext3
Ext2에서 제공되었지만 업그레이드 및 이전 버전과의 호환성이 있습니다.
이 파일 시스템은 파일 복구 또는 디스크 스냅 샷을 지원하지 않기 때문에 서버가 이러한 종류의 파일 시스템을 사용하지 않는다는 문제가 있습니다.
Ext4 더 빠른 속도로 큰 파일을 허용합니다.
SSD 디스크에 매우 적합한 옵션이며 Linux 배포판을 설치하려고 할 때, Linux가 제안하는 기본 파일 시스템입니다.
JFS IBM이 만든 이전 파일 시스템으로 작고 큰 파일에서는 매우 잘 작동하지만 오랜 시간 사용하면 실패하고 파일이 손상됩니다.
XFS 기존 파일 시스템이며 작은 파일에서는 느리게 작동합니다.
Btrfs 오라클이 제작하였고, 일부 배포판에서는 Ext만큼 안정적이지 않지만 필요한 경우 대체품이라고 말할 수 있습니다.
좋은 성능을 가지고 있습니다.

 

위의 파일 시스템 비교에서 Ext4가 Linux에 가장 적합한 파일 시스템이라는 것을 알 수 있습니다.

- rm 명령어
리눅스에는 undelete, 즉 삭제 취소 (휴지통) 명령이 없습니다.
즉, rm 명령으로 삭제한 파일은 완전히 지워진다는 것 입니다.
단, ext3 파일시스템을 사용해야 하며, ext3grep 유틸리티를 사용하면 쉽게 복구가 가능합니다.

- umask
umask란, 8진수 보수로써 파일과 디렉토리에 작용하는 마스크인데, 

리눅스 시스템에서는 기본적으로 파일이 실행 권한을 가지고 생서되지 못하도록 하고 현재 설정된 umask의 값을 확인하려면 umask 명령어를 실행하면 됩니다.

- su 명령어
su 명령을 -옵션 없이 단독으로 사용하면 유저 전환 이전에 유저가 가지고 있던 환경 변수를 그대로 사용하게 되며, 

su - 명령을 사용하면 새롭게 전환된 유저의 환경 변수를 적용하게 되기 때문에 수퍼유저로 전환 시에는 반드시 su - 명령어를 사용합니다.

- lsattr, chattr
리눅스에서는 일반적인 퍼미션뿐만 아니라 파일들에 대한 특정한 속성을 부여할 수 있습니다.
이와 같은 파일들의 속성을 출력해 보기 위해서는 lsattr 명령을 사용하고, 속성을 변경하기 위해서는 chattr 명령을 사용합니다.

■ Job Control
리눅스 멀티 태스킹이라고 하면 여러 개의 작업, 즉 여러 개의 프로세스를 동시에 사용하는 것을 말합니다.
사실상 하나의 프로세서를 가지고 있는 컴퓨터는 한 번에 하나의 프로세스만 실행할 수 있습니다.
하지만, 리눅스 커널은 동시에 실행되는 각 프로세서들을 관리할 수 있도록 구성되어 있으며 

ps, kill, jobs, bg, fg 명령어들을 사용하여 프로세스를 통제 및 관리할 수 있습니다.

<Ctrl-Z> 키를 눌러서 현재 실행되고 있는 프로그램을 잠시 멈추면, 해당 프로세스는 "idle 상태"가 됩니다.
kill 명령은 프로세스에게 시그널을 보내는 역할을 하는데, 시그널은 비동기식 이벤트 처리 메커니즘을 제공하는 소프트웨어 인터럽트를 말합니다. 
이러한 이벤트는 사용자가 주로  <Ctrl-C> 키와 같은 인터럽트 문자를 생성하는 경우처럼 시스템 외부에서 발생할 수 있으며, 

프로세스가 0으로 나누기를 수행하는 경우처럼 프로그램이나 커널 내부 작업 과정에서 발생할 수도 있습니다.

■ 시스템 관리자 명령어 정리

 

명령어 설명
uname 커널 정보와 같은 시스템 정보를 출력해 볼 수 있습니다
arch 시스템 아키텍처를 출력해줍니다. uname -m 명령과 동일합니다.
lastlog /var/log/lastlog 파일을 참고하여 모든 유저의 마지막 로그인 시간을 출력합니다.
lsof 오픈된 모든 파일의 목록을 출력합니다.
-i 옵션을 사용하면 오픈되어 있는 네트워크 소켓 파일들을 출력할 수 있습니다.
strace 주어진 명령을 실행할 때 호출하는 시스템 콜과 시그널을 추적하는 명령입니다.
ltrace  주어진 명령을 실행할 때 호출하는 라이브러리 콜을 추적하는 명령입니다.
nc TCP와 UDP 포트 커넥션과 리슨을 출력합니다.
free 메모리와 캐시 사용량을 Byte 단위로 출력합니다.
procinfo  /proc 파일 시스템에 대한 정보를 출력합니다.
lsdev  설치된 디바이스 장치들의 목록을 출력합니다.
du 디스크의 파일 사용량을 출력합니다.
재귀적으로 출력하며 특정 디렉토리를 지정할 수도 있습니다.
df 파일 시스템의 파티션 사용량을 출력합니다.
dmesg  부팅 시 콘솔에 출력된 메세지들을 출력합니다.
stat  주어진 파일의 각종 정보 (block, inode 등)를 출력합니다.
vmstat  가상 메모리 통계를 출력합니다.
netstat  현재 네트워크 통계와 정보를 출력합니다. 
만약 현재 오픈되어 있는 포트 목록을 출력하고자 한다면 -lptu 옵션을 사용합니다.

 

■ 프로세스 관리와 부팅
- init
init 프로세스는 모든 프로세스의 부모 프로세스 (PID 1번)이며, 부팅 시 /etc/inittab 파일에 설정된 런레벨을 결정합니다.
init 명령과 함께 런레벨을 지정하여 실행하면 해당 런레벨로 시스템을 변경하게 됩니다.
init 명령은 수퍼유저만 사용할 수 있으며, /etc/inittab 파일을 출력해보면 총 7개의 런레벨을 제공하는 것을 알 수 있습니다.

- runlevel
Xwindow GUI 모드의 경우 런레벨 5를 사용하고, 서버의 경우 런레벨 3으로 운영합니다.

- service
service 명령은 시스템 서비스를 시작하고 중지하기 위해 사용합니다.
리눅스의 시작스크립트 원본 경로는 /etc/rc.d/init.d 혹은 심볼릭 링크된 /etc/init.d이며,

부팅 시 7개의 렌레벨별 시작스크립트 (심볼릭 링크 파일) 위치는 /etc/rc.d 디렉토리 아래에 런레별별 디렉터리명으로 존재합니다.

 

출처 : https://coding-chobo.tistory.com/47

728x90
반응형

댓글