교재 읽기!
커맨드라인분석 (21장. 출력 포맷 지정)
1. 간단한 포맷 툴
nl - 줄 번호 매기기
단순히 줄 번호를 매기는 간단한 작업을 하는 툴. cat -n처럼 간단히 사용할 수 있다
$ nl distros.txt | head
- 커맨드라인 인자나 표준입력으로 복수의 파일명도 허용한다
- nl은 번호를 붙일 때 논리적 페이지(logical pages) 라는 개념을 제공한다. nl이 번호를 붙일 때 순서를 다시 처음부터 시작할 수 있도록 허용하는 것이다.
테스트 | 설명 |
---|---|
::: | 논리적 페이지의 머리말 시작 |
:: | 논리적 페이지의 본문 시작 |
: | 논리적 페이지의 꼬리말 시작 |
옵션 | 의미 |
---|---|
b styLe | 본문의 줄 번호에 스타일을 적용한다 style은 다음 중 하나를 사용할 수 있다. • a 모든줄에 번호를붙인다 • t 공백 줄이 아닌 경우에만 번호를 붙인다 기본값이다 • n 번호를 붙이지 는다 • pregexp 기본 정규 표현식과 일치하는 줄에만 번호를 붙인다 |
-f styLe | 꼬리말의 줄 번호에 스타일을 적용한다 기본값은 n |
-h styLe | 머리말의 줄 번호에 스타일을 적용한다. 기본값은 n |
-i number | 페이지 번호의 증가량을 number로 설정한다 가본값은 1. |
-n format | 줄 번호 포맷을 설정한다 format은 다음 중 하나를 사용할 수 있다 • ln 0 없이. 왼쪽 정렬 • rn 0 없이. 오른쪽 정렬 기본값이다 • rz 0 포함. 오른쪽 정렬 |
-p | 각 논리 페이지의 시작 부분에서 페이지 번호를 재설정 못하게 한다 |
-s string | string을 구분자로 만들기 위해 각 줄 호의 끝에 추가한다. 기본값은 탭 문자. |
-v number | 각 논리 페이지의 첫째 줄 번호를 number로 설정한다 기본값은 1. |
-w width | width를 줄 호 필드의 너비로 설정한EK 기본값은 6 |
fold - 지정된 길이로 줄 나누기
폴딩(folding)은 텍스트 행을 지정된 길이로 나누는 절차다. fold 도 다른 명령들차람, 하나 이상의 텍스트 파일이나 표준 입력을 허용한다. 간단한 텍스트 열을 fold에 보내면 어떻게 동작하는지 볼 수 있다.
echo "The quick brown for jumped over the lazy dog." | fold -w 12
-- 실행결과
The quick
brown fox
jumped over
the lazy
dog.
fmt - 간단한 텍스트 포매터
fmt 프로그램도 텍스트를 자른다. 게다가 더 많은 것을 할 수 있다. 파일이나 표준 입력을 허용하고 텍스트 열의 문장 포맷을 지정한다. 기본적으로, 공백 과 들여쓰기를 유지하면서 텍스트를 합치거나 채운다.
$ fmt -w 50 fmt-info.txt | head
fmt 옵션
옵션 | 설명 |
---|---|
-c | crown margin 모드로 동작하게 한다. 이는 문단 첫 두 줄의 들여쓰기를 유지한다. 그 다음 줄부터는 두 번째 줄의 들여쓰기에 맞게 정렬된다. |
-p string | string을 접두어로 줄을 시작하게 만든다. 그 이후에 string의 내용은 각 줄 앞에 붙여진다. 이 옵션은 소스 코드 주석을 구성하는 데 사용될 수 있다. 예를 들면, 어떤 프로그래밍 언어나 설정 파일은 # 문자를 주석 처리하는데 사용된다. 이를 위해 -p ‘#’ 옵션을 사용하면 주석으로 만들 수 있다. |
-s | 분할 모드, 이 모드에서는 각 줄은 지정된 “열 너비에 딱 맞게” 분할될 것이다. 짧은 줄은 너비를 채우기 위헤서 합쳐지 않을 것이다. 이 모드는 합쳐지길 원하지 않는 코드와 같은 텍스트를 구성할 때 유리하다 |
-u | 간격을 균등하게 유지한다. 이는 전통적인 타자기 스타일의 텍스트를 구성하게 될 것이다. 이는 단어 사이의 하나의 공백, 문자 사이는 두 개의 공백으로 처리한다. 이 모드는 강제로 왼쪽과 오른쪽 여백을 정렬하는 양쪽 정렬을 제거하려고 할 경우에 유리하다 |
-w width | width 값을 기준으로 열을 구성한다. 기본값은 75자다. |
pr - 인쇄용 텍스트 포맷 지정
pr 프로그램은 텍스트에 페이지 매기기 위해 텍스트를 인쇄할 때, 종종 각 페이지의 처음과 끝에 여백을 넣기 위해 여러 줄을 공백으로 출력 페이지를 구분하기 를 한다. 추가적 이 공백은 각 페이지에 머리말과 꼬리말을 삽입하기 위해 사용될 수 있다.
-- distros.txt 파일을 매우 짧은 페이지들로 구성
$ pr -1 15 -w 65 distros.txt
printf - 자료의 출력 및 포맷 지정
일반 텍스트 + 이스케이프 문자열(개행문자인 \n처럼) +변환 지정어(%기호로 시작하는 것)
$ printf "I formatted the string: %s\n" foo
-- I formatted the strinf: foo
주요 print 자료형지정자(옵션)
지정자 | 설명 |
---|---|
d | 부호를 가진 10진수 형태로 만든다 |
f | 부호를 가진 10진수 형태로 만들고 출력한다. |
s | 8진수형 태로 해보려고 |
x | 문자열 형태로 만든다 |
x | 소문자 a에서 f를 이용해서 |
% | 부호를 부동 소스점 수 형태로 만들고 출력한다 |
2. 문서 포맷 시스템
이 장의 른 명령어들과 달리 . printf 명령어는 프라인에서 용도 도 않고(표준 입력 을 허
용하지 않는 , 커맨드라인의 흔한 로그램에서도 직접적으로 발견 지 대부분 스크립트에
서 사용된다). 그럼 왜 그것이 요한가? 왜냐하면 꽤 광범위하게 사용되기 때문이다.
roff 계열과 TEX
실무에서는 두 가지 계열의 문서 포매터가 가장 두드러졌다. nroff와 troff를 포함한 roff 프로그 램 과 도널드 크누스의 TEX(“tek” 라고 발음) 조판 시스템 계열이다. 그리고 당연히 그 중간의 아래로 내려온 “E”는 의 일부다.
→ 복잡성과 대다수의 현 리눅스 배포판에는 기본적으로 설치되지 않기 때문에 다루지 않을 것
groff - 문서 포맷 시스템
문서 포맷 프로그램의 명령은 마크업 언어 사용을 통해 구성된 텍스 트에 포함되어 였다. 현재 그와 유사한 절차를 가진 것은 웹 페이지다. 웹페이지는 일종의 텍스트 편집기 를 사용하여 작성하고 나서 페이지 레이아웃을 술한 마크업 언어인 HTML을 사용하여 웹 브라우저 에 의해 최종 구현된다.
압축 풀기
apache @zcat /usr/share/man/man1/ls.1.gz |head
. \" DO NOT MODIFY THIS FILE ! It was generated by help2man 1. 35 .
. TH LS "1" "April 2008" "GNU coreutils 6 .10" "User Commands "
.SH NAME
ls \- list directory contents
.SH SYNOPSIS
.B ls
[\fIOPTION\fR] ... [\fIFILE\fR] ...
. SH DESCRIPTION
.\" Add any additional description here
. PP
groff 프로그램과 mandoc 매크로 패키지와 ASCII용 출력 드라이버 명시한 옵션
→ 포스트스크립트 형식으로 출력
- 포스트스크립트는 사진 식자기와 유사한 장치에 인쇄 페이지 내용물을 기술하기 위해 사용되는 페이지 기술 언어
[me@linuxbox ~] $ zcat /usr/share/man/manl/ls .1. gz I groff -mandoc I head
%!PS-Adobe-3.0
%%Creator: groff version 1.18.1
%%CreationDate: Thu Feb 2 13 :44 :37 2012
%%DocumentNeededResources: font Times-Roman
%%+ font Times-Bold
%%+ font Times-Italic
%%DocumentSuppliedResources: procset grops 1.18 1
%%Pages : 4
%%Page0rder: Ascend
%%Orientation : Portrait
리눅스 프로그래밍 1-1. 리눅스 기초
1. 처음 시작하기
리눅스는 기업이나 공공기관, 학교 동 정보 시스템 서비스를 제공하는 서버의
운영체계로 많이 시용되는 소프트웨어이다. 리눅스 운영체계를 개인용 PC의 윈
도우 운영체계를 대신하는 운영체계로 시용할- 수도 있다. 또한 스마트폰에서 많
이 사용되는 안드로이드 운영체계에 기본 바탕은 리눅스로 구성되어 있다.
리눅스와 유닉스
리눅스와 유닉스는 대용량 정보처리가 가능한 서버를 운영할 수 있는 대표적 인 운영체계 중 하나이다.
-
운영체계(Operating System, OS)
컴퓨터의 하드웨어와 소프트웨어를 제어하여 사용자가 컴퓨터를 쓸수 있게 만들어 주는프로그램이다.
- 유닉스와 리눅스 비교
- 유닉스 → 중대형 서버 시스템에서 가장 많이 사용되는 OS
- 리눅스 → 1991년 리누스 토발즈가 중대형 기종에서만 작동하던 유닉스 운영체계를 PC에서도 작동할 수 있게 만듦
- 리눅스 기능
- 오픈 소스, 어느 플랫폼에도 포팅이 가능하다
- 커널 쉘 유틸리티 : 리눅스 운영체계는 커널, 쉘, 유틸리티 3부분으로 구분된다.
- 커널 (Kernel) • 사용자가 작동시키는 어플리케이션과 하드웨어 사이에서의 조정자 역할을 한다 • 컴퓨터 운영체계 부분의 핵심이며 하드웨어에 따라 다른 버전이 존재하며 . 하드웨어 진화에 따라 같이 진화한다. (http://www.kernel.org/).
- 쉘 (Shell) • 커널과 사용자간의 페이스로서 중간매개의 역할을담당한다. • 명령어를 해석하고 명령과 관련된 유틸리티나 커널을 호출하고 실행 결과를 출력한다. • Dos의 command.com 같이 기본제공 OS 명령어를수행하는곳이다. • 윈도우에서 탐색기의 왼쪽 마우스 메뉴의 압축 기능과 같은 기본 명령이다.
- 유틸리티 Utility)
• 사용자가 시스템을 편하게 시용-하기 위한 용용 프로그램이다.
• 시용-자 입장에서는 Shell 과 유틸리티의 구분이 필요 없다.
• dir. ping. rype. 좀 더 편리하게 사용하기 위해 만들어서 제공하는 명령 시
스템이댜
• 윈도우에서 알집 등좀더 편리하게 만든압축프로그램을사용하는명령이다.
리눅스의 종류
- 데스크탑(Desktop) 형식
- 일반 사용자 PC의 Windows 운영체 와 유사한 형식이댜
- 윈도우의 상용성에 웅하여 GNU 정신을 입각하여 태동하였댜(무료 윈도우)
- 서버의 용도로 시용할 수 있지만, 실제 서버 환경을 운영하는 데 윈도우 형태의 GUI가 불필요한서버 리소스를사용한다.
- 다양한 GUI 를 하는 경우 데스크탑 형식을 설치하여 서버로 사용할 수도있다.
- 서버(Server) 형식
- 불필요한 윈도우 GUI 를 없애고. 서버용으로 적합하계 구성된 리눅스 형식이다
- 본 에서는 리눅스 령어 실습` 리눅스 쉘 프로그래밍을 익히기 에 적절한 형식인 서버 형식으로 실습을 진행한다.
2. 서버로 접속하기
설치한 리눅스는 서버 형식으로 대용량 정보 처리 및 다수의 사용자에게 정보 서비스를 제공하는 서
버 용도로 이용하는 시스템이다. 서버는 개인용 PC 는 달리 직접 바로 옆에 두고 사용하는 경우보다는 서버실이나 인터넷 데이터 센터 (IDC) 에 원거리에 위치하고, 관리지는 이 서버를 원격 속하는 경우가 대부분이다. 이 서버에 접속하는 방법과 간단한 명령어를 활용해보겠다.
사용자 등록, 패스워드 설정
- 관리자(Root)와 일반 사용자
- 사용자 계정: 운영체계를 사용하는 시용자 계정이다
- 관리자 계정 : 운영체계에서 슈퍼 사용자(Super user), 운용 관리자(Adminstrator) 또는 루트 (Root) 는 시스템 관리자가 시스템 제어를 위한 별한 권한을 가지고 있는 시용자 계정이다.
- 사용자(User 와 그룹(Group)
- 유닉스, 리눅스 시스템은 여러 사람이 사용하는 다중 시용자 운영체계이다.
- 시용자묶음의 그룹 개념이 존재한다. • root 라는 사용자는 관리자 권한을 가진 용자임 • kopoct 라는 사용자를 관리자 그룹(root 그룹)에 포함시 키 면 root 그룹의 권한을공유할수있음.
- 사용자는 여러 개의 그룹에 포함될 수 있다.
- 현재의 시용자와 그룹을 알아보는 명령어는 id. groups 이다.
- 사용자 및 그룹 관리
- 사용자 등록, 그룹 등록: adduser, addgroup
- 사용자 삭제, 그룹 삭제 : deluser, delgroup
- 자기의 권한에 맞는 사용자만 등록하거나 삭제할 수 있음
- 패스워드 설정
-
명령어를 통해 패스워드를 입력하고, 권한에 때라 패스워드 설정이 가능하다
→ 일반사용자가 패스워드를 잊어버렸을 경우 root 권한으로 접속하여 변경 가능함
-
권한 획득, 명령어 도움말
- 권한 획득
- 권한 획득을하는방법은다음두가지 방법이 있다.
- 다른 사용자로 재 로그인
- 잠시 다른 사용자의 권한을 얻어올 수 있는 법
- sudo : 쉘 명령어 라인에서 root의 권한을 잠시 사용한다. (sud o 명령은 sudo 등록이 되어 있는 경우에만 시용 가능)
- su-userid : 잠시 른사용자의 권한으로 접속한다.
- ‘su-’ 명령은 ‘su- root’와 동일하다.
- 권한 획득을하는방법은다음두가지 방법이 있다.
- 명령어 도움말
- man 명령: 명령어 도움말을 보여준다. (manual) • 예) man adduser: adduse 라는 명령어를 설명함
- 리눅스유닉스명령은쉘상태에서 영문약자형식으로되어 있다.
- 특히 인자(argument) . 옵션 등을 알고자 할 때 유용한 명 령 어 이 댜
가상 터미널(telnet/ssh)
리눅스 서버 에 직접 접속된 모니터는 콘솔 Console) 이라고 부르며, 원격지에서 서버로 접속하는 대표적인 방법은 telnet이나 ssh 서비스로 접속하는 방법이 있다.
프로그램 설치
- apt-get
- 우분투 리눅스 시스템에서 프로그램을 설치해 주는 명령어
- apt-get 명령어는 root 계정으로 사용하여야함.
- ~ sudo
- 일반 시용자가 잠시 Root 권한을 시용하고자 하는 명령어
- 사용 사례
- sudo ape-get update: Root 권한으로 ape-get 이라는 명령어를 update라는 옵션울 가지고 실행. 설치할 수 있는 프로그램 리스트를 인터넷을 통하여 새로 받는 명령이다.
- 가상터미널
- 전용서버(가상머신[VM] 서버)를사용하기 위한 원격지 프로그램으로 ssh, telnet 등이 있다.
- telnet: 서 버의 네트워크를 통하여 원격으로 접속하는 방식 규약(프로토콜)
- ssh: telnet 과 동일한 역할을 히는 프로그램으로 보안이 강화된 방식으로 접속을 함.
ssh 설치 및 설정
- ssh 설치
- 서버에 ssh 프로그램 패키지를 다음 명령어로 설치함. —-> sudo apt-get install ssh
- telnet 설치
- 서버에 xintd, telnet 프로그램 패키지를 설치함.
- a) xinetd 설치
- inet 는 네트워크 서 스 데몬으로 ln 을 사용하기 위한 필수 요소입니다
- sudo apt-get install xinetd 명령으로 설치
- b) telnet 설치
- telnetd는 텔넷 서 비스 데몬으로 telnet을 서용하기 위한 필수 요소임
- sudo apt-get insraJI telnetd 명령으로 설치
- c) xinetd 설정
- xinetd 설정 파일에 telnet 이 동작하도록 설정
- 다음 명령어로 설정 파일올 편집기(에디터)로 편깁 : vi /etc/xinetd.conf
- 아래 내용을 편집하는 파일 하단에 추가함. 저장후파일을닫음.