본문 바로가기
리눅스 공부

DevOps Day 4 (3/10) - 리눅스 운영체제_출력 관련 명령어

by Jackykim 2023. 3. 13.

표준 스트림과 stdin, stdout, stderr
표준 스트림에서 스트림 (stream) 이란, 프로그램을 드나드는 데이터를 흐름으로 표현한 단어입니다. 어떤 입력을 받으면 어떤 형태의 출력을 내놓습니다.


stdin :
표준 입력은 프로그램으로 들어가는 입력값의 데이터(보통은 문자열) 스트림이며, Standard Inputstdin으로 줄여 표현합니다. 대표적으로 비밀번호를 입력할 때 이러한 표준 입력 스트림을 사용합니다.
stdout :
표준 출력은 프로그램이 출력 데이터를 기록하는 스트림으로, Standard Outputstdout으로 줄여 표현합니다.
stderr :
표준 오류는 프로그램이 오류 메세지나 진단을 출력하기 위해 일반적으로 쓰이는 또다른 출력 스트림이며, Standard Errorstderr로 줄여 표현합니다.

 

파이프라인과 리다이렉션
리다이렉션은 이러한 표준 스트림의 흐름을 바꿔 파일로 표준 입/출력을 할 수 있도록 합니다. 리다이렉션을 쓰고 싶다면 기호인 < >를 사용합니다.
*
예시 ps aux > ps.txt -> ps aux 명령의 출력 결과를 ps.txt 파일에 저장합니다

* 추가 예시 $ head < ps.txt > sample.txt
1. ps.txt 의 내용을 head 명령의 입력 스트림으로 전환하여 전송합니다.

2. head 명령은 입력 받은 ps.txt 의 내용에서 처음 10줄을 출력합니다.

3. head 명령의 출력 스트림을 sample.txt 파일에 연결합니다.

4. head 명령의 출력 스트림은 결과를 sample.txt 파일에 저장합니다.

파이프 (Pipe)
파이프는 어떤 명령의 결과를 다시 어떤 명령의 입력으로 받아야 할 때 사용되며, 프로세스1의 출력 스트림을 프로세스2의 입력 스트림으로 사용할 때 파이프 기호 | 를 사용하여 아래와 같은 형식으로 작성합니다.
*
에시 ls -1 명령으로 표준 출력을 하고, 출력 된 내용을 ssh 이라는 인자를 전달 받는 grep 명령에 표준 입력으로 전달시키는 파이프를 만들어 보겠습니다.

출력 관련 명령어 파일 읽기
man :
매뉴얼(도움말 보기) 명령어 : 원하는 명령어 앞에 man을 붙여주면 그 명령어에 대한 사용법을 자세히 알려줍니다.
cat :
파일 내용 출력
more :
파일을 화면 단위로 끊어서 출력 : 파일 내용을 확인하는 명령어 중 화면 단위로 끊어서 출력하는 명령어입니다.
less :
파일 내용 출력 : 터미널 세션을 방해하지 않으면서 화살표키 만으로도 파일 내에서 양방향으로 탐색할 수 있습니다.
head :
파일 앞부분 출력 :
기본적으로 상단의 10개의 라인을 출력합니다
tail :
파일 뒷부분 출력 : 파일의 마지막 행을 기준으로 지정한 행까지의 파일 내용 일부를 출력합니다. 기본 값으로 마지막 10줄을 출력해 줍니다.

Action Item – 리눅스 명령어는 어떻게 쓰이는지 알아봅니다.
wc : Count the number of lines, words and characters in a file (-l lines, -w words, -c characters)
grep (global regular expression print) : Allows you to search for a string of characters in a specified file and print all lines containing the search string to the screen. (-c count how many lines contain your search string, -n to print the lines containing your search string with their line numbers in the file, -v to print all lines that don’t contain your search string)
SED : common use is for string substitution (find and replace) e.g sed ‘s/find/replace/’ myfile.txt
cut : command allows you to easily extract particular columns from a file
paste : allows you to join files horizontally whereby each line of the specified files will be joined by a tab, turning each line into a column.
sort : Is useful for sorting lines or columns within a file.
awk : Powerful command for working with columns based data
find : allows you to search for particular files or directories within a given file hierarchy.

 

출력 관련 명령어 파일 및 디렉토리 찾기
find :
파일 검색

locate : 특정 파일 위치 찾기 : 특정 파일의 위치를 모를 때 활용할 수 있는 명령
which :
실행파일 위치 식별 : 특정 매개 변수를 취하여 $path 시스템 환경변수에서 이진 파일을 매우 효과적으로 검색합니다.

 

출력 관련 명령어 패턴으로 찾기 (grep)
정규 표현식 (regular expression) : 정규 표현식이란 특정 규칙을 가진 문자열 집합을 표현하기 위한 형식 언어로써, 주로 문자열 패턴 매칭을 검사하거나 또는 문자열을 치환하기 위해 사용이 됩니다.

Chapter : 시스템 관리자가 하는 일
-
접근 제어 :
관리자 권한을 이용해 사용자를 관리하고, 시스템에 속한 사용자가 암호를 잊거나 키 쌍(key pair)을 분실하였을 때를 대비합니다. 또한, 사용자 및 그룹 별로 적절한 권한을 제공하는 일 역시 시스템 관리자의 역할입니다

-
업무 자동화 : 반복적인 작업은 반드시 자동화를 해서 사람이 직접 손으로 해서 발생할 수 있는 실수를 최소화해야 합니다.

-
재난 대비 : 언제든 망가질 수 있는 재난 대비하여 데이터를 백업하고, 필요에 따라서 복구할 수 있어야 합니다.

-
애플리케이션 배포 및 관리 : 애플리케이션이 지속적으로 새 버전이 배포되는지, 문제는 없는지 확인하고, 이에 필요한 환경을 구축해야 합니다. 운영체제의 보안 패치, 런타임의 버전 관리도 이에 포함됩니다.

-
모니터링 : 모니터링을 통해 서버 자원(cpu, 디스크 사용량 등)의 여유를 감시하고, 로그 파일을 수집/분석하는 것이 필요합니다. 여기에는 해커의 접근이나 보안 취약점을 발견하고 감사하는 작업도 포함합니다. (문제 예방)

-
기타 :
-
내부 문서 관리
-
접근 정책 설정 : 누가 어떤 권한을 가질 것인가에 대한 정책을 설정
-
클라우드 서비스의 요금 관리
-
하드웨어 추가 : 클라우드 서비스를 사용하는 추세에 따라, 실제로 하드웨어 관리를 하는 경우는 많이 줄어들었지만, 간혹 시스템 관리자에게 이러한 역량을 요구하는 경우도 있음

 

접근 제어의 기본
사용자와 관리자 : 사용자는 우리가 일상적으로 PC를 켜서 바탕화면에 진입하기 위해 로그인하는 계정입니다. 그리고 관리자는 사용자가 접근할 수 없는 영역에 접근할 수 있는 높은 권한을 가지고 있습니다. 악성코드 (malicious code)으로부터 보호하기 위해 Microsoft 에서는 사용자 계정 컨트롤’ (UAC) 탑재했습니다. 관리자와 사용자를 구분하여 어떤 프로그램을 설치, 변경 또는 삭제하는 권한이 있고 어떤 프로그램은 변경 할 수 없도록 제한이 있습니다.

리눅스의 표준 접근 제어 모델 : 리눅스는 처음부터 다중 사용자가 컴퓨터를 사용하는 환경을 상정하고 디자인되었습니다. 이러한 이유로, 리눅스는 접근 제어에 대한 분명한 원칙이 존재하며, 이를 우리는접근 제어 모델이라고 부릅니다.
1.
파일 (파일 및 디렉터리)은 소유자 (owner)가 있다. 그러나 소유했다고 모든 권한을 갖는 것은 아니다.
2.
파일은 생성한 사람이 소유한다.
3.
권리자(root)만 할 수 있는 일이 있다.

Whoami : 사용자 확인 -> 현재 로그인된 사용자를 확인하는 명령

홈 디렉토리 : 사용자는 개별적으로 각자의 홈 디렉토리를 가지고 있습니다.

파일 및 디렉토리의 소유자(사용자) 및 그룹 : 리눅스에서는 사용자 뿐 아니라, 여러 사용자를 묶은그룹이라는 개념도 함께 존재합니다.

 

루트 권한
sudo :
사용자 환경에서, 루트 권한을 획득하는 명령어입니다.

루트 권한으로만 가능한 작업:
-
하드웨어 장치 추가 생성
-
시스템 시간 설정
- hostname (
네트워크 이름) 설정
-
네트워크 인터페이스 설정
- 1024
번 이하의 포트 오픈
-
시스템 종료

Su : (substitute user identity) 사용자의 대리자라는 의미

sudo의 장점
-
명령 로그가 기록된다.
-
사용자들은 무제한의 루트 권한 없이 특정 작업을 수행할 수 있다.

-
사용자가 루트 비밀번호를 몰라도 된다. (사용자 비밀번호를 이용하므로)
-
sudosu를 사용하거나, 루트로 로그인하는 것보다 빠르다.
-
루트 암호를 변경하지 않고도, 부여된 특권을 취소할 수 있다.
-
루트 권한을 갖는 모든 사용자의 목록을 관리할 수 있다. (sudoers 파일이라고 부릅니다.)

sudo의 단점
반면 sudo의 단점도 존재합니다.
- sudo 사용자 개인 계정의 보안이 뚫리면, 루트 계정 자체가 뚫린 것과 마찬가지가 된다.
-
sudo 명령 기록은 sudo를 이용해 지울 수 있다. (다만 이러한 시도를 했다는 것을 명령어 로그를 통해 알 수 있다.)

환경 변수
운영체제 혹은 소프트웨어가, 각기 다른 컴퓨터 또는 사용자마다 별도로 가질 수 있는 고유한 정보를 담는데 사용하는 변수를 환경 변수라고 합니다. Env 명령어로 환경변수를 확인 가능
shell :
어떤 종류의 쉘(대화형 인터페이스)을 사용할지 선택하는 환경 변수
home :
디렉토리가 무엇인지 알려주는 환경 변수
path :
어디서든 해당 디렉토리에 있는 실행 파일을 실행할 있게 만들어주는 환경 변수

Export : 환경 변수를 임시로 적용하기
명령어 export를 이용하면, 새로운 환경변수를 추가할 수 있습니다. 등호 표시(Equal sign, =) 앞뒤에는 반드시 공백이 없어야 합니다.

환경 변수는 왜 필요한가요?
대표적인 예는 서비스를 운영하는 상황이 달라질 사용합니다.

Read, Write, Execute 권한
폴더 linux 권한은 rwxr-xr-x 으로, 소유자는 읽기와 쓰기, 실행이 가능하고, 다른 사용자 그룹은 읽기와 실행만 가능합니다.

- user : 파일의 소유자. 기본적으로 파일을 만든 사람이 소유자가 됩니다.
- group :
여러 user 포함될 있습니다. 그룹에 속한 모든 user 파일에 대한 동일한 액세스 권한을 갖습니다.
- other :
파일에 대한 액세스 권한이 있는 다른 user 입니다.

Chmod : 권한을 변경하는 명령어
명령어 chmod 폴더나 파일의 읽기, 쓰기, 실행 권한을 변경할 수 있습니다.

 

Absolute form은 숫자 7까지 나타내는 3 bits의 합으로 표기합니다.
- read (r) : 4
- Write (w) : 2
- Execute (x) : 1

발표
[C214] 표준스트림과 stdin, stdout, stderr이 무엇인가요?

 

표준 스트림에서 스트림 (stream) 이란, 프로그램을 드나드는 데이터를 흐름으로 표현한 단어입니다. 프로그램은 표준스트림을 통해 입력을 박고 출력을 내보내며, 환경은 프로그램에게 입력을 전달하고 출력을 받습니다.

- stdin :
표준 입력은 프로그램으로 들어가는 입력값의 데이터(보통은 문자열) 스트림이며, Standard Inputstdin으로 줄여 표현합니다. 대표적으로 비밀번호를 입력할 때 이러한 표준 입력 스트림을 사용합니다.

- stdout :
표준 출력은 프로그램이 출력 데이터를 기록하는 스트림으로, Standard Outputstdout으로 줄여 표현합니다.

- stderr :
표준 오류는 프로그램이 오류 메세지나 진단을 출력하기 위해 일반적으로 쓰이는 또다른 출력 스트림이며, Standard Errorstderr로 줄여 표현합니다.

 

[C215] 파이프라인과 리다이렉션이 무엇인지 예시를 들어 설명하세요.
파이프라인은 어떤 명령의 결과를 다시 어떤 명령의 입력으로 받아야 할 때 사용되며, 프로세스1의 출력 스트림을 프로세스2의 입력 스트림으로 사용할 때 파이프 기호 | 를 사용합니다.
디렉토리의 파일 목록을 ‘cat” 명령어로 출력한 후, 그 결과를 ‘grep - v” 명령어로 Gatsby.txt“he” 확장자를 가진 내용만 출력합니다.

리다이렉션은 표준 스트림의 흐름을 바꿔 파일로 표준 입/출력을 할 수 있도록 합니다. 리다이렉션을 쓰고 싶다면 기호인 < > >> 를 사용합니다.
>
명령의 결과를 파일로 저장
>>
명령의 결과를 기존 파일에 추가
<
파일의 데이터를 명령에 입력
디렉토리에 ls > result.txt 할 경우 해당 디렉토리에 result.txt가 생성됩니다.

반대로 cat < result.txt 할 경우 ‘result.txt’ 파일을 표준 입력으로 받아와서 ‘cat’ 명령어로 출력하는 방식입니다.