Unix / Linux-빠른 가이드
유닉스 란?
Unix 운영 체제는 컴퓨터와 사용자 간의 링크 역할을하는 일련의 프로그램입니다.
시스템 리소스를 할당하고 컴퓨터 내부의 모든 세부 사항을 조정하는 컴퓨터 프로그램을 operating system 아니면 그 kernel.
사용자는 다음과 같은 프로그램을 통해 커널과 통신합니다. shell. 쉘은 명령 줄 인터프리터입니다. 사용자가 입력 한 명령을 번역하고 커널이 이해하는 언어로 변환합니다.
Unix는 원래 1969 년에 Bell Labs의 AT & T 직원 Ken Thompson, Dennis Ritchie, Douglas McIlroy 및 Joe Ossanna에 의해 개발되었습니다.
시장에는 다양한 유닉스 변형이 있습니다. Solaris Unix, AIX, HP Unix 및 BSD가 몇 가지 예입니다. Linux는 또한 자유롭게 사용할 수있는 Unix의 풍미입니다.
여러 사람이 동시에 Unix 컴퓨터를 사용할 수 있습니다. 따라서 Unix는 다중 사용자 시스템이라고합니다.
사용자는 동시에 여러 프로그램을 실행할 수도 있습니다. 따라서 Unix는 멀티 태스킹 환경입니다.
유닉스 아키텍처
다음은 유닉스 시스템의 기본 블록 다이어그램입니다.
Unix의 모든 버전을 통합하는 주요 개념은 다음 네 가지 기본 사항입니다.
Kernel− 커널은 운영 체제의 핵심입니다. 하드웨어 및 메모리 관리, 작업 예약 및 파일 관리와 같은 대부분의 작업과 상호 작용합니다.
Shell− 쉘은 요청을 처리하는 유틸리티입니다. 터미널에 명령을 입력하면 쉘이 명령을 해석하고 원하는 프로그램을 호출합니다. 쉘은 모든 명령에 표준 구문을 사용합니다. C Shell, Bourne Shell 및 Korn Shell은 대부분의 Unix 변형에서 사용할 수있는 가장 유명한 셸입니다.
Commands and Utilities − 일상적인 활동에서 사용할 수있는 다양한 명령과 유틸리티가 있습니다. cp, mv, cat 과 grep등은 명령 및 유틸리티의 몇 가지 예입니다. 3를 통해 제공되는 이상 250 표준 명령 플러스 수많은 사람들이 있습니다 번째의 파티 소프트웨어. 모든 명령은 다양한 옵션과 함께 제공됩니다.
Files and Directories− Unix의 모든 데이터는 파일로 구성됩니다. 그런 다음 모든 파일이 디렉토리로 구성됩니다. 이 디렉토리는 트리와 같은 구조로 더 구성됩니다.filesystem.
시스템 부팅
Unix 운영 체제가 설치된 컴퓨터가있는 경우 시스템을 켜서 활성화하기 만하면됩니다.
시스템을 켜 자마자 부팅이 시작되고 마지막으로 시스템에 로그인하라는 메시지가 표시됩니다. 이는 시스템에 로그인하여 일상적인 활동에 사용하는 활동입니다.
로그인 Unix
처음 Unix 시스템에 연결하면 일반적으로 다음과 같은 프롬프트가 표시됩니다.
login:
로그인하기
사용자 ID (사용자 ID)와 암호를 준비하십시오. 아직없는 경우 시스템 관리자에게 문의하십시오.
로그인 프롬프트에서 사용자 ID를 입력 한 다음 ENTER. 귀하의 사용자 ID는case-sensitive이므로 시스템 관리자가 지시 한대로 정확하게 입력해야합니다.
암호 프롬프트에서 암호를 입력 한 다음 ENTER. 비밀번호도 대소 문자를 구분합니다.
올바른 사용자 ID와 암호를 제공하면 시스템에 들어갈 수 있습니다. 다음과 같이 화면에 나타나는 정보와 메시지를 읽으십시오.
login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$
명령 프롬프트 (때때로 $프롬프트) 모든 명령을 입력합니다. 예를 들어 달력을 확인하려면 다음을 입력해야합니다.cal 다음과 같이 명령-
$ cal June 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $
비밀번호 변경
모든 Unix 시스템은 파일과 데이터를 자신의 소유로 유지하고 시스템 자체를 해커와 크래커로부터 안전하게 보호하기 위해 암호가 필요합니다. 다음은 비밀번호를 변경하는 단계입니다.
Step 1 − 시작하려면 아래와 같이 명령 프롬프트에서 password를 입력합니다.
Step 2 − 현재 사용중인 이전 비밀번호를 입력합니다.
Step 3− 새 암호를 입력하십시오. 아무도 추측 할 수 없도록 항상 암호를 복잡하게 유지하십시오. 하지만 꼭 기억하세요.
Step 4 − 비밀번호를 다시 입력하여 확인해야합니다.
$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $
Note− 시스템에서 현재 암호와 새 암호를 입력해야하는 위치를 표시하기 위해 여기에 별표 (*)를 추가했습니다. 입력 할 때 문자가 표시되지 않습니다.
디렉토리 및 파일 나열
Unix의 모든 데이터는 파일로 구성됩니다. 모든 파일은 디렉토리로 구성됩니다. 이러한 디렉토리는 파일 시스템이라고하는 트리와 같은 구조로 구성됩니다.
사용할 수 있습니다 ls명령은 디렉토리에서 사용 가능한 모든 파일 또는 디렉토리를 나열합니다. 다음은 사용 예입니다.ls 명령 -l 선택권.
$ ls -l total 19621 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml -rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia -rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar drwxr-xr-x 8 root root 4096 Nov 25 2007 usr -rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php -rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar -rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid -rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf $
다음으로 시작하는 항목 d.....디렉토리를 나타냅니다. 예를 들어, uml, univ 및 urlspedia는 디렉토리이고 나머지 항목은 파일입니다.
당신은 누구입니까?
시스템에 로그인되어있는 동안 다음 사항을 알고 싶을 수 있습니다. Who am I?
"당신이 누구인지"를 찾는 가장 쉬운 방법은 whoami 명령-
$ whoami amrood $
시스템에서 시도해보십시오. 이 명령은 현재 로그인과 관련된 계정 이름을 나열합니다. 당신은 시도 할 수 있습니다who am i 자신에 대한 정보를 얻을 수 있습니다.
누가 로그인되어 있습니까?
때때로 당신은 누가 동시에 컴퓨터에 로그인했는지 알고 싶을 수도 있습니다.
다른 사용자에 대해 알고 싶은 정도에 따라이 정보를 얻을 수있는 세 가지 명령이 있습니다. users, who, 및 w.
$ users amrood bablu qadir $ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu ttyp2 Oct 4 09:08 (calliope)
qadir ttyp4 Oct 8 12:09 (dent)
$
시도 w시스템에서 명령을 실행하여 출력을 확인하십시오. 시스템에 로그인 한 사용자와 관련된 정보가 나열됩니다.
로그 아웃하다
세션을 마치면 시스템에서 로그 아웃해야합니다. 이것은 다른 사람이 파일에 액세스하지 못하도록하기위한 것입니다.
To log out
그냥 입력 logout 명령 프롬프트에서 명령을 실행하면 시스템이 모든 것을 정리하고 연결을 끊습니다.
시스템 종료
명령 줄을 통해 Unix 시스템을 올바르게 종료하는 가장 일관된 방법은 다음 명령 중 하나를 사용하는 것입니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | halt 시스템을 즉시 종료합니다. |
2 | init 0 사전 정의 된 스크립트를 사용하여 시스템을 종료하기 전에 시스템을 동기화하고 정리합니다. |
삼 | init 6 시스템을 완전히 종료 한 다음 다시 시작하여 시스템을 재부팅합니다. |
4 | poweroff 전원을 꺼서 시스템을 종료합니다. |
5 | reboot 시스템을 재부팅합니다. |
6 | shutdown 시스템 종료 |
일반적으로 시스템을 종료하려면 수퍼 유저 또는 루트 (Unix 시스템에서 가장 권한있는 계정) 여야합니다. 그러나 일부 독립형 또는 개인 소유의 Unix 상자에서는 관리 사용자와 때로는 일반 사용자가 그렇게 할 수 있습니다.
이 장에서는 Unix의 파일 관리에 대해 자세히 설명합니다. Unix의 모든 데이터는 파일로 구성됩니다. 모든 파일은 디렉토리로 구성됩니다. 이러한 디렉토리는 파일 시스템이라고하는 트리와 같은 구조로 구성됩니다.
어떤 식 으로든 Unix로 작업 할 때 대부분의 시간을 파일 작업에 보냅니다. 이 튜토리얼은 파일 생성 및 제거, 파일 복사 및 이름 변경, 링크 생성 방법 등을 이해하는 데 도움이됩니다.
Unix에는 세 가지 기본 유형의 파일이 있습니다.
Ordinary Files− 일반 파일은 데이터, 텍스트 또는 프로그램 명령을 포함하는 시스템의 파일입니다. 이 튜토리얼에서는 일반 파일 작업을 살펴 봅니다.
Directories− 디렉토리는 특수 파일과 일반 파일을 모두 저장합니다. Windows 또는 Mac OS에 익숙한 사용자의 경우 Unix 디렉토리는 폴더와 동일합니다.
Special Files− 일부 특수 파일은 하드 드라이브, CD-ROM 드라이브, 모뎀 및 이더넷 어댑터와 같은 하드웨어에 대한 액세스를 제공합니다. 다른 특수 파일은 별칭 또는 바로 가기와 유사하며 다른 이름을 사용하여 단일 파일에 액세스 할 수 있습니다.
파일 나열
현재 디렉토리에 저장된 파일과 디렉토리를 나열하려면 다음 명령을 사용하십시오.
$ls
다음은 위 명령의 샘플 출력입니다.
$ls
bin hosts lib res.03
ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
명령 ls 지원합니다 -l 나열된 파일에 대한 자세한 정보를 얻는 데 도움이되는 옵션-
$ls -l
total 1962188
drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root 4096 Nov 25 2007 usr
drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
$
여기에 나열된 모든 열에 대한 정보가 있습니다-
First Column− 파일 유형과 파일에 부여 된 권한을 나타냅니다. 다음은 모든 유형의 파일에 대한 설명입니다.
Second Column − 파일 또는 디렉토리가 차지하는 메모리 블록의 수를 나타냅니다.
Third Column− 파일의 소유자를 나타냅니다. 이 파일을 만든 Unix 사용자입니다.
Fourth Column− 소유자 그룹을 나타냅니다. 모든 Unix 사용자는 관련 그룹을 갖게됩니다.
Fifth Column − 파일 크기를 바이트 단위로 나타냅니다.
Sixth Column −이 파일이 마지막으로 생성 또는 수정 된 날짜와 시간을 나타냅니다.
Seventh Column − 파일 또는 디렉토리 이름을 나타냅니다.
에서 ls -l 예를 들어, 모든 파일 행은 d, -, 또는 l. 이러한 문자는 나열된 파일의 유형을 나타냅니다.
Sr. 아니. | 접두사 및 설명 |
---|---|
1 | - ASCII 텍스트 파일, 바이너리 실행 파일 또는 하드 링크와 같은 일반 파일. |
2 | b 특수 파일 차단. 물리적 하드 드라이브와 같은 입력 / 출력 장치 파일을 차단합니다. |
삼 | c 캐릭터 특수 파일. 물리적 하드 드라이브와 같은 원시 입 / 출력 장치 파일. |
4 | d 다른 파일 및 디렉토리 목록이 포함 된 디렉토리 파일입니다. |
5 | l 심볼릭 링크 파일. 일반 파일에 대한 링크. |
6 | p 명명 된 파이프. 프로세스 간 통신을위한 메커니즘입니다. |
7 | s 프로세스 간 통신에 사용되는 소켓입니다. |
메타 문자
메타 문자는 Unix에서 특별한 의미를 갖습니다. 예를 들면* 과 ?메타 문자입니다. 우리는 사용* 0 개 이상의 문자와 일치하려면 물음표 (?)는 단일 문자와 일치합니다.
예를 들어-
$ls ch*.doc
이름이 다음으로 시작하는 모든 파일을 표시합니다. ch 그리고 끝 .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc c
여기, *모든 문자와 일치하는 메타 문자로 작동합니다. 다음으로 끝나는 모든 파일을 표시하려면.doc, 다음 명령을 사용할 수 있습니다-
$ls *.doc
숨겨진 파일
보이지 않는 파일은 첫 번째 문자가 점 또는 마침표 (.) 인 파일입니다. Unix 프로그램 (셸 포함)은 이러한 파일 대부분을 사용하여 구성 정보를 저장합니다.
숨겨진 파일의 몇 가지 일반적인 예는 다음과 같습니다.
.profile − Bourne 쉘 (sh) 초기화 스크립트
.kshrc − Korn 쉘 (ksh) 초기화 스크립트
.cshrc − C 쉘 (csh) 초기화 스크립트
.rhosts − 원격 셸 구성 파일
보이지 않는 파일을 나열하려면 -a 옵션 ls −
$ ls -a
. .profile docs lib test_results
.. .rhosts hosts pub users
.emacs bin hw1 res.01 work
.exrc ch07 hw2 res.02
.kshrc ch07.bak hw3 res.03
$
Single dot (.) − 현재 디렉토리를 나타냅니다.
Double dot (..) − 이것은 상위 디렉토리를 나타냅니다.
파일 생성
사용할 수 있습니다 vi모든 Unix 시스템에서 일반 파일을 생성하는 편집기. 다음 명령을 내리기 만하면됩니다.
$ vi filename
위의 명령은 주어진 파일 이름으로 파일을 엽니 다. 이제 키를 눌러i편집 모드로 들어갑니다. 편집 모드에 있으면 다음 프로그램에서와 같이 파일에 콘텐츠 쓰기를 시작할 수 있습니다.
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
프로그램이 끝나면 다음 단계를 따르십시오.
키 누르기 esc 편집 모드에서 나옵니다.
두 개의 키 누르기 Shift + ZZ 함께 파일에서 완전히 나오도록합니다.
이제 다음으로 만든 파일이 있습니다. filename 현재 디렉토리에서.
$ vi filename $
파일 편집
다음을 사용하여 기존 파일을 편집 할 수 있습니다. vi편집자. 기존 파일을 여는 방법에 대해 간단히 설명합니다.
$ vi filename
파일이 열리면 키를 눌러 편집 모드로 들어갈 수 있습니다. i그런 다음 파일을 편집하여 계속할 수 있습니다. 파일 내에서 여기 저기 이동하려면 먼저 키를 눌러 편집 모드에서 나와야합니다.Esc. 그 후, 다음 키를 사용하여 파일 내부로 이동할 수 있습니다.
l 키를 눌러 오른쪽으로 이동합니다.
h 키를 눌러 왼쪽으로 이동합니다.
k 키를 눌러 파일에서 위쪽으로 이동합니다.
j 파일에서 아래쪽으로 이동하려면 키를 누릅니다.
따라서 위의 키를 사용하여 편집하려는 위치에 커서를 배치 할 수 있습니다. 포지셔닝되면 다음을 사용할 수 있습니다.i키를 눌러 편집 모드로 들어갑니다. 파일 편집이 완료되면Esc 마지막으로 두 개의 키 Shift + ZZ 함께 파일에서 완전히 나오도록합니다.
파일 내용 표시
사용할 수 있습니다 cat명령을 사용하여 파일 내용을 확인하십시오. 다음은 위에서 생성 된 파일의 내용을 볼 수있는 간단한 예입니다.
$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$
다음을 사용하여 줄 번호를 표시 할 수 있습니다. -b 옵션과 함께 cat 다음과 같이 명령-
$ cat -b filename
1 This is unix file....I created it for the first time.....
2 I'm going to save this content in this file.
$
파일에서 단어 세기
사용할 수 있습니다 wc명령을 사용하여 파일에 포함 된 총 줄, 단어 및 문자 수를 가져옵니다. 다음은 위에서 만든 파일에 대한 정보를 보는 간단한 예입니다.
$ wc filename
2 19 103 filename
$
다음은 네 개의 모든 열에 대한 세부 정보입니다.
First Column − 파일의 총 줄 수를 나타냅니다.
Second Column − 파일의 총 단어 수를 나타냅니다.
Third Column− 파일의 총 바이트 수를 나타냅니다. 이것은 파일의 실제 크기입니다.
Fourth Column − 파일 이름을 나타냅니다.
여러 파일을 제공하고 한 번에 해당 파일에 대한 정보를 얻을 수 있습니다. 다음은 간단한 구문입니다-
$ wc filename1 filename2 filename3
파일 복사
파일의 사본을 만들려면 cp명령. 명령의 기본 구문은 다음과 같습니다.
$ cp source_file destination_file
다음은 기존 파일의 복사본을 만드는 예입니다. filename.
$ cp filename copyfile
$
이제 하나 이상의 파일을 찾을 수 있습니다. copyfile현재 디렉토리에서. 이 파일은 원본 파일과 정확히 동일합니다.filename.
파일 이름 바꾸기
파일 이름을 변경하려면 mv명령. 다음은 기본 구문입니다-
$ mv old_file new_file
다음 프로그램은 기존 파일의 이름을 바꿉니다. filename ...에 newfile.
$ mv filename newfile $
그만큼 mv명령은 기존 파일을 새 파일로 완전히 이동합니다. 이 경우에는newfile 현재 디렉토리에서.
파일 삭제
기존 파일을 삭제하려면 rm명령. 다음은 기본 구문입니다-
$ rm filename
Caution− 파일에는 유용한 정보가 포함될 수 있습니다. 이것을 사용하는 동안 항상 조심하는 것이 좋습니다Delete명령. 사용하는 것이 좋습니다-i 옵션과 함께 rm 명령.
다음은 기존 파일을 완전히 제거하는 방법을 보여주는 예입니다. filename.
$ rm filename
$
아래에 주어진 명령으로 한 번에 여러 파일을 제거 할 수 있습니다.
$ rm filename1 filename2 filename3
$
표준 Unix 스트림
정상적인 상황에서 모든 유닉스 프로그램은 시작할 때 세 개의 스트림 (파일)이 열려 있습니다.
stdin−이를 표준 입력 이라고 하며 관련 파일 설명자는 0입니다. 이는 STDIN으로도 표시됩니다. Unix 프로그램은 STDIN에서 기본 입력을 읽습니다.
stdout−이를 표준 출력 이라고 하며 관련 파일 설명자는 1입니다. 이는 STDOUT으로도 표시됩니다. Unix 프로그램은 STDOUT에 기본 출력을 작성합니다.
stderr−이를 표준 오류 라고 하며 관련 파일 설명자는 2입니다. 이는 STDERR로도 표시됩니다. Unix 프로그램은 STDERR에 모든 오류 메시지를 기록합니다.
이 장에서는 Unix의 디렉토리 관리에 대해 자세히 설명합니다.
디렉토리는 파일 이름과 관련 정보를 저장하는 솔로 작업 파일입니다. 일반, 특수 또는 디렉토리에 관계없이 모든 파일이 디렉토리에 포함됩니다.
Unix는 파일과 디렉토리를 구성하기 위해 계층 구조를 사용합니다. 이 구조를 종종 디렉토리 트리라고합니다. 트리에는 단일 루트 노드 인 슬래시 문자 (/) 및 기타 모든 디렉토리가 그 아래에 포함됩니다.
홈 디렉토리
처음 로그인 할 때 자신이있는 디렉토리를 홈 디렉토리라고합니다.
파일을 구성하기 위해 만들 홈 디렉터리와 하위 디렉터리에서 대부분의 작업을 수행하게됩니다.
다음 명령을 사용하여 언제든지 홈 디렉토리로 이동할 수 있습니다.
$cd ~
$
여기 ~홈 디렉토리를 나타냅니다. 다른 사용자의 홈 디렉토리로 이동해야한다고 가정하고 다음 명령을 사용합니다.
$cd ~username
$
마지막 디렉토리로 이동하려면 다음 명령을 사용할 수 있습니다.
$cd -
$
절대 / 상대 경로명
디렉터리는 루트 (/)가 맨 위에있는 계층 구조로 정렬됩니다. 계층 구조 내에서 파일의 위치는 경로 이름으로 설명됩니다.
경로 이름의 요소는 /로 구분됩니다. 루트와 관련하여 설명되는 경우 경로 이름은 절대적이므로 절대 경로 이름은 항상 /로 시작합니다.
다음은 절대 파일 이름의 몇 가지 예입니다.
/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
경로 이름은 현재 작업 디렉토리에 상대적 일 수도 있습니다. 상대 경로 이름은 /로 시작하지 않습니다. 사용자 amrood의 홈 디렉토리에 비해 일부 경로 이름은 다음과 같습니다.
chem/notes
personal/res
언제든지 파일 시스템 계층 구조 내에서 현재 위치를 확인하려면 다음 명령을 입력하십시오. pwd 현재 작업 디렉토리를 인쇄하려면-
$pwd
/user0/home/amrood
$
디렉토리 나열
디렉토리에있는 파일을 나열하려면 다음 구문을 사용할 수 있습니다.
$ls dirname
다음은 포함 된 모든 파일을 나열하는 예입니다. /usr/local 디렉토리-
$ls /usr/local
X11 bin gimp jikes sbin
ace doc include lib share
atalk etc info man ami
디렉토리 생성
이제 디렉토리를 만드는 방법을 이해할 것입니다. 디렉토리는 다음 명령에 의해 생성됩니다-
$mkdir dirname
여기서 directory는 만들려는 디렉터리의 절대 또는 상대 경로 이름입니다. 예를 들어, 명령-
$mkdir mydir $
디렉토리를 만듭니다. mydir현재 디렉토리에서. 여기 또 다른 예가 있습니다.
$mkdir /tmp/test-dir $
이 명령은 디렉토리를 만듭니다. test-dir 에 /tmp예배 규칙서. 그만큼mkdir 명령은 요청 된 디렉토리를 성공적으로 생성 한 경우 출력을 생성하지 않습니다.
명령 줄에 둘 이상의 디렉토리를 제공하면 mkdir각 디렉토리를 만듭니다. 예를 들어,-
$mkdir docs pub $
현재 디렉토리 아래에 docs 및 pub 디렉토리를 만듭니다.
부모 디렉터리 생성
이제 부모 디렉터리를 만드는 방법을 이해합니다. 때로는 디렉토리를 만들려고 할 때 상위 디렉토리가 존재하지 않을 수 있습니다. 이 경우mkdir 다음과 같이 오류 메시지를 발행합니다-
$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $
이러한 경우 다음을 지정할 수 있습니다. -p 옵션에 mkdir명령. 필요한 모든 디렉토리를 생성합니다. 예를 들면-
$mkdir -p /tmp/amrood/test $
위의 명령은 필요한 모든 상위 디렉토리를 만듭니다.
디렉토리 제거
디렉토리는 다음을 사용하여 삭제할 수 있습니다. rmdir 다음과 같이 명령-
$rmdir dirname $
Note − 디렉토리를 제거하려면 비어 있는지 확인하십시오. 즉,이 디렉토리 안에 파일이나 하위 디렉토리가 없어야합니다.
다음과 같이 한 번에 여러 디렉토리를 제거 할 수 있습니다.
$rmdir dirname1 dirname2 dirname3 $
위의 명령은 dirname1, dirname2 및 dirname3 디렉토리가 비어있는 경우이를 제거합니다. 그만큼rmdir 명령이 성공하면 출력을 생성하지 않습니다.
디렉토리 변경
사용할 수 있습니다 cd명령은 홈 디렉토리로 변경하는 것 이상을 수행합니다. 유효한 절대 또는 상대 경로를 지정하여 디렉토리를 변경하는 데 사용할 수 있습니다. 구문은 다음과 같습니다.
$cd dirname $
여기, dirname변경하려는 디렉토리의 이름입니다. 예를 들어, 명령-
$cd /usr/local/bin $
디렉토리 변경 /usr/local/bin. 이 디렉토리에서 다음을 수행 할 수 있습니다.cd 디렉토리로 /usr/home/amrood 다음 상대 경로를 사용하여-
$cd ../../home/amrood $
디렉토리 이름 바꾸기
그만큼 mv (move)명령을 사용하여 디렉토리 이름을 바꿀 수도 있습니다. 구문은 다음과 같습니다-
$mv olddir newdir $
디렉토리 이름을 바꿀 수 있습니다. mydir ...에 yourdir 다음과 같이-
$mv mydir yourdir $
디렉토리. (점) 및 .. (점점)
그만큼 filename .(점)은 현재 작업 디렉토리를 나타냅니다. 그리고filename .. (점)은 현재 작업 디렉토리보다 한 수준 높은 디렉토리를 나타내며 종종 상위 디렉토리라고합니다.
현재 작업 디렉토리 / 파일 목록을 표시하는 명령을 입력하고 -a option 모든 파일을 나열하고 -l option 긴 목록을 제공하기 위해 다음과 같은 결과를 받게됩니다.
$ls -la drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 . drwxr-xr-x 60 root 1536 Jul 13 14:18 .. ---------- 1 teacher class 4210 May 1 08:27 .profile -rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo $
이 장에서는 Unix의 파일 권한 및 액세스 모드에 대해 자세히 설명합니다. 파일 소유권은 안전한 파일 저장 방법을 제공하는 Unix의 중요한 구성 요소입니다. Unix의 모든 파일에는 다음과 같은 속성이 있습니다.
Owner permissions − 소유자의 권한은 파일 소유자가 파일에 대해 수행 할 수있는 작업을 결정합니다.
Group permissions − 그룹의 권한은 파일이 속한 그룹의 구성원 인 사용자가 파일에서 수행 할 수있는 작업을 결정합니다.
Other (world) permissions − 다른 사용자의 권한은 다른 모든 사용자가 파일에서 수행 할 수있는 작업을 나타냅니다.
권한 표시기
사용 중 ls -l 명령을 실행하면 다음과 같이 파일 권한과 관련된 다양한 정보를 표시합니다.
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
여기에서 첫 번째 열은 서로 다른 액세스 모드, 즉 파일 또는 디렉토리와 관련된 권한을 나타냅니다.
권한은 3 개 그룹으로 나뉘며 그룹의 각 위치는 읽기 (r), 쓰기 (w), 실행 (x) 순서로 특정 권한을 나타냅니다.
처음 세 문자 (2-4)는 파일 소유자의 권한을 나타냅니다. 예를 들면-rwxr-xr-- 소유자에게 읽기 (r), 쓰기 (w) 및 실행 (x) 권한이 있음을 나타냅니다.
세 문자의 두 번째 그룹 (5-7)은 파일이 속한 그룹에 대한 권한으로 구성됩니다. 예를 들면-rwxr-xr-- 그룹에 읽기 (r) 및 실행 (x) 권한이 있지만 쓰기 권한이 없음을 나타냅니다.
마지막 세 문자 그룹 (8-10)은 다른 모든 사용자의 권한을 나타냅니다. 예를 들면-rwxr-xr-- 있음을 나타냅니다 read (r) 유일한 허가.
파일 액세스 모드
파일의 권한은 유닉스 시스템 보안의 첫 번째 방어선입니다. Unix 권한의 기본 구성 요소는 다음과 같습니다.read, write, 및 execute 아래에 설명 된 권한-
읽다
읽기, 즉 파일 내용을 볼 수있는 기능을 부여합니다.
쓰다
파일 내용을 수정하거나 제거 할 수있는 기능을 부여합니다.
실행
실행 권한이있는 사용자는 파일을 프로그램으로 실행할 수 있습니다.
디렉토리 액세스 모드
디렉토리 액세스 모드는 다른 파일과 동일한 방식으로 나열되고 구성됩니다. 언급해야 할 몇 가지 차이점이 있습니다.
읽다
디렉토리에 대한 액세스는 사용자가 내용을 읽을 수 있음을 의미합니다. 사용자는filenames 디렉토리 내부.
쓰다
액세스는 사용자가 디렉토리에서 파일을 추가하거나 삭제할 수 있음을 의미합니다.
실행
디렉토리를 실행하는 것은 실제로 의미가 없으므로이를 트래버스 권한으로 생각하십시오.
사용자는 execute 에 대한 액세스 bin 실행하기 위해 디렉토리 ls 아니면 그 cd 명령.
권한 변경
파일 또는 디렉토리 권한을 변경하려면 chmod(모드 변경) 명령. chmod를 사용하는 방법에는 심볼릭 모드와 절대 모드의 두 가지가 있습니다.
기호 모드에서 chmod 사용
초보자가 파일 또는 디렉토리 권한을 수정하는 가장 쉬운 방법은 기호 모드를 사용하는 것입니다. 기호 권한을 사용하면 다음 표의 연산자를 사용하여 원하는 권한 집합을 추가, 삭제 또는 지정할 수 있습니다.
Sr. 아니. | Chmod 연산자 및 설명 |
---|---|
1 | + 파일 또는 디렉토리에 지정된 권한을 추가합니다. |
2 | - 파일 또는 디렉토리에서 지정된 권한을 제거합니다. |
삼 | = 지정된 권한을 설정합니다. |
다음은 testfile. 달리는ls -1 testfile에서 파일의 권한은 다음과 같습니다.
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
그런 다음 각 예 chmod 위 표의 명령이 테스트 파일에서 실행되고 그 뒤에 ls –l, 그래서 당신은 권한 변경을 볼 수 있습니다-
$chmod o+wx testfile $ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile $ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
이러한 명령을 한 줄에 결합하는 방법은 다음과 같습니다.
$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
절대 권한으로 chmod 사용
chmod 명령으로 권한을 수정하는 두 번째 방법은 숫자를 사용하여 파일에 대한 각 권한 집합을 지정하는 것입니다.
다음 표에 표시된 것처럼 각 권한에는 값이 할당되며 각 권한 집합의 합계는 해당 집합에 대한 숫자를 제공합니다.
번호 | 8 진법 권한 표현 | Ref |
---|---|---|
0 | 비허가 | --- |
1 | 실행 권한 | --엑스 |
2 | 쓰기 권한 | -w- |
3 | 실행 및 쓰기 권한 : 1 (실행) + 2 (쓰기) = 3 | -wx |
4 | 읽기 권한 | 아르 자형-- |
5 | 읽기 및 실행 권한 : 4 (읽기) + 1 (실행) = 5 | rx |
6 | 읽기 및 쓰기 권한 : 4 (읽기) + 2 (쓰기) = 6 | rw- |
7 | 모든 권한 : 4 (읽기) + 2 (쓰기) + 1 (실행) = 7 | rwx |
다음은 testfile을 사용하는 예입니다. 달리는ls -1 testfile에서 파일의 권한은 다음과 같습니다.
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
그런 다음 각 예 chmod 위 표의 명령이 테스트 파일에서 실행되고 그 뒤에 ls –l, 그래서 당신은 권한 변경을 볼 수 있습니다-
$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
소유자 및 그룹 변경
Unix에서 계정을 생성하는 동안 owner ID 그리고 group ID각 사용자에게. 위에서 언급 한 모든 권한은 소유자 및 그룹에 따라 할당됩니다.
소유자와 파일 그룹을 변경하려면 두 가지 명령을 사용할 수 있습니다.
chown − chown 명령은 "change owner" 파일 소유자를 변경하는 데 사용됩니다.
chgrp − chgrp 명령은 "change group" 파일 그룹을 변경하는 데 사용됩니다.
소유권 변경
그만큼 chown명령은 파일의 소유권을 변경합니다. 기본 구문은 다음과 같습니다.
$ chown user filelist
사용자의 값은 다음 중 하나 일 수 있습니다. name of a user 시스템 또는 user id (uid) 시스템에있는 사용자의.
다음 예는 개념을 이해하는 데 도움이됩니다.
$ chown amrood testfile $
주어진 파일의 소유자를 사용자로 변경합니다. amrood.
NOTE − 수퍼 유저 인 root는 모든 파일의 소유권을 변경할 수있는 무제한 기능이 있지만 일반 사용자는 자신이 소유 한 파일의 소유권 만 변경할 수 있습니다.
그룹 소유권 변경
그만큼 chgrp명령은 파일의 그룹 소유권을 변경합니다. 기본 구문은 다음과 같습니다.
$ chgrp group filelist
그룹의 값은 name of a group 시스템 또는 the group ID (GID) 시스템에있는 그룹의.
다음 예는 개념을 이해하는 데 도움이됩니다.
$ chgrp special testfile
$
주어진 파일의 그룹을 다음으로 변경합니다. special 그룹.
SUID 및 SGID 파일 권한
종종 명령이 실행될 때 작업을 수행하기 위해 특별한 권한으로 실행되어야합니다.
예를 들어, passwd 명령을 내리면 새 비밀번호가 파일에 저장됩니다. /etc/shadow.
일반 사용자로서 귀하는 read 또는 write보안상의 이유로이 파일에 액세스 할 수 있지만 암호를 변경할 때이 파일에 대한 쓰기 권한이 있어야합니다. 이것은passwd 프로그램은 파일에 쓸 수 있도록 추가 권한을 부여해야합니다. /etc/shadow.
추가 권한은 다음과 같은 메커니즘을 통해 프로그램에 부여됩니다. Set User ID (SUID) 과 Set Group ID (SGID) 비트.
SUID 비트가 활성화 된 프로그램을 실행하면 해당 프로그램 소유자의 권한을 상속합니다. SUID 비트가 설정되지 않은 프로그램은 프로그램을 시작한 사용자의 권한으로 실행됩니다.
SGID도 마찬가지입니다. 일반적으로 프로그램은 그룹 권한으로 실행되지만 대신이 프로그램에 대한 그룹은 프로그램의 그룹 소유자로 변경됩니다.
SUID 및 SGID 비트는 문자로 나타납니다. "s"권한이있는 경우. SUID"s" 비트는 소유자의 권한 비트에 위치합니다. execute 일반적으로 권한이 있습니다.
예를 들어, 명령-
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
SUID 비트가 설정되어 있고 명령이 루트에서 소유하고 있음을 나타냅니다. 대문자S 소문자 대신 실행 위치 s 실행 비트가 설정되지 않았 음을 나타냅니다.
디렉토리에서 고정 비트가 활성화 된 경우 다음 사용자 중 하나 인 경우에만 파일을 제거 할 수 있습니다.
- 고정 디렉토리의 소유자
- 제거되는 파일의 소유자
- 수퍼 유저, 루트
모든 디렉토리에 대해 SUID 및 SGID 비트를 설정하려면 다음 명령을 시도하십시오.
$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $
이 장에서는 Unix 환경에 대해 자세히 설명합니다. 중요한 Unix 개념은environment, 환경 변수에 의해 정의됩니다. 일부는 시스템에 의해 설정되고 다른 일부는 사용자가 설정하지만 다른 일부는 쉘 또는 다른 프로그램을로드하는 프로그램에 의해 설정됩니다.
변수는 값을 할당하는 문자열입니다. 할당 된 값은 숫자, 텍스트, 파일 이름, 장치 또는 기타 데이터 유형일 수 있습니다.
예를 들어 먼저 변수 TEST를 설정 한 다음 echo 명령-
$TEST="Unix Programming" $echo $TEST
다음 결과가 생성됩니다.
Unix Programming
환경 변수는 $서명하지만 액세스하는 동안 $ 기호를 접두사로 사용합니다. 이러한 변수는 쉘에서 나올 때까지 값을 유지합니다.
시스템에 로그인하면 쉘은 다음과 같은 단계를 거칩니다. initialization환경을 설정합니다. 이것은 일반적으로 다음 파일을 읽는 쉘을 포함하는 2 단계 프로세스입니다.
- /etc/profile
- profile
과정은 다음과 같습니다-
쉘은 파일이 /etc/profile 존재합니다.
존재하는 경우 쉘은이를 읽습니다. 그렇지 않으면이 파일을 건너 뜁니다. 오류 메시지가 표시되지 않습니다.
쉘은 파일이 .profile홈 디렉토리에 있습니다. 홈 디렉토리는 로그인 후 시작하는 디렉토리입니다.
존재하는 경우 쉘은이를 읽습니다. 그렇지 않으면 쉘이이를 건너 뜁니다. 오류 메시지가 표시되지 않습니다.
이 두 파일을 모두 읽 자마자 쉘은 프롬프트를 표시합니다.
$
명령을 실행하기 위해 명령을 입력 할 수있는 프롬프트입니다.
Note − 여기에 설명 된 셸 초기화 프로세스는 모든 Bourne 유형 쉘이지만 일부 추가 파일은 bash 과 ksh.
.profile 파일
파일 /etc/profile Unix 컴퓨터의 시스템 관리자가 유지 관리하며 시스템의 모든 사용자에게 필요한 셸 초기화 정보를 포함합니다.
파일 .profile당신의 통제하에 있습니다. 이 파일에 원하는만큼의 쉘 사용자 화 정보를 추가 할 수 있습니다. 구성해야하는 최소한의 정보 세트는 다음과 같습니다.
- 사용중인 터미널 유형입니다.
- 명령을 찾을 디렉토리 목록입니다.
- 터미널의 모양과 느낌에 영향을 미치는 변수 목록입니다.
당신은 당신의 .profile홈 디렉토리에서 사용할 수 있습니다. vi 편집기를 사용하여 열고 환경에 설정된 모든 변수를 확인하십시오.
터미널 유형 설정
일반적으로 사용중인 터미널 유형은 다음 중 하나에 의해 자동으로 구성됩니다. login 또는 getty프로그램들. 때로는 자동 구성 프로세스가 터미널을 잘못 추측합니다.
터미널이 잘못 설정되면 명령 출력이 이상하게 보이거나 셸과 제대로 상호 작용하지 못할 수 있습니다.
이것이 사실이 아닌지 확인하기 위해 대부분의 사용자는 다음과 같은 방법으로 터미널을 가장 낮은 공통 분모로 설정합니다.
$TERM=vt100 $
PATH 설정
명령 프롬프트에 명령을 입력 할 때 쉘은 명령을 실행하기 전에 해당 명령을 찾아야합니다.
PATH 변수는 쉘이 명령을 찾아야하는 위치를 지정합니다. 일반적으로 Path 변수는 다음과 같이 설정됩니다.
$PATH=/bin:/usr/bin $
여기서 콜론 문자로 구분 된 각 개별 항목은 (:)디렉토리입니다. 쉘에 명령을 실행하도록 요청했는데 PATH 변수에 지정된 디렉토리에서 찾을 수없는 경우 다음과 유사한 메시지가 나타납니다.
$hello hello: not found $
다음 섹션에서 설명하는 PS1 및 PS2와 같은 변수가 있습니다.
PS1 및 PS2 변수
쉘이 명령 프롬프트로 표시하는 문자는 변수 PS1에 저장됩니다. 이 변수를 원하는대로 변경할 수 있습니다. 변경하자마자 그 시점부터 셸에서 사용됩니다.
예를 들어, 명령을 내렸다면-
$PS1='=>'
=>
=>
=>
프롬프트는 =>가됩니다. 값을 설정하려면PS1 작업 디렉토리를 표시하도록 다음 명령을 실행하십시오.
=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
이 명령의 결과는 프롬프트에 사용자의 사용자 이름, 시스템 이름 (호스트 이름) 및 작업 디렉토리가 표시됩니다.
꽤 있습니다 escape sequencesPS1의 값 인수로 사용할 수 있습니다. 프롬프트가 정보를 압도하지 않도록 자신을 가장 중요한 것으로 제한하십시오.
Sr. 아니. | 탈출 시퀀스 및 설명 |
---|---|
1 | \t HH : MM : SS로 표현되는 현재 시간 |
2 | \d Weekday Month Date로 표시되는 현재 날짜 |
삼 | \n 개행 |
4 | \s 현재 셸 환경 |
5 | \W 작업 디렉토리 |
6 | \w 작업 디렉토리의 전체 경로 |
7 | \u 현재 사용자의 사용자 이름 |
8 | \h 현재 컴퓨터의 호스트 이름 |
9 | \# 현재 명령의 명령 번호입니다. 새 명령이 입력되면 증가합니다. |
10 | \$ 유효 UID가 0이면 (즉, 루트로 로그인 한 경우) # 문자로 프롬프트를 종료하십시오. 그렇지 않으면 $ 기호를 사용하십시오. |
로그인 할 때마다 직접 변경하거나 PS1에 추가하여 자동으로 변경할 수 있습니다. .profile 파일.
불완전한 명령을 실행하면 쉘은 보조 프롬프트를 표시하고 명령을 완료하고 Enter 다시.
기본 보조 프롬프트는 > (보다 큼 기호)를 다시 정의하여 변경할 수 있습니다. PS2 쉘 변수-
다음은 기본 보조 프롬프트를 사용하는 예입니다.
$ echo "this is a > test" this is a test $
아래의 예제는 사용자 지정 프롬프트로 PS2를 다시 정의합니다.
$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$
환경 변수
다음은 중요한 환경 변수의 일부 목록입니다. 이러한 변수는 아래에 언급 된대로 설정되고 액세스됩니다.
Sr. 아니. | 변수 및 설명 |
---|---|
1 | DISPLAY 디스플레이에 대한 식별자를 포함합니다. X11 프로그램은 기본적으로 사용해야합니다. |
2 | HOME 현재 사용자의 홈 디렉토리 (cd의 기본 인수)를 나타냅니다. built-in 명령. |
삼 | IFS 나타냅니다 Internal Field Separator 확장 후 단어 분할을 위해 파서에서 사용됩니다. |
4 | LANG LANG은 기본 시스템 로케일로 확장됩니다. LC_ALL을 사용하여이를 대체 할 수 있습니다. 예를 들어 값이pt_BR이면 언어가 (브라질) 포르투갈어로 설정되고 로케일은 브라질로 설정됩니다. |
5 | LD_LIBRARY_PATH 동적 링커가있는 Unix 시스템에는 다른 디렉토리에서 검색하기 전에 exec 후 프로세스 이미지를 빌드 할 때 동적 링커가 공유 객체를 검색해야하는 콜론으로 구분 된 디렉토리 목록이 포함되어 있습니다. |
6 | PATH 명령의 검색 경로를 나타냅니다. 쉘이 명령을 찾는 콜론으로 구분 된 디렉토리 목록입니다. |
7 | PWD cd 명령으로 설정된 현재 작업 디렉토리를 나타냅니다. |
8 | RANDOM 참조 될 때마다 0에서 32,767 사이의 임의의 정수를 생성합니다. |
9 | SHLVL bash의 인스턴스가 시작될 때마다 하나씩 증가합니다. 이 변수는 내장 종료 명령이 현재 세션을 종료하는지 여부를 판별하는 데 유용합니다. |
10 | TERM 디스플레이 유형을 나타냅니다. |
11 | TZ 시간대를 나타냅니다. GMT, AST 등과 같은 값을 사용할 수 있습니다. |
12 | UID 쉘 시작시 초기화 된 현재 사용자의 숫자 사용자 ID로 확장됩니다. |
다음은 몇 가지 환경 변수를 보여주는 샘플 예입니다.
$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $
이 장에서는 Unix의 기본 유틸리티 인 인쇄 및 전자 메일에 대해 자세히 설명합니다. 지금까지 우리는 Unix OS와 기본 명령의 특성을 이해하려고 노력했습니다. 이 장에서는 일상 생활에서 사용할 수있는 몇 가지 중요한 Unix 유틸리티를 배웁니다.
파일 인쇄
Unix 시스템에서 파일을 인쇄하기 전에 여백을 조정하고 일부 단어를 강조 표시하는 등의 작업을 다시 포맷 할 수 있습니다. 대부분의 파일은 형식을 다시 지정하지 않고도 인쇄 할 수 있지만 원시 인쇄물은 그다지 매력적이지 않을 수 있습니다.
많은 버전의 Unix에는 두 가지 강력한 텍스트 포맷터가 포함되어 있습니다. nroff 과 troff.
pr 명령
그만큼 pr명령은 터미널 화면 또는 프린터에서 파일의 사소한 형식화를 수행합니다. 예를 들어 파일에 긴 이름 목록이있는 경우 화면에서 두 개 이상의 열로 형식을 지정할 수 있습니다.
다음은 pr 명령-
pr option(s) filename(s)
그만큼 pr화면이나 인쇄본에서만 파일 형식을 변경합니다. 원본 파일을 수정하지 않습니다. 다음 표에는pr 옵션-
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -k 생산 k 출력 열 |
2 | -d 출력을 두 배로 표시합니다 (전부 pr 버전) |
삼 | -h "header" 다음 항목을 보고서 헤더로 사용합니다. |
4 | -t 머리글 및 위쪽 / 아래쪽 여백 인쇄 제거 |
5 | -l PAGE_LENGTH 페이지 길이를 PAGE_LENGTH (66) 행으로 설정합니다. 기본 텍스트 줄 수는 56 개입니다. |
6 | -o MARGIN MARGIN (영) 공백으로 각 줄 간격 띄우기 |
7 | -w PAGE_WIDTH 여러 텍스트 열 출력에 대해서만 페이지 너비를 PAGE_WIDTH (72) 문자로 설정합니다. |
사용하기 전에 pr, 다음은 food라는 샘플 파일의 내용입니다.
$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $
사용하자 pr헤더 레스토랑 으로 2 열 보고서를 만드는 명령 -
$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1 Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $
lp 및 lpr 명령
명령 lp 또는 lpr화면 표시와 반대로 종이에 파일을 인쇄합니다. 서식을 사용할 준비가되면pr 명령을 사용하면 이러한 명령을 사용하여 컴퓨터에 연결된 프린터에서 파일을 인쇄 할 수 있습니다.
시스템 관리자가 사이트에 기본 프린터를 설정했을 것입니다. 이름이 지정된 파일을 인쇄하려면food 기본 프린터에서 lp 또는 lpr 다음 예에서와 같이 명령-
$lp food request id is laserp-525 (1 file) $
그만큼 lp 명령은 인쇄 작업을 취소하거나 상태를 확인하는 데 사용할 수있는 ID를 표시합니다.
사용하는 경우 lp 명령을 사용하면 -n을 사용할 수 있습니다.NumNum number of copy를 인쇄하는 옵션. 명령과 함께lpr, 당신이 사용할 수있는 -Num 동일합니다.
공유 네트워크에 연결된 여러 프린터가있는 경우 -d를 사용하여 프린터를 선택할 수 있습니다.printer lp 명령과 함께 옵션을 사용하고 동일한 목적으로 -P를 사용할 수 있습니다.printerlpr 명령과 함께 옵션. 여기서 프린터는 프린터 이름입니다.
lpstat 및 lpq 명령
그만큼 lpstat 명령은 프린터 대기열에있는 항목 (요청 ID, 소유자, 파일 크기, 인쇄를 위해 작업이 전송 된시기 및 요청 상태)을 표시합니다.
사용하다 lpstat -o자신의 것 이외의 모든 출력 요청을 보려면. 요청은 인쇄 될 순서대로 표시됩니다.
$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $
그만큼 lpq 약간 다른 정보를 제공합니다. lpstat -o −
$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $
여기서 첫 번째 줄은 프린터 상태를 표시합니다. 프린터가 비활성화되었거나 용지가 부족한 경우이 첫 번째 줄에 다른 메시지가 표시 될 수 있습니다.
cancel 및 lprm 명령
그만큼 cancel 명령은 인쇄 요청을 종료합니다. lp command. 그만큼lprm 명령은 모두 종료 lpr requests. 요청의 ID (lp 또는 lpq로 표시됨) 또는 프린터 이름을 지정할 수 있습니다.
$cancel laserp-575 request "laserp-575" cancelled $
ID에 관계없이 현재 인쇄중인 요청을 취소하려면 간단히 cancel과 프린터 이름을 입력하십시오.
$cancel laserp request "laserp-573" cancelled $
그만큼 lprm명령은 활성 작업이 사용자에게 속한 경우 취소합니다. 그렇지 않으면 작업 번호를 인수로 제공하거나dash (-) 모든 작업을 제거하려면-
$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $
그만큼 lprm 명령은 프린터 대기열에서 제거 된 실제 파일 이름을 알려줍니다.
이메일 보내기
Unix 메일 명령을 사용하여 메일을 보내고받습니다. 다음은 이메일을 보내는 구문입니다.
$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr
다음은 메일 명령과 관련된 중요한 옵션입니다.
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -s 명령 줄에 제목을 지정합니다. |
2 | -c 사용자 목록에 참조를 보냅니다. 목록은 쉼표로 구분 된 이름 목록이어야합니다. |
삼 | -b 목록에 숨은 참조를 보냅니다. 목록은 쉼표로 구분 된 이름 목록이어야합니다. |
다음은 [email protected]으로 테스트 메시지를 보내는 예입니다.
$mail -s "Test Message" [email protected]
그런 다음 메시지를 입력 한 다음 "control-D"줄의 시작 부분에. 중지하려면 간단히 점을 입력하십시오.(.) 다음과 같이-
Hi,
This is a test
.
Cc:
다음을 사용하여 완전한 파일을 보낼 수 있습니다. redirect < operator 다음과 같이-
$mail -s "Report 05/06/07" [email protected] < demo.txt
Unix 시스템에서 들어오는 이메일을 확인하려면 다음과 같이 이메일을 입력하면됩니다.
$mail
no email
이 장에서는 Unix의 파이프와 필터에 대해 자세히 설명합니다. 한 프로그램의 출력이 다음 프로그램의 입력이되도록 두 명령을 함께 연결할 수 있습니다. 이러한 방식으로 연결된 두 개 이상의 명령이 파이프를 형성합니다.
파이프를 만들려면 수직 막대 (|) 두 명령 사이의 명령 줄에서.
프로그램이 다른 프로그램에서 입력을 받으면 해당 입력에 대해 일부 작업을 수행하고 결과를 표준 출력에 기록합니다. 그것은filter.
grep 명령
grep 명령은 파일에서 특정 패턴이있는 행을 검색합니다. 구문은-
$grep pattern file(s)
이름 "grep" ed (유닉스 라인 편집기) 명령에서 나옴 g/re/p 이는 "정규 표현식을 전체적으로 검색하고이를 포함하는 모든 행을 인쇄"를 의미합니다.
정규식은 일반 텍스트 (예 : 단어) 및 / 또는 패턴 일치에 사용되는 특수 문자입니다.
grep의 가장 간단한 사용은 단일 단어로 구성된 패턴을 찾는 것입니다. 주어진 문자열을 포함하는 입력 파일의 행만 표준 출력으로 전송되도록 파이프에서 사용할 수 있습니다. grep에 읽을 파일 이름을 지정하지 않으면 표준 입력을 읽습니다. 이것이 모든 필터 프로그램이 작동하는 방식입니다.
$ls -l | grep "Aug"
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
함께 사용할 수있는 다양한 옵션이 있습니다. grep 명령-
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -v 패턴과 일치하지 않는 모든 행을 인쇄합니다. |
2 | -n 일치하는 줄과 줄 번호를 인쇄합니다. |
삼 | -l 일치하는 줄이있는 파일 이름 만 인쇄합니다 (문자 "l"). |
4 | -c 일치하는 줄 수만 인쇄합니다. |
5 | -i 대문자 또는 소문자와 일치합니다. |
이제 grep에게 다음과 같은 줄을 찾도록 지시하는 정규식을 사용하겠습니다. "carol", 0 또는 정규식에서 ". *"로 축약 된 기타 문자) 다음에 "Aug"가옵니다 .−
여기에서 우리는 -i 대소 문자를 구분하지 않는 검색 옵션-
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
정렬 명령
그만큼 sort명령은 텍스트 줄을 알파벳 또는 숫자로 정렬합니다. 다음 예제는 음식 파일의 줄을 정렬합니다.
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
그만큼 sort명령은 기본적으로 텍스트 줄을 알파벳순으로 정렬합니다. 정렬을 제어하는 많은 옵션이 있습니다-
Sr. 아니. | 기술 |
---|---|
1 | -n 숫자로 정렬 (예 : 10은 2 이후 정렬), 공백 및 탭은 무시합니다. |
2 | -r 정렬 순서를 반대로합니다. |
삼 | -f 대소 문자를 함께 정렬합니다. |
4 | +x 먼저 무시 x 정렬 할 때 필드. |
두 개 이상의 명령이 파이프에 연결될 수 있습니다. 이전 파이프 예제를 사용하여grep, 8 월에 수정 된 파일을 크기 순으로 추가로 정렬 할 수 있습니다.
다음 파이프는 명령으로 구성됩니다. ls, grep, 및 sort −
$ls -l | grep "Aug" | sort +4n
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
$
이 파이프는 8 월에 수정 된 디렉토리의 모든 파일을 크기 순으로 정렬하고 터미널 화면에 인쇄합니다. 정렬 옵션 + 4n은 4 개의 필드를 건너 뛰고 (필드는 공백으로 구분됨) 숫자 순서로 행을 정렬합니다.
pg 및 기타 명령
긴 출력은 일반적으로 화면에서 압축 할 수 있지만 텍스트를 더 많이 실행하거나 pg필터로서의 명령; 화면에 텍스트가 가득 차면 디스플레이가 중지됩니다.
긴 디렉토리 목록이 있다고 가정 해 봅시다. 정렬 된 목록을 더 쉽게 읽을 수 있도록 출력을 다음을 통해 파이프하십시오.more 다음과 같이-
$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03
.
.
.
-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05
--More--(74%)
화면이 파일 크기 순서에 따라 정렬 된 줄로 구성된 텍스트로 가득 차면 화면이 채워집니다. 화면 하단에는more 프롬프트에서 정렬 된 텍스트를 이동하는 명령을 입력 할 수 있습니다.
이 화면에서 작업을 마치면 more 프로그램에 대한 설명에 나열된 명령을 사용할 수 있습니다.
이 장에서는 Unix의 프로세스 관리에 대해 자세히 설명합니다. Unix 시스템에서 프로그램을 실행하면 시스템은 해당 프로그램에 대한 특수 환경을 만듭니다. 이 환경에는 시스템에서 다른 프로그램이 실행되고 있지 않은 것처럼 시스템이 프로그램을 실행하는 데 필요한 모든 것이 포함되어 있습니다.
Unix에서 명령을 실행할 때마다 새 프로세스가 생성되거나 시작됩니다. 당신이 시도했을 때ls명령을 실행하여 디렉토리 내용을 나열하면 프로세스를 시작했습니다. 간단히 말해서 프로세스는 실행중인 프로그램의 인스턴스입니다.
운영 체제는 다음과 같은 5 자리 ID 번호를 통해 프로세스를 추적합니다. pid 아니면 그 process ID. 시스템의 각 프로세스에는 고유 한pid.
가능한 모든 숫자가 사용되고 다음 pid가 롤링되거나 다시 시작되기 때문에 Pids는 결국 반복됩니다. 어느 시점에서든 Unix가 각 프로세스를 추적하는 데 사용하는 pid이므로 동일한 pid를 가진 두 개의 프로세스가 시스템에 존재하지 않습니다.
프로세스 시작
프로세스를 시작할 때 (명령 실행) 실행할 수있는 두 가지 방법이 있습니다.
- 포 그라운드 프로세스
- 백그라운드 프로세스
포 그라운드 프로세스
기본적으로 시작하는 모든 프로세스는 포 그라운드에서 실행됩니다. 키보드에서 입력을 받고 화면에 출력을 보냅니다.
당신은 이것이 일어나는 것을 볼 수 있습니다 ls명령. 현재 디렉토리에있는 모든 파일을 나열하려면 다음 명령을 사용할 수 있습니다.
$ls ch*.doc
이렇게하면 이름이 다음으로 시작하는 모든 파일이 표시됩니다. ch 그리고 끝 .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
프로세스는 포 그라운드에서 실행되고 출력은 내 화면으로 전달되며 ls 명령은 입력을 원하지만 (그렇지 않은 경우) 키보드에서 기다립니다.
프로그램이 포 그라운드에서 실행되고 시간이 많이 걸리는 동안에는 프로그램이 처리를 완료하고 나올 때까지 프롬프트를 사용할 수 없기 때문에 다른 명령을 실행할 수 없습니다 (다른 프로세스 시작).
백그라운드 프로세스
백그라운드 프로세스는 키보드에 연결하지 않고 실행됩니다. 백그라운드 프로세스에 키보드 입력이 필요한 경우 대기합니다.
백그라운드에서 프로세스를 실행하는 이점은 다른 명령을 실행할 수 있다는 것입니다. 다른 작업을 시작하기 위해 완료 될 때까지 기다릴 필요가 없습니다!
백그라운드 프로세스를 시작하는 가장 간단한 방법은 앰퍼샌드 (&) 명령 끝에.
$ls ch*.doc &
이름이 다음으로 시작하는 모든 파일을 표시합니다. ch 그리고 끝 .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
여기에서 ls 명령은 입력을 원하지만 (그렇지 않은 경우), 포 그라운드로 이동하여 키보드에서 데이터를 제공 할 때까지 중지 상태가됩니다.
첫 번째 줄에는 백그라운드 프로세스 (작업 번호 및 프로세스 ID)에 대한 정보가 포함됩니다. 배경과 전경 사이에서 조작하려면 작업 번호를 알아야합니다.
Enter 키를 누르면 다음이 표시됩니다.
[1] + Done ls ch*.doc &
$
첫 번째 줄은 ls명령 백그라운드 프로세스가 성공적으로 완료됩니다. 두 번째는 다른 명령에 대한 프롬프트입니다.
실행중인 프로세스 나열
다음을 실행하여 자신의 프로세스를 쉽게 볼 수 있습니다. ps (프로세스 상태) 명령은 다음과 같습니다.
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
ps에 가장 일반적으로 사용되는 플래그 중 하나는 -f (f for full) 옵션은 다음 예와 같이 더 많은 정보를 제공합니다.
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
다음은 표시되는 모든 필드에 대한 설명입니다. ps -f 명령-
Sr. 아니. | 열 및 설명 |
---|---|
1 | UID 이 프로세스가 속한 사용자 ID (실행중인 사람) |
2 | PID 프로세스 ID |
삼 | PPID 상위 프로세스 ID (이를 시작한 프로세스의 ID) |
4 | C 프로세스의 CPU 활용 |
5 | STIME 프로세스 시작 시간 |
6 | TTY 프로세스와 관련된 터미널 유형 |
7 | TIME 프로세스에 소요 된 CPU 시간 |
8 | CMD 이 프로세스를 시작한 명령 |
함께 사용할 수있는 다른 옵션이 있습니다. ps 명령-
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -a 모든 사용자에 대한 정보를 표시합니다. |
2 | -x 터미널이없는 프로세스에 대한 정보를 표시합니다. |
삼 | -u -f 옵션과 같은 추가 정보를 표시합니다. |
4 | -e 확장 정보를 표시합니다. |
프로세스 중지
프로세스 종료는 여러 가지 방법으로 수행 할 수 있습니다. 종종 콘솔 기반 명령에서 CTRL + C 키 입력 (기본 인터럽트 문자)을 보내면 명령이 종료됩니다. 이것은 프로세스가 포 그라운드 모드에서 실행될 때 작동합니다.
프로세스가 백그라운드에서 실행중인 경우 다음을 사용하여 작업 ID를 가져와야합니다. ps명령. 그 후에는kill 다음과 같이 프로세스를 죽이는 명령-
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
여기, kill 명령은 first_one방법. 프로세스가 일반 kill 명령을 무시하면 다음을 사용할 수 있습니다.kill -9 다음과 같이 프로세스 ID가 뒤 따릅니다.
$kill -9 6738
Terminated
부모 및 자식 프로세스
각 유닉스 프로세스에는 프로세스 ID (pid)와 상위 프로세스 ID (ppid)의 두 가지 ID 번호가 할당되어 있습니다. 시스템의 각 사용자 프로세스에는 상위 프로세스가 있습니다.
실행하는 대부분의 명령은 셸을 부모로 사용합니다. 을 체크하다ps -f 이 명령은 프로세스 ID와 상위 프로세스 ID를 모두 나열한 예입니다.
좀비 및 고아 프로세스
일반적으로 자식 프로세스가 종료되면 부모 프로세스는 SIGCHLD신호. 그런 다음 부모는 다른 작업을 수행하거나 필요에 따라 새 자식을 다시 시작할 수 있습니다. 그러나 때때로 부모 프로세스는 자식이 죽기 전에 죽습니다. 이 경우 "모든 프로세스의 상위"는init프로세스가 새 PPID (상위 프로세스 ID)가됩니다. 경우에 따라 이러한 프로세스를 고아 프로세스라고합니다.
프로세스가 종료되면 ps 목록에 여전히 프로세스가 표시 될 수 있습니다. Z상태. 이것은 좀비 또는 소멸 된 프로세스입니다. 프로세스가 종료되었으며 사용되지 않습니다. 이러한 프로세스는 고아 프로세스와 다릅니다. 실행을 완료했지만 여전히 프로세스 테이블에서 항목을 찾습니다.
데몬 프로세스
데몬은 종종 루트 권한과 다른 프로세스의 서비스 요청으로 실행되는 시스템 관련 백그라운드 프로세스입니다.
데몬에는 제어 터미널이 없습니다. 열 수 없습니다/dev/tty. 당신이 할 경우"ps -ef" 그리고 봐 tty 필드에서 모든 데몬은 ? 에 대한 tty.
정확히 말하면 데몬은 백그라운드에서 실행되는 프로세스이며 일반적으로 작업 할 수있는 작업이 발생하기를 기다립니다. 예를 들어, 인쇄 명령을 기다리는 프린터 데몬.
긴 처리를 요구하는 프로그램이 있다면 데몬으로 만들고 백그라운드에서 실행하는 것이 좋습니다.
최고 사령부
그만큼 top 명령은 다양한 기준에 따라 정렬 된 프로세스를 빠르게 표시하는 데 매우 유용한 도구입니다.
자주 업데이트하고 실제 및 가상 메모리, CPU 사용량,로드 평균 및 바쁜 프로세스에 대한 정보를 표시하는 대화 형 진단 도구입니다.
다음은 top 명령을 실행하고 다른 프로세스의 CPU 사용 통계를 보는 간단한 구문입니다.
$top
작업 ID와 프로세스 ID
백그라운드 및 일시 중단 된 프로세스는 일반적으로 다음을 통해 조작됩니다. job number (job ID). 이 번호는 프로세스 ID와 다르며 더 짧기 때문에 사용됩니다.
또한 작업은 직렬로 또는 동시에 병렬로 실행되는 여러 프로세스로 구성 될 수 있습니다. 작업 ID를 사용하는 것이 개별 프로세스를 추적하는 것보다 쉽습니다.
이 장에서는 Unix의 네트워크 통신 유틸리티에 대해 자세히 설명합니다. 분산 환경에서 작업 할 때는 원격 사용자와 통신해야하며 원격 Unix 시스템에도 액세스해야합니다.
사용자가 네트워크로 연결된 분산 환경에서 계산하는 데 도움이되는 여러 Unix 유틸리티가 있습니다. 이 장에서는 그 중 몇 가지를 나열합니다.
ping 유틸리티
그만큼 ping명령은 네트워크에서 사용 가능한 호스트에 에코 요청을 보냅니다. 이 명령을 사용하여 원격 호스트가 잘 응답하는지 확인할 수 있습니다.
ping 명령은 다음에 유용합니다.
- 하드웨어 및 소프트웨어 문제 추적 및 격리.
- 네트워크 및 다양한 외부 호스트의 상태를 확인합니다.
- 네트워크 테스트, 측정 및 관리.
통사론
다음은 ftp 명령을 사용하는 간단한 구문입니다.
$ping hostname or ip-address
위의 명령은 매초마다 응답 인쇄를 시작합니다. 명령에서 나오려면을 눌러 종료 할 수 있습니다.CNTRL + C 열쇠.
예
다음은 네트워크에서 사용 가능한 호스트의 가용성을 확인하는 예입니다.
$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $
호스트가 존재하지 않으면 다음과 같은 출력을 받게됩니다.
$ping giiiiiigle.com ping: unknown host giiiiigle.com $
ftp 유틸리티
여기, ftp 약자 File TRansfer P로토콜. 이 유틸리티를 사용하면 한 컴퓨터에서 다른 컴퓨터로 파일을 업로드하고 다운로드 할 수 있습니다.
ftp 유틸리티에는 고유 한 Unix 계열 명령 세트가 있습니다. 이 명령은 다음과 같은 작업을 수행하는 데 도움이됩니다.
원격 호스트에 연결하고 로그인합니다.
디렉토리를 탐색하십시오.
디렉토리 내용을 나열합니다.
파일을 넣고 가져옵니다.
다음으로 파일 전송 ascii, ebcdic 또는 binary.
통사론
다음은 ftp 명령을 사용하는 간단한 구문입니다.
$ftp hostname or ip-address
위의 명령은 로그인 ID와 암호를 입력하라는 메시지를 표시합니다. 인증을 받으면 로그인 계정의 홈 디렉토리에 액세스 할 수 있으며 다양한 명령을 수행 할 수 있습니다.
다음 표는 몇 가지 중요한 명령을 나열합니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | put filename 로컬 컴퓨터에서 원격 컴퓨터로 파일 이름을 업로드합니다. |
2 | get filename 원격 시스템에서 로컬 시스템으로 파일 이름을 다운로드합니다. |
삼 | mput file list 로컬 시스템에서 원격 시스템으로 둘 이상의 파일을 업로드합니다. |
4 | mget file list 원격 시스템에서 로컬 시스템으로 둘 이상의 파일을 다운로드합니다. |
5 | prompt off 프롬프트를 끕니다. 기본적으로 다음을 사용하여 파일을 업로드하거나 다운로드하라는 메시지가 표시됩니다.mput 또는 mget 명령. |
6 | prompt on 프롬프트를 켭니다. |
7 | dir 원격 시스템의 현재 디렉토리에서 사용 가능한 모든 파일을 나열합니다. |
8 | cd dirname 원격 시스템에서 디렉토리를 dirname으로 변경합니다. |
9 | lcd dirname 로컬 머신에서 디렉토리를 dirname으로 변경합니다. |
10 | quit 현재 로그인에서 로그 아웃하도록 도와줍니다. |
모든 파일은 현재 디렉토리에서 다운로드되거나 업로드됩니다. 특정 디렉토리에 파일을 업로드하려면 먼저 해당 디렉토리로 변경 한 다음 필요한 파일을 업로드해야합니다.
예
다음은 몇 가지 명령의 작동을 보여주는 예입니다.
$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x 3 amrood group 1024 Mar 11 20:04 Mail
drwxr-sr-x 2 amrood group 1536 Mar 3 18:07 Misc
drwxr-sr-x 5 amrood group 512 Dec 7 10:59 OldStuff
drwxr-sr-x 2 amrood group 1024 Mar 11 15:24 bin
drwxr-sr-x 5 amrood group 3072 Mar 13 16:10 mpl
-rw-r--r-- 1 amrood group 209671 Mar 15 10:57 myfile.out
drwxr-sr-x 3 amrood group 512 Jan 5 13:32 public
drwxr-sr-x 3 amrood group 512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r-- 1 amrood group 1630 Aug 8 1994 dboard.f
-rw-r----- 1 amrood group 4340 Jul 17 1994 vttest.c
-rwxr-xr-x 1 amrood group 525574 Feb 15 11:52 wave_shift
-rw-r--r-- 1 amrood group 1648 Aug 5 1994 wide.list
-rwxr-xr-x 1 amrood group 4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$
텔넷 유틸리티
원격 Unix 시스템에 연결하고 해당 시스템에서 원격으로 작업해야하는 경우가 있습니다. Telnet 한 사이트의 컴퓨터 사용자가 연결하고 로그인 한 다음 다른 사이트의 컴퓨터에서 작업을 수행 할 수 있도록하는 유틸리티입니다.
Telnet을 사용하여 로그인하면 원격으로 연결된 컴퓨터에서 모든 작업을 수행 할 수 있습니다. 다음은 Telnet 세션의 예입니다-
C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.
login: amrood
amrood's Password:
*****************************************************
* *
* *
* WELCOME TO AMROOD.COM *
* *
* *
*****************************************************
Last unsuccessful login: Fri Mar 3 12:01:09 IST 2009
Last login: Wed Mar 8 18:33:27 IST 2009 on pts/10
{ do your work }
$ logout
Connection closed.
C:>
핑거 유틸리티
그만큼 finger명령은 지정된 호스트의 사용자에 대한 정보를 표시합니다. 호스트는 로컬 또는 원격 일 수 있습니다.
보안상의 이유로 다른 시스템에서는 Finger가 비활성화 될 수 있습니다.
다음은 finger 명령을 사용하는 간단한 구문입니다.
로컬 컴퓨터에 로그인 한 모든 사용자를 확인하십시오-
$ finger
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
로컬 머신에서 사용할 수있는 특정 사용자에 대한 정보 얻기-
$ finger amrood
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
원격 시스템에 로그인 한 모든 사용자를 확인하십시오-
$ finger @avtar.com
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
원격 컴퓨터에서 사용할 수있는 특정 사용자에 대한 정보 얻기-
$ finger [email protected]
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
이 장에서는 Unix에서 vi 편집기가 작동하는 방식을 이해합니다. Unix에서 파일을 편집하는 방법은 여러 가지가 있습니다. 화면 지향 텍스트 편집기를 사용하여 파일 편집vi가장 좋은 방법 중 하나입니다. 이 편집기를 사용하면 파일의 다른 행과 컨텍스트에서 행을 편집 할 수 있습니다.
vi 편집기의 개선 된 버전은 VIM현재 사용 가능합니다. 여기서 VIM은Vi IM증명되었습니다.
vi는 일반적으로 Unix 편집기에서 사실상의 표준으로 간주됩니다.
일반적으로 Unix 시스템의 모든 버전에서 사용할 수 있습니다.
구현은 전반적으로 매우 유사합니다.
리소스가 거의 필요하지 않습니다.
같은 다른 편집자보다 사용자 친화적입니다. ed 아니면 그 ex.
사용할 수 있습니다 vi편집기를 사용하여 기존 파일을 편집하거나 처음부터 새 파일을 만듭니다. 이 편집기를 사용하여 텍스트 파일을 읽을 수도 있습니다.
vi 편집기 시작
다음 표는 vi 편집기를 사용하는 기본 명령을 나열합니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | vi filename 이미 존재하지 않는 경우 새 파일을 작성하고 그렇지 않으면 기존 파일을 엽니 다. |
2 | vi -R filename 읽기 전용 모드로 기존 파일을 엽니 다. |
삼 | view filename 읽기 전용 모드로 기존 파일을 엽니 다. |
다음은 새 파일을 만드는 예입니다. testfile 현재 작업 디렉토리에 이미 존재하지 않는 경우-
$vi testfile
위의 명령은 다음 출력을 생성합니다-
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
당신은 tilde(~) 커서 뒤의 각 줄에. 물결표는 사용되지 않은 선을 나타냅니다. 줄이 물결표로 시작하지 않고 공백으로 표시되면 공백, 탭, 줄 바꿈 또는 기타 볼 수없는 문자가있는 것입니다.
이제 작업을 시작할 하나의 열린 파일이 있습니다. 계속 진행하기 전에 몇 가지 중요한 개념을 이해하겠습니다.
작동 모드
vi 편집기로 작업하는 동안 일반적으로 다음 두 가지 모드가 있습니다.
Command mode−이 모드를 사용하면 파일 저장, 명령 실행, 커서 이동, 줄 또는 단어 잘라 내기 (뒤집기) 및 붙여 넣기, 찾기 및 바꾸기와 같은 관리 작업을 수행 할 수 있습니다. 이 모드에서는 입력하는 모든 내용이 명령으로 해석됩니다.
Insert mode−이 모드에서는 파일에 텍스트를 삽입 할 수 있습니다. 이 모드에서 입력 된 모든 것은 입력으로 해석되어 파일에 배치됩니다.
vi는 항상 command mode. 텍스트를 입력하려면 단순히 입력하는 삽입 모드에 있어야합니다.i. 삽입 모드에서 나오려면Esc 키를 누르면 명령 모드로 돌아갑니다.
Hint− 어떤 모드에 있는지 확실하지 않은 경우 Esc 키를 두 번 누릅니다. 명령 모드로 이동합니다. vi 편집기를 사용하여 파일을 엽니 다. 일부 문자를 입력하여 시작한 다음 명령 모드로 이동하여 차이점을 이해하십시오.
vi에서 벗어나기
vi를 종료하는 명령은 다음과 같습니다. :q. 명령 모드에서 콜론과 'q'를 입력 한 다음 리턴을 입력하십시오. 파일이 어떤 식 으로든 수정 된 경우 편집기는이를 경고하고 종료 할 수 없습니다. 이 메시지를 무시하려면 저장하지 않고 vi를 종료하는 명령은 다음과 같습니다.:q!. 이렇게하면 변경 사항을 저장하지 않고 vi를 종료 할 수 있습니다.
편집기의 내용을 저장하는 명령은 다음과 같습니다. :w. 위의 명령을 quit 명령과 결합하거나:wq 그리고 돌아갑니다.
가장 쉬운 방법 save your changes and exit viZZ 명령을 사용합니다. 명령 모드에있을 때 다음을 입력합니다.ZZ. 그만큼ZZ 명령은 :wq 명령.
파일의 특정 이름을 지정 / 설명하려면 다음을 지정하여 지정할 수 있습니다. :w. 예를 들어, 작업 중이던 파일을 저장하려면filename2, 당신은 입력합니다 :w filename2 그리고 돌아갑니다.
파일 내에서 이동
텍스트에 영향을주지 않고 파일 내에서 이동하려면 명령 모드에 있어야합니다 (Esc를 두 번 누름). 다음 표는 한 번에 한 문자를 이동하는 데 사용할 수있는 몇 가지 명령을 나열합니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | k 커서를 한 줄 위로 이동합니다. |
2 | j 커서를 한 줄 아래로 이동합니다. |
삼 | h 커서를 왼쪽 한 문자 위치로 이동합니다. |
4 | l 커서를 오른쪽 한 문자 위치로 이동합니다. |
파일 내에서 이동하려면 다음 사항을 고려해야합니다.
vi는 대소 문자를 구분합니다. 명령을 사용할 때 대소 문자에주의해야합니다.
vi의 대부분의 명령 앞에는 작업을 수행 할 횟수가 표시 될 수 있습니다. 예를 들면2j 커서를 커서 위치에서 두 줄 아래로 이동합니다.
vi에서 파일 내에서 이동하는 다른 많은 방법이 있습니다. 명령 모드 (press Esc twice). 다음 표는 파일을 이동하는 몇 가지 명령을 나열합니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | 0 or | 줄의 시작 부분에 커서를 놓습니다. |
2 | $ 줄 끝에 커서를 놓습니다. |
삼 | w 커서를 다음 단어로 이동 |
4 | b 커서를 이전 단어로 이동 |
5 | ( 현재 문장의 시작 부분에 커서를 놓습니다. |
6 | ) 다음 문장의 시작 부분에 커서를 놓습니다. |
7 | E 공백으로 구분 된 단어의 끝으로 이동 |
8 | { 단락을 뒤로 이동 |
9 | } 단락을 앞으로 이동 |
10 | [[ 섹션을 뒤로 이동 |
11 | ]] 섹션을 앞으로 이동합니다. |
12 | n| 열로 이동 n 현재 줄에서 |
13 | 1G 파일의 첫 번째 줄로 이동합니다. |
14 | G 파일의 마지막 줄로 이동합니다. |
15 | nG 로 이동 nth 파일 줄 |
16 | :n 로 이동 nth 파일 줄 |
17 | fc 앞으로 이동 c |
18 | Fc 다시 이동 c |
19 | H 화면 상단으로 이동 |
20 | nH 로 이동 nth 화면 상단에서 선 |
21 | M 화면 중앙으로 이동 |
22 | L 화면 하단으로 이동 |
23 | nL 로 이동 nth 화면 하단에서 선 |
24 | :x 콜론과 숫자는 다음과 같이 표시되는 줄 번호에 커서를 놓습니다. x |
제어 명령
다음 명령은 아래 표에 주어진 기능을 수행하기 위해 제어 키와 함께 사용할 수 있습니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | CTRL+d 1/2 화면 앞으로 이동 |
2 | CTRL+f 하나의 전체 화면 앞으로 이동 |
삼 | CTRL+u 1/2 화면 뒤로 이동 |
4 | CTRL+b 전체 화면 한 개 뒤로 이동 |
5 | CTRL+e 화면을 한 줄 위로 이동 |
6 | CTRL+y 화면을 한 줄 아래로 이동 |
7 | CTRL+u 화면을 1/2 페이지 위로 이동 |
8 | CTRL+d 화면을 1/2 페이지 아래로 이동 |
9 | CTRL+b 화면을 한 페이지 위로 이동 |
10 | CTRL+f 화면을 한 페이지 아래로 이동 |
11 | CTRL+I 화면을 다시 그립니다 |
파일 편집
파일을 편집하려면 삽입 모드에 있어야합니다. 명령 모드에서 삽입 모드로 들어가는 방법은 여러 가지가 있습니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | i 현재 커서 위치 앞에 텍스트를 삽입합니다. |
2 | I 현재 줄의 시작 부분에 텍스트를 삽입합니다. |
삼 | a 현재 커서 위치 뒤에 텍스트를 삽입합니다. |
4 | A 현재 줄의 끝에 텍스트를 삽입합니다. |
5 | o 커서 위치 아래에 텍스트 입력을위한 새 줄을 만듭니다. |
6 | O 커서 위치 위에 텍스트 입력을위한 새 줄을 만듭니다. |
캐릭터 삭제
다음은 열린 파일에서 문자와 줄을 삭제하는 데 사용할 수있는 중요한 명령 목록입니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | x 커서 위치 아래의 문자를 삭제합니다. |
2 | X 커서 위치 앞의 문자를 삭제합니다. |
삼 | dw 현재 커서 위치에서 다음 단어로 삭제합니다. |
4 | d^ 현재 커서 위치에서 줄의 시작 부분까지 삭제합니다. |
5 | d$ 현재 커서 위치에서 줄 끝까지 삭제 |
6 | D 커서 위치에서 현재 줄의 끝까지 삭제 |
7 | dd 커서가있는 줄을 삭제합니다. |
위에서 언급했듯이 vi의 대부분의 명령은 작업을 수행하려는 횟수로 시작될 수 있습니다. 예를 들면2x 커서 위치 아래의 두 문자를 삭제하고 2dd 커서가있는 두 줄을 삭제합니다.
계속 진행하기 전에 명령을 연습하는 것이 좋습니다.
변경 명령
또한 vi에서 문자, 단어 또는 행을 삭제하지 않고 변경할 수 있습니다. 다음은 관련 명령입니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | cc 행의 내용을 제거하고 삽입 모드로 둡니다. |
2 | cw 커서가있는 단어를 커서에서 소문자로 변경합니다. w 단어의 끝. |
삼 | r 커서 아래의 문자를 바꿉니다. vi는 교체가 입력 된 후 명령 모드로 돌아갑니다. |
4 | R 현재 커서 아래에있는 문자로 시작하는 여러 문자를 덮어 씁니다. 당신은 사용해야합니다Esc 덮어 쓰기를 중지합니다. |
5 | s 현재 문자를 입력 한 문자로 바꿉니다. 그 후에는 삽입 모드로 남아 있습니다. |
6 | S 커서가있는 줄을 삭제하고 새 텍스트로 바꿉니다. 새 텍스트를 입력 한 후 vi는 삽입 모드로 유지됩니다. |
복사 및 붙여 넣기 명령
한 위치에서 줄이나 단어를 복사 한 다음 다음 명령을 사용하여 다른 위치에 붙여 넣을 수 있습니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | yy 현재 줄을 복사합니다. |
2 | yw 소문자 w 커서가있는 문자에서 단어의 끝까지 현재 단어를 복사합니다. |
삼 | p 복사 된 텍스트를 커서 뒤에 놓습니다. |
4 | P 잡아 당기는 텍스트를 커서 앞에 놓습니다. |
고급 명령
일상적인 편집을 단순화하고 vi를보다 효율적으로 사용할 수있는 몇 가지 고급 명령이 있습니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | J 현재 줄을 다음 줄과 결합합니다. j 개의 명령이 여러 줄을 연결합니다. |
2 | << 현재 행을 한 시프트 너비만큼 왼쪽으로 이동합니다. |
삼 | >> 현재 행을 한 시프트 너비만큼 오른쪽으로 이동합니다. |
4 | ~ 커서 아래에있는 문자의 대소 문자를 전환합니다. |
5 | ^G Ctrl과 G 키를 동시에 누르면 현재 파일 이름과 상태가 표시됩니다. |
6 | U 현재 행을 커서가 행에 들어가기 전의 상태로 복원합니다. |
7 | u 이렇게하면 파일에서 수행 된 마지막 변경을 취소하는 데 도움이됩니다. 'u'를 다시 입력하면 변경 사항이 다시 적용됩니다. |
8 | J 현재 줄을 다음 줄과 결합합니다. 카운트는 많은 줄을 연결합니다. |
9 | :f 파일의 현재 위치를 %로 표시하고 파일 이름, 총 파일 수를 표시합니다. |
10 | :f filename 현재 파일의 이름을 filename으로 바꿉니다. |
11 | :w filename 파일 filename에 씁니다. |
12 | :e filename 파일 이름으로 다른 파일을 엽니 다. |
13 | :cd dirname 현재 작업 디렉토리를 dirname으로 변경합니다. |
14 | :e # 열려있는 두 파일 사이를 전환합니다. |
15 | :n vi를 사용하여 여러 파일을 여는 경우 :n 시리즈의 다음 파일로 이동합니다. |
16 | :p vi를 사용하여 여러 파일을 여는 경우 :p 시리즈의 이전 파일로 이동합니다. |
17 | :N vi를 사용하여 여러 파일을 여는 경우 :N 시리즈의 이전 파일로 이동합니다. |
18 | :r file 파일을 읽고 현재 줄 뒤에 삽입합니다. |
19 | :nr file 파일을 읽고 줄 뒤에 삽입합니다. n. |
단어 및 문자 검색
vi 편집기에는 두 가지 종류의 검색이 있습니다. string 과 character. 문자열 검색의 경우/ 과 ?명령이 사용됩니다. 이러한 명령을 시작하면 방금 입력 한 명령이 검색 할 특정 문자열을 입력하는 화면의 마지막 줄에 표시됩니다.
이 두 명령은 검색이 이루어지는 방향에서만 다릅니다.
그만큼 / 명령은 파일에서 앞으로 (아래로) 검색합니다.
그만큼 ? 명령은 파일에서 뒤로 (위로) 검색합니다.
그만큼 n 과 N명령은 각각 동일한 또는 반대 방향으로 이전 검색 명령을 반복합니다. 일부 문자에는 특별한 의미가 있습니다. 이러한 문자 앞에는 백 슬래시 (\)이 검색 표현식의 일부로 포함됩니다.
Sr. 아니. | 캐릭터 및 설명 |
---|---|
1 | ^ 줄의 시작 부분에서 검색합니다 (검색 식의 시작 부분에 사용). |
2 | . 단일 문자와 일치합니다. |
삼 | * 0 개 이상의 이전 문자와 일치합니다. |
4 | $ 줄 끝 (검색 표현식의 끝에 사용). |
5 | [ 일치하거나 일치하지 않는 식 집합을 시작합니다. |
6 | < 이것은 단어의 끝이나 시작을 찾기 위해 백 슬래시로 이스케이프 된 표현식에 넣어집니다. |
7 | > 이것은 '<'문자 설명. |
문자 검색은 한 줄 내에서 검색하여 명령 뒤에 입력 된 문자를 찾습니다. 그만큼f 과 F 명령은 현재 줄에서만 문자를 검색합니다. f 앞으로 검색하고 F 뒤로 검색하고 커서가 찾은 문자의 위치로 이동합니다.
그만큼 t 과 T 명령은 현재 줄에서만 문자를 검색하지만 t, 커서가 문자 앞의 위치로 이동하고 T 문자 뒤의 위치까지 줄을 뒤로 검색합니다.
명령 설정
다음을 사용하여 vi 화면의 모양과 느낌을 변경할 수 있습니다. :set명령. 명령 모드에 있으면 다음을 입력하십시오.:set 다음 명령 중 하나가 뒤 따릅니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | :set ic 검색 할 때 대소 문자를 무시합니다. |
2 | :set ai 자동 들여 쓰기 설정 |
삼 | :set noai 자동 들여 쓰기 설정 해제 |
4 | :set nu 왼쪽에 줄 번호가있는 줄을 표시합니다. |
5 | :set sw 소프트웨어 탭 스톱의 너비를 설정합니다. 예를 들어, 다음 명령을 사용하여 이동 폭을 4로 설정합니다.:set sw = 4 |
6 | :set ws 경우 wrapscan가 설정되고, 단어가 파일의 맨 아래에 발견되지 않는, 그것은 처음에 검색을 시도 할 것이다 |
7 | :set wm 이 옵션의 값이 0보다 큰 경우 편집기는 자동으로 "단어 줄 바꿈"합니다. 예를 들어 줄 바꿈 여백을 두 문자로 설정하려면 다음을 입력합니다.:set wm = 2 |
8 | :set ro 파일 유형을 "읽기 전용"으로 변경합니다. |
9 | :set term 터미널 유형을 인쇄합니다. |
10 | :set bf 입력에서 제어 문자를 버립니다. |
명령 실행
vi에는 편집기 내에서 명령을 실행할 수있는 기능이 있습니다. 명령을 실행하려면 명령 모드로 이동하여 다음을 입력하기 만하면됩니다.:! 명령.
예를 들어, 해당 파일 이름으로 파일을 저장하기 전에 파일이 있는지 확인하려면 다음을 입력 할 수 있습니다. :! ls 그리고 당신은 출력을 볼 수 있습니다 ls 화면에.
임의의 키 (또는 명령의 이스케이프 시퀀스)를 눌러 vi 세션으로 돌아갈 수 있습니다.
텍스트 바꾸기
대체 명령 (:s/)를 사용하면 파일 내의 단어 또는 단어 그룹을 빠르게 바꿀 수 있습니다. 다음은 텍스트를 대체하는 구문입니다-
:s/search/replace/g
그만큼 g전 세계를 상징합니다. 이 명령의 결과로 커서 행의 모든 항목이 변경됩니다.
참고할 중요 사항
다음 포인트는 vi로 성공에 추가됩니다-
명령을 사용하려면 명령 모드에 있어야합니다. (명령 모드에 있는지 확인하려면 언제든지 Esc를 두 번 누르십시오.)
명령에주의해야합니다. 대소 문자를 구분합니다.
텍스트를 입력하려면 삽입 모드에 있어야합니다.
ㅏ ShellUnix 시스템에 대한 인터페이스를 제공합니다. 사용자로부터 입력을 수집하고 해당 입력을 기반으로 프로그램을 실행합니다. 프로그램 실행이 완료되면 해당 프로그램의 출력이 표시됩니다.
Shell은 명령, 프로그램 및 쉘 스크립트를 실행할 수있는 환경입니다. 다양한 종류의 운영 체제가있는 것처럼 셸에도 다양한 종류가 있습니다. 각 쉘 유형에는 인식 된 명령 및 기능 세트가 있습니다.
쉘 프롬프트
프롬프트, $라고하는 command prompt, 쉘에서 발행합니다. 프롬프트가 표시되는 동안 명령을 입력 할 수 있습니다.
Shell은 사용자가 입력 한 내용을 읽습니다. Enter. 입력의 첫 번째 단어를보고 실행하려는 명령을 결정합니다. 단어는 끊어지지 않는 문자 집합입니다. 공백과 탭은 단어를 구분합니다.
다음은 date 현재 날짜와 시간을 표시하는 명령-
$date
Thu Jun 25 08:30:19 MST 2009
환경 자습서에 설명 된 환경 변수 PS1을 사용하여 명령 프롬프트를 사용자 지정할 수 있습니다.
쉘 유형
Unix에는 두 가지 주요 유형의 셸이 있습니다.
Bourne shell − Bourne 유형 쉘을 사용하는 경우 $ character는 기본 프롬프트입니다.
C shell − C 형 쉘을 사용하는 경우 % 문자가 기본 프롬프트입니다.
Bourne Shell에는 다음과 같은 하위 범주가 있습니다.
- 본 쉘 (sh)
- Korn 쉘 (ksh)
- Bourne Again 쉘 (bash)
- POSIX 쉘 (sh)
다른 C 형 포탄은 다음과 같습니다.
- C 쉘 (csh)
- TENEX / TOPS C 쉘 (tcsh)
원래 Unix 쉘은 1970 년대 중반 Stephen R. Bourne이 뉴저지의 AT & T Bell Labs에있을 때 작성했습니다.
Bourne 쉘은 Unix 시스템에 처음으로 등장한 쉘이므로 "쉘"이라고합니다.
Bourne 쉘은 일반적으로 다음과 같이 설치됩니다. /bin/sh대부분의 Unix 버전에서. 이러한 이유로 다른 버전의 Unix에서 사용할 수있는 스크립트를 작성하기위한 쉘입니다.
이 장에서는 Borne Shell을 기반으로하는 대부분의 Shell 개념을 다룰 것입니다.
쉘 스크립트
쉘 스크립트의 기본 개념은 실행 순서대로 나열되는 명령 목록입니다. 좋은 쉘 스크립트에는 주석이 있고 앞에# 단계를 설명하는 서명.
값 A가 값 B보다 큼과 같은 조건부 테스트, 방대한 양의 데이터, 데이터를 읽고 저장하는 파일, 데이터를 읽고 저장하는 변수를 통과 할 수있는 루프, 스크립트에는 함수가 포함될 수 있습니다.
다음 섹션에서 많은 스크립트를 작성할 것입니다. 쉘 환경에 무엇을 언제해야하는지 알려주는 모든 명령과 몇 가지 다른 필수 구성을 넣는 간단한 텍스트 파일입니다.
쉘 스크립트와 함수가 모두 해석됩니다. 이는 컴파일되지 않았 음을 의미합니다.
예제 스크립트
우리가 test.sh스크립트. 모든 스크립트는.sh신장. 스크립트에 다른 것을 추가하기 전에 쉘 스크립트가 시작되고 있음을 시스템에 경고해야합니다. 이것은shebang구성. 예를 들면-
#!/bin/sh
이것은 다음 명령이 Bourne 쉘에 의해 실행된다는 것을 시스템에 알려줍니다. 그것은 shebang이라고 불립니다.#기호는 해시라고하며! 기호를 쾅이라고합니다 .
이러한 명령을 포함하는 스크립트를 만들려면 먼저 shebang 줄을 입력 한 다음 명령을 추가합니다.
#!/bin/bash
pwd
ls
셸 주석
다음과 같이 스크립트에 주석을 넣을 수 있습니다.
#!/bin/bash
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls
위의 내용을 저장하고 스크립트를 실행 가능하게 만드십시오-
$chmod +x test.sh
이제 쉘 스크립트를 실행할 준비가되었습니다.
$./test.sh
실행하면 다음과 같은 결과를 받게됩니다.
/home/amrood
index.htm unix-basic_utilities.htm unix-directories.htm
test.sh unix-communication.htm unix-environment.htm
Note − 현재 디렉토리에서 사용 가능한 프로그램을 실행하려면 ./program_name
확장 된 쉘 스크립트
쉘 스크립트에는 수행 할 작업과 수행시기를 쉘 환경에 알려주는 몇 가지 필수 구성이 있습니다. 물론 대부분의 스크립트는 위의 스크립트보다 더 복잡합니다.
결국 쉘은 변수, 제어 구조 등을 갖춘 실제 프로그래밍 언어입니다. 스크립트가 아무리 복잡해도 순차적으로 실행되는 명령 목록 일뿐입니다.
다음 스크립트는 read 키보드에서 입력을 받아 변수 PERSON의 값으로 할당하고 마지막으로 STDOUT에 인쇄하는 명령입니다.
#!/bin/sh
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
다음은 스크립트의 샘플 실행입니다.
$./test.sh What is your name? Zara Ali Hello, Zara Ali $
이 장에서는 Unix에서 쉘 변수를 사용하는 방법을 배웁니다. 변수는 값을 할당하는 문자열입니다. 할당 된 값은 숫자, 텍스트, 파일 이름, 장치 또는 기타 데이터 유형일 수 있습니다.
변수는 실제 데이터에 대한 포인터 일뿐입니다. 셸을 사용하여 변수를 생성, 할당 및 삭제할 수 있습니다.
변수 이름
변수 이름에는 문자 (a-z 또는 A-Z), 숫자 (0-9) 또는 밑줄 문자 (_) 만 포함될 수 있습니다.
관례에 따라 Unix 쉘 변수의 이름은 대문자로 표시됩니다.
다음 예제는 유효한 변수 이름입니다-
_ALI
TOKEN_A
VAR_1
VAR_2
다음은 잘못된 변수 이름의 예입니다-
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!
다음과 같은 다른 문자를 사용할 수없는 이유 !, *, 또는 - 이 문자는 쉘에 대해 특별한 의미가 있다는 것입니다.
변수 정의
변수는 다음과 같이 정의됩니다-
variable_name=variable_value
예를 들면-
NAME="Zara Ali"
위의 예는 변수 NAME을 정의하고 여기에 "Zara Ali"값을 할당합니다. 이 유형의 변수가 호출됩니다.scalar variables. 스칼라 변수는 한 번에 하나의 값만 보유 할 수 있습니다.
Shell을 사용하면 원하는 값을 변수에 저장할 수 있습니다. 예를 들면-
VAR1="Zara Ali"
VAR2=100
값 액세스
변수에 저장된 값에 액세스하려면 이름 앞에 달러 기호 ($) −
예를 들어, 다음 스크립트는 정의 된 변수 NAME의 값에 액세스하여 STDOUT에 인쇄합니다.
#!/bin/sh
NAME="Zara Ali"
echo $NAME
위의 스크립트는 다음 값을 생성합니다.
Zara Ali
읽기 전용 변수
Shell은 읽기 전용 명령을 사용하여 변수를 읽기 전용으로 표시하는 방법을 제공합니다. 변수가 읽기 전용으로 표시된 후에는 값을 변경할 수 없습니다.
예를 들어, 다음 스크립트는 NAME 값을 변경하는 동안 오류를 생성합니다.
#!/bin/sh
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
위의 스크립트는 다음 결과를 생성합니다-
/bin/sh: NAME: This variable is read only.
변수 설정 해제
변수를 설정 해제하거나 삭제하면 쉘이 추적하는 변수 목록에서 변수를 제거하도록 지시합니다. 변수 설정을 해제하면 변수에 저장된 값에 액세스 할 수 없습니다.
다음은 다음을 사용하여 정의 된 변수를 설정 해제하는 구문입니다. unset 명령-
unset variable_name
위의 명령은 정의 된 변수의 값을 설정 해제합니다. 다음은 명령의 작동 방식을 보여주는 간단한 예입니다.
#!/bin/sh
NAME="Zara Ali"
unset NAME
echo $NAME
위의 예는 아무것도 인쇄하지 않습니다. unset 명령을 사용하여unset 표시된 변수 readonly.
변수 유형
쉘이 실행 중일 때 세 가지 주요 유형의 변수가 있습니다.
Local Variables− 지역 변수는 쉘의 현재 인스턴스 내에 존재하는 변수입니다. 쉘에 의해 시작된 프로그램에는 사용할 수 없습니다. 명령 프롬프트에서 설정됩니다.
Environment Variables− 환경 변수는 쉘의 모든 자식 프로세스에서 사용할 수 있습니다. 일부 프로그램은 올바르게 작동하기 위해 환경 변수가 필요합니다. 일반적으로 쉘 스크립트는 실행되는 프로그램에 필요한 환경 변수 만 정의합니다.
Shell Variables− 쉘 변수는 쉘에 의해 설정되고 올바르게 작동하기 위해 쉘에 필요한 특수 변수입니다. 이러한 변수 중 일부는 환경 변수이고 다른 변수는 지역 변수입니다.
이 장에서는 Unix의 특수 변수에 대해 자세히 설명합니다. 이전 장 중 하나에서 변수 이름에 영숫자가 아닌 특정 문자를 사용할 때주의하는 방법을 이해했습니다. 이는 이러한 문자가 특수 Unix 변수의 이름에 사용되기 때문입니다. 이러한 변수는 특정 기능을 위해 예약되어 있습니다.
예를 들어 $ 문자는 현재 쉘의 프로세스 ID 번호 또는 PID를 나타냅니다.
$echo $$
위의 명령은 현재 쉘의 PID를 씁니다.
29949
다음 표는 쉘 스크립트에서 사용할 수있는 여러 특수 변수를 보여줍니다.
Sr. 아니. | 변수 및 설명 |
---|---|
1 | $0 현재 스크립트의 파일 이름입니다. |
2 | $n 이러한 변수는 스크립트가 호출 된 인수에 해당합니다. 여기n 인수의 위치에 해당하는 양의 십진수입니다 (첫 번째 인수는 $1, the second argument is $2 등). |
삼 | $# 스크립트에 제공된 인수의 수입니다. |
4 | $* 모든 인수는 큰 따옴표로 묶여 있습니다. 스크립트가 두 개의 인수를 받으면$* is equivalent to $1 $ 2. |
5 | $@ 모든 인수는 개별적으로 큰 따옴표로 묶여 있습니다. 스크립트가 두 개의 인수를 받으면$@ is equivalent to $1 $ 2. |
6 | $? 마지막으로 실행 된 명령의 종료 상태입니다. |
7 | $$ 현재 쉘의 프로세스 번호입니다. 쉘 스크립트의 경우 실행중인 프로세스 ID입니다. |
8 | $! 마지막 백그라운드 명령의 프로세스 번호입니다. |
명령 줄 인수
명령 줄 인수 $1, $2, $3, ...$9는 위치 매개 변수이며 $0 pointing to the actual command, program, shell script, or function and $1, $2, $3, ... $ 9를 명령에 대한 인수로 사용합니다.
다음 스크립트는 명령 줄과 관련된 다양한 특수 변수를 사용합니다-
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1" echo "Second Parameter : $2"
echo "Quoted Values: $@" echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
다음은 위의 스크립트에 대한 샘플 실행입니다.
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
특수 매개 변수 $* and $@
한 번에 모든 명령 줄 인수에 액세스 할 수있는 특수 매개 변수가 있습니다. $* 과 $@ 둘 다 큰 따옴표로 묶지 않는 한 동일하게 작동합니다. "".
두 매개 변수 모두 명령 줄 인수를 지정합니다. 그러나, 그 "$*" special parameter takes the entire list as one argument with spaces between and the "$@ "특수 매개 변수는 전체 목록을 가져 와서 별도의 인수로 분리합니다.
아래와 같이 쉘 스크립트를 작성하여 알 수없는 수의 명령 줄 인수를 처리 할 수 있습니다. $* or $@ 특수 매개 변수-
#!/bin/sh
for TOKEN in $* do echo $TOKEN
done
다음은 위의 스크립트에 대한 샘플 실행입니다.
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note − 여기 do...done 다음 튜토리얼에서 다룰 일종의 루프입니다.
종료 상태
그만큼 $? 변수는 이전 명령의 종료 상태를 나타냅니다.
종료 상태는 모든 명령이 완료 될 때 반환되는 숫자 값입니다. 일반적으로 대부분의 명령은 성공한 경우 0, 실패한 경우 1의 종료 상태를 반환합니다.
일부 명령은 특정 이유로 추가 종료 상태를 반환합니다. 예를 들어 일부 명령은 오류 유형을 구분하고 특정 유형의 오류에 따라 다양한 종료 값을 반환합니다.
다음은 성공적인 명령의 예입니다-
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $
이 장에서는 Unix에서 쉘 배열을 사용하는 방법에 대해 설명합니다. 쉘 변수는 단일 값을 보유하기에 충분합니다. 이러한 변수를 스칼라 변수라고합니다.
셸은라는 다른 유형의 변수를 지원합니다. array variable. 이것은 동시에 여러 값을 보유 할 수 있습니다. 배열은 변수 집합을 그룹화하는 방법을 제공합니다. 필요한 각 변수에 대해 새 이름을 만드는 대신 다른 모든 변수를 저장하는 단일 배열 변수를 사용할 수 있습니다.
쉘 변수에 대해 논의 된 모든 이름 지정 규칙은 배열 이름을 지정하는 동안 적용 할 수 있습니다.
배열 값 정의
배열 변수와 스칼라 변수의 차이점은 다음과 같이 설명 할 수 있습니다.
다양한 학생의 이름을 변수 집합으로 나타내려고한다고 가정합니다. 각 개별 변수는 다음과 같이 스칼라 변수입니다.
NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"
위에서 언급 한 모든 이름을 저장하기 위해 단일 배열을 사용할 수 있습니다. 다음은 배열 변수를 만드는 가장 간단한 방법입니다. 이는 인덱스 중 하나에 값을 할당하는 데 도움이됩니다.
array_name[index]=value
여기서 array_name 은 배열의 이름이고 index 는 설정하려는 배열 항목의 인덱스이며 value는 해당 항목에 대해 설정하려는 값입니다.
예를 들어, 다음 명령은-
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
사용하는 경우 ksh 쉘, 여기에 배열 초기화 구문이 있습니다-
set -A array_name value1 value2 ... valuen
사용하는 경우 bash 쉘, 여기에 배열 초기화 구문이 있습니다-
array_name=(value1 ... valuen)
배열 값 액세스
배열 변수를 설정 한 후 다음과 같이 액세스합니다.
${array_name[index]}
여기서 array_name 은 배열의 이름이고 index 는 액세스 할 값의 인덱스입니다. 다음은 개념을 이해하는 예입니다.
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
위의 예는 다음 결과를 생성합니다.
$./test.sh
First Index: Zara
Second Index: Qadir
다음 방법 중 하나로 배열의 모든 항목에 액세스 할 수 있습니다.
${array_name[*]} ${array_name[@]}
여기 array_name 관심있는 배열의 이름입니다. 다음 예제는 개념을 이해하는 데 도움이됩니다.
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"
위의 예는 다음 결과를 생성합니다.
$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
각 쉘에서 지원하는 다양한 연산자가 있습니다. 이 장에서 Bourne 셸 (기본 셸)에 대해 자세히 설명합니다.
이제 다음 연산자에 대해 설명합니다.
- 산술 연산자
- 관계 연산자
- 부울 연산자
- 문자열 연산자
- 파일 테스트 연산자
Bourne 쉘은 원래 간단한 산술 연산을 수행하는 메커니즘이 없었지만 외부 프로그램을 사용합니다. awk 또는 expr.
다음 예제는 두 숫자를 더하는 방법을 보여줍니다-
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
위의 스크립트는 다음 결과를 생성합니다-
Total value : 4
추가하는 동안 다음 사항을 고려해야합니다.
연산자와 표현식 사이에는 공백이 있어야합니다. 예를 들어, 2 + 2는 올바르지 않습니다. 2 + 2로 작성해야합니다.
완전한 표현식은 ‘ ‘, backtick라고합니다.
산술 연산자
다음 산술 연산자는 Bourne Shell에서 지원됩니다.
변수 가정 a 10 개와 가변 b 20을 보유하고-
예시보기
운영자 | 기술 | 예 |
---|---|---|
+ (추가) | 연산자의 양쪽에 값을 추가합니다. | `expr $a + $b`는 30을 줄 것입니다 |
-(빼기) | 왼쪽 피연산자에서 오른쪽 피연산자를 뺍니다. | `expr $a - $b`는 -10을 줄 것입니다. |
* (곱하기) | 연산자의 양쪽에 값을 곱합니다. | `expr $a \* $b`는 200을 줄 것입니다 |
/ (나누기) | 왼손 피연산자를 오른손 피연산자로 나눕니다. | `expr $b / $a`는 2를 줄 것입니다 |
% (모듈러스) | 왼손 피연산자를 오른손 피연산자로 나누고 나머지를 반환합니다. | `expr $b % $a`는 0을 제공합니다 |
= (과제) | 왼쪽 피연산자에 오른쪽 피연산자를 할당합니다. | a = $ b는 b의 값을 a에 할당합니다. |
== (동등) | 두 숫자를 비교하면 둘 다 같으면 true를 반환합니다. | [$ a == $ b]는 false를 반환합니다. |
! = (같지 않음) | 두 숫자를 비교하면 둘 다 다르면 true를 반환합니다. | [$ a! = $ b]는 true를 반환합니다. |
예를 들어 모든 조건식은 대괄호 안에 공백이 있어야한다는 것을 이해하는 것이 매우 중요합니다. [ $a == $b ] 정확하지만, [$a==$b] 부정확하다.
모든 산술 계산은 긴 정수를 사용하여 수행됩니다.
관계 연산자
Bourne Shell은 숫자 값과 관련된 다음과 같은 관계 연산자를 지원합니다. 이러한 연산자는 값이 숫자가 아니면 문자열 값에 대해 작동하지 않습니다.
예를 들어, 다음 연산자는 "10"과 "20"사이뿐만 아니라 10과 20 사이의 관계를 확인하지만 "10"과 "20"사이에는 검사하지 않습니다.
변수 가정 a 10 개와 가변 b 20을 보유하고-
예시보기
운영자 | 기술 | 예 |
---|---|---|
-eq | 두 피연산자의 값이 같은지 확인합니다. 그렇다면 조건이 참이됩니다. | [$ a -eq $ b]가 사실이 아닙니다. |
-ne | 두 피연산자의 값이 같은지 확인합니다. 값이 같지 않으면 조건이 참이됩니다. | [$ a -ne $ b]는 참입니다. |
-gt | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인합니다. 그렇다면 조건이 참이됩니다. | [$ a -gt $ b]는 사실이 아닙니다. |
-lt | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은 지 확인합니다. 그렇다면 조건이 참이됩니다. | [$ a -lt $ b]는 참입니다. |
-ge | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지 확인합니다. 그렇다면 조건이 참이됩니다. | [$ a -ge $ b]는 사실이 아닙니다. |
-le | 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지 확인합니다. 그렇다면 조건이 참이됩니다. | [$ a -le $ b]는 사실입니다. |
모든 조건식은 주위에 공백이있는 대괄호 안에 있어야한다는 것을 이해하는 것이 매우 중요합니다. 예를 들면[ $a <= $b ] 정확하지만, [$a <= $b] 부정확하다.
부울 연산자
Bourne Shell은 다음 부울 연산자를 지원합니다.
변수 가정 a 10 개와 가변 b 20을 보유하고-
예시보기
운영자 | 기술 | 예 |
---|---|---|
! | 이것은 논리적 부정입니다. 이것은 참 조건을 거짓으로 바꾸고 그 반대의 경우도 마찬가지입니다. | [! false]는 true입니다. |
-o | 이것은 논리적이다 OR. 피연산자 중 하나가 참이면 조건이 참이됩니다. | [$ a -lt 20 -o $ b -gt 100]은 참입니다. |
-a | 이것은 논리적이다 AND. 두 피연산자가 모두 참이면 조건은 참이되고 그렇지 않으면 거짓이됩니다. | [$ a -lt 20 -a $ b -gt 100]은 거짓입니다. |
문자열 연산자
다음 문자열 연산자는 Bourne Shell에서 지원됩니다.
변수 가정 a "abc"및 변수 보유 b "efg"를 누른 다음-
예시보기
운영자 | 기술 | 예 |
---|---|---|
= | 두 피연산자의 값이 같은지 확인합니다. 그렇다면 조건이 참이됩니다. | [$ a = $ b]는 사실이 아닙니다. |
!= | 두 피연산자의 값이 같은지 확인합니다. 값이 같지 않으면 조건이 참이됩니다. | [$ a! = $ b]는 참입니다. |
-z | 주어진 문자열 피연산자 크기가 0인지 확인합니다. 길이가 0이면 true를 반환합니다. | [-z $ a]는 사실이 아닙니다. |
-n | 주어진 문자열 피연산자 크기가 0이 아닌지 확인합니다. 길이가 0이 아니면 true를 반환합니다. | [-n $ a]는 거짓이 아닙니다. |
str | 확인 str빈 문자열이 아닙니다. 비어 있으면 false를 반환합니다. | [$ a]는 거짓이 아닙니다. |
파일 테스트 연산자
Unix 파일과 관련된 다양한 속성을 테스트하는 데 사용할 수있는 몇 가지 연산자가 있습니다.
변수 가정 file 크기가 100 바이트 인 기존 파일 이름 "test"를 보유하며 read, write 과 execute -에 대한 허가
예시보기
운영자 | 기술 | 예 |
---|---|---|
-b file | 파일이 블록 특수 파일인지 확인합니다. 그렇다면 조건이 참이됩니다. | [-b $ file]은 거짓입니다. |
-c file | 파일이 문자 특수 파일인지 확인합니다. 그렇다면 조건이 참이됩니다. | [-c $ file]은 거짓입니다. |
-d file | 파일이 디렉토리인지 확인합니다. 그렇다면 조건이 참이됩니다. | [-d $ file]이 사실이 아닙니다. |
-f file | 파일이 디렉토리 나 특수 파일이 아닌 일반 파일인지 확인합니다. 그렇다면 조건이 참이됩니다. | [-f $ file]이 참입니다. |
-g file | 파일에 SGID (Set Group ID) 비트가 설정되어 있는지 확인합니다. 그렇다면 조건이 참이됩니다. | [-g $ file]은 거짓입니다. |
-k file | 파일에 고정 비트가 설정되어 있는지 확인합니다. 그렇다면 조건이 참이됩니다. | [-k $ file]은 거짓입니다. |
-p file | 파일이 명명 된 파이프인지 확인합니다. 그렇다면 조건이 참이됩니다. | [-p $ file]은 거짓입니다. |
-t file | 파일 설명자가 열려 있고 터미널과 연결되어 있는지 확인합니다. 그렇다면 조건이 참이됩니다. | [-t $ file]은 거짓입니다. |
-u file | 파일에 SUID (Set User ID) 비트가 설정되어 있는지 확인합니다. 그렇다면 조건이 참이됩니다. | [-u $ file]은 거짓입니다. |
-r file | 파일을 읽을 수 있는지 확인합니다. 그렇다면 조건이 참이됩니다. | [-r $ file]이 참입니다. |
-w file | 파일이 쓰기 가능한지 확인합니다. 그렇다면 조건이 참이됩니다. | [-w $ file]이 참입니다. |
-x file | 파일이 실행 가능한지 확인합니다. 그렇다면 조건이 참이됩니다. | [-x $ file]이 참입니다. |
-s file | 파일 크기가 0보다 큰지 확인합니다. 그렇다면 조건이 참이됩니다. | [-s $ file]이 참입니다. |
-e file | 파일이 존재하는지 확인합니다. 파일이 디렉토리이지만 존재하는 경우에도 참입니다. | [-e $ file]이 참입니다. |
C 쉘 연산자
다음 링크는 C 쉘 연산자에 대한 간략한 아이디어를 제공합니다.
C 쉘 연산자
Korn 쉘 연산자
다음 링크는 Korn 쉘 연산자를 이해하는 데 도움이됩니다.
Korn 쉘 연산자
이 장에서 우리는 Unix에서의 쉘 의사 결정을 이해할 것입니다. 쉘 스크립트를 작성하는 동안 주어진 두 경로 중 하나의 경로를 채택해야하는 상황이있을 수 있습니다. 따라서 프로그램이 올바른 결정을 내리고 올바른 작업을 수행 할 수 있도록하는 조건문을 사용해야합니다.
Unix Shell은 다양한 조건에 따라 다양한 작업을 수행하는 데 사용되는 조건문을 지원합니다. 이제 우리는 여기서 두 가지 의사 결정 진술을 이해할 것입니다.
그만큼 if...else 성명서
그만큼 case...esac 성명서
if ... else 문
If else 문은 주어진 옵션 집합에서 옵션을 선택하는 데 사용할 수있는 유용한 의사 결정 문입니다.
Unix Shell은 다음 형식을 지원합니다. if…else 성명-
- if ... fi 문
- if ... else ... fi 문
- if ... elif ... else ... fi 문
대부분의 if 문은 이전 장에서 설명한 관계 연산자를 사용하여 관계를 확인합니다.
사례 ... esac 진술
여러 번 사용할 수 있습니다. if...elif다자 분기를 수행하는 문. 그러나 이것이 항상 최상의 솔루션은 아닙니다. 특히 모든 분기가 단일 변수의 값에 의존하는 경우 더욱 그렇습니다.
Unix Shell 지원 case...esac 이 상황을 정확히 처리하고 반복되는 것보다 훨씬 효율적으로 if...elif 진술.
한 가지 형태 만 있습니다. case...esac 여기에 자세히 설명 된 진술-
- case ... esac 문
그만큼 case...esac Unix 쉘의 문장은 다음과 매우 유사합니다. switch...case 다른 프로그래밍 언어에서 C 또는 C++ 과 PERL등
이 장에서는 Unix의 쉘 루프에 대해 설명합니다. 루프는 일련의 명령을 반복적으로 실행할 수있는 강력한 프로그래밍 도구입니다. 이 장에서 우리는 쉘 프로그래머가 사용할 수있는 다음 유형의 루프를 조사 할 것입니다.
- while 루프
- for 루프
- until 루프
- 선택 루프
상황에 따라 다른 루프를 사용합니다. 예를 들어while루프는 주어진 조건이 참일 때까지 주어진 명령을 실행합니다. 그만큼until 루프는 주어진 조건이 참이 될 때까지 실행됩니다.
좋은 프로그래밍 실습이 있으면 전문 지식을 습득하고 상황에 따라 적절한 루프를 사용하기 시작합니다. 여기,while 과 for 루프는 다음과 같은 대부분의 다른 프로그래밍 언어에서 사용할 수 있습니다. C, C++ 과 PERL등
중첩 루프
모든 루프는 중첩 개념을 지원하므로 하나의 루프를 다른 유사한 루프 또는 다른 루프 안에 넣을 수 있습니다. 이 중첩은 요구 사항에 따라 무제한으로 이동할 수 있습니다.
다음은 중첩의 예입니다. while고리. 다른 루프는 비슷한 방식으로 프로그래밍 요구 사항에 따라 중첩 될 수 있습니다.
while 루프 중첩
while 루프를 다른 while 루프 본문의 일부로 사용할 수 있습니다.
통사론
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
예
다음은 루프 중첩의 간단한 예입니다. 9까지 세는데 사용했던 루프 안에 또 다른 카운트 다운 루프를 추가해 봅시다.
#!/bin/sh
a=0
while [ "$a" -lt 10 ] # this is loop1 do b="$a"
while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b "
b=`expr $b - 1` done echo a=`expr $a + 1`
done
그러면 다음과 같은 결과가 생성됩니다. 방법에 유의하는 것이 중요합니다.echo -n여기서 작동합니다. 여기-n 옵션은 에코가 줄 바꾸기 문자를 인쇄하지 않도록합니다.
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
이 장에서는 Unix의 쉘 루프 제어에 대해 설명합니다. 지금까지 루프를 만들고 루프를 사용하여 다양한 작업을 수행하는 방법을 살펴 보았습니다. 때때로 루프를 중지하거나 루프의 반복을 건너 뛰어야합니다.
이 장에서 우리는 쉘 루프를 제어하는 데 사용되는 다음 두 문장을 배울 것입니다.
그만큼 break 성명서
그만큼 continue 성명서
무한 루프
모든 루프는 수명이 제한되어 있으며 루프에 따라 조건이 거짓이거나 참이면 나옵니다.
필요한 조건이 충족되지 않으면 루프가 영원히 계속 될 수 있습니다. 종료하지 않고 영원히 실행하는 루프는 무한히 실행됩니다. 이러한 이유로 이러한 루프를 무한 루프라고합니다.
예
다음은 while 0에서 9까지의 숫자를 표시하는 루프-
#!/bin/sh
a=10
until [ $a -lt 10 ] do echo $a
a=`expr $a + 1`
done
이 루프는 영원히 계속됩니다. a 항상 greater than 또는 equal to 10 10보다 적지 않습니다.
중단 진술
그만큼 break문은 break 문까지 모든 코드 행의 실행을 완료 한 후 전체 루프의 실행을 종료하는 데 사용됩니다. 그런 다음 루프가 끝나면 코드로 내려갑니다.
통사론
다음과 같은 break 문은 루프에서 나오는 데 사용됩니다-
break
break 명령은 다음 형식을 사용하여 중첩 된 루프를 종료하는 데 사용할 수도 있습니다.
break n
여기 n 지정합니다 nth 엔 클로징 루프에서 출구로.
예
다음은 루프가 즉시 종료되는 것을 보여주는 간단한 예입니다. a 5가된다-
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
실행하면 다음과 같은 결과를 받게됩니다.
0
1
2
3
4
5
다음은 중첩 된 for 루프의 간단한 예입니다. 이 스크립트는 다음과 같은 경우 두 루프에서 모두 중단됩니다.var1 equals 2 과 var2 equals 0 −
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2"
fi
done
done
실행하면 다음과 같은 결과를 받게됩니다. 내부 루프에는 인수 2와 함께 break 명령이 있습니다. 이는 조건이 충족되면 외부 루프에서 벗어나 궁극적으로 내부 루프에서도 분리되어야 함을 나타냅니다.
1 0
1 5
Continue 문
그만큼 continue 진술은 break 명령을 사용하면 전체 루프가 아닌 루프의 현재 반복이 종료된다는 점이 다릅니다.
이 명령문은 오류가 발생했지만 루프의 다음 반복을 실행하려고 할 때 유용합니다.
통사론
continue
break 문과 마찬가지로 연속 명령에 정수 인수를 지정하여 중첩 루프에서 명령을 건너 뛸 수 있습니다.
continue n
여기 n 지정합니다 nth 계속할 엔 클로징 루프.
예
다음 루프는 continue continue 문에서 반환하고 다음 문 처리를 시작하는 문-
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2` if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
실행하면 다음과 같은 결과를 받게됩니다.
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
대체 란 무엇입니까?
쉘은 하나 이상의 특수 문자를 포함하는 표현식을 발견하면 대체를 수행합니다.
예
여기서 변수의 인쇄 값은 해당 값으로 대체됩니다. 동시에,"\n" 새 줄로 대체-
#!/bin/sh
a=10
echo -e "Value of a is $a \n"
다음 결과를 받게됩니다. 여기-e 옵션을 사용하면 백 슬래시 이스케이프를 해석 할 수 있습니다.
Value of a is 10
다음은없는 결과입니다. -e 옵션-
Value of a is 10\n
다음은 echo 명령에서 사용할 수있는 이스케이프 시퀀스입니다.
Sr. 아니. | 탈출 및 설명 |
---|---|
1 | \\ 백 슬래시 |
2 | \a 경고 (BEL) |
삼 | \b 역행 키이 |
4 | \c 후행 줄 바꿈 억제 |
5 | \f 양식 공급 |
6 | \n 새 줄 |
7 | \r 캐리지 리턴 |
8 | \t 수평 탭 |
9 | \v 수직 탭 |
사용할 수 있습니다 -E 백 슬래시 이스케이프 해석을 비활성화하는 옵션 (기본값).
사용할 수 있습니다 -n 새 줄 삽입을 비활성화하는 옵션.
명령 대체
명령 대체는 쉘이 주어진 명령 세트를 수행 한 다음 명령 대신 출력을 대체하는 메커니즘입니다.
통사론
명령 대체는 명령이 다음과 같이 주어질 때 수행됩니다.
`command`
명령 대체를 수행 할 때 작은 따옴표가 아닌 역 따옴표를 사용해야합니다.
예
명령 대체는 일반적으로 명령의 출력을 변수에 할당하는 데 사용됩니다. 다음 예제는 각각 명령 대체를 보여줍니다.
#!/bin/sh
DATE=`date`
echo "Date is $DATE"
USERS=`who | wc -l`
echo "Logged in user are $USERS" UP=`date ; uptime` echo "Uptime is $UP"
실행하면 다음과 같은 결과를 받게됩니다.
Date is Thu Jul 2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul 2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03, 1 user, load avg: 0.13, 0.07, 0.15
가변 대체
변수 대체를 사용하면 쉘 프로그래머가 상태에 따라 변수 값을 조작 할 수 있습니다.
가능한 모든 대체에 대한 다음 표는 다음과 같습니다.
Sr. 아니. | 양식 및 설명 |
---|---|
1 | ${var} var 값을 대체하십시오 . |
2 | ${var:-word} 경우 var에 null 또는 해제는, 단어는 대체됩니다var. var 의 값은 변경되지 않습니다. |
삼 | ${var:=word} 경우 var에 null 또는 해제는, VAR는 값으로 설정됩니다word. |
4 | ${var:?message} 경우 var에 null 또는 설정 해제, 메시지를 표준 오류에 인쇄됩니다. 이것은 변수가 올바르게 설정되었는지 확인합니다. |
5 | ${var:+word} 경우 VAR이 설정되어, 단어 VAR 대체됩니다. var 의 값은 변경되지 않습니다. |
예
다음은 위 대체의 다양한 상태를 보여주는 예입니다.
#!/bin/sh
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
실행하면 다음과 같은 결과를 받게됩니다.
Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set
3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix
이 장에서는 쉘 인용 메커니즘에 대해 자세히 설명합니다. 메타 문자에 대해 논의하는 것으로 시작하겠습니다.
메타 문자
Unix Shell은 모든 Shell Script에서 사용하는 동안 특별한 의미를 갖는 다양한 메타 문자를 제공하며 인용되지 않는 한 단어를 종료합니다.
예를 들면 ? 디렉토리에 파일을 나열하는 동안 단일 문자와 일치하고 *둘 이상의 문자와 일치합니다. 다음은 대부분의 셸 특수 문자 (메타 문자라고도 함) 목록입니다.
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
문자는 앞에 a를 붙여서 인용 할 수 있습니다 (즉, 자신을 나타내도록 만들 수 있습니다). \.
예
다음 예는 인쇄 방법을 보여줍니다. * 또는 ? −
#!/bin/sh
echo Hello; Word
실행하면 다음과 같은 결과를 받게됩니다.
Hello
./test.sh: line 2: Word: command not found
shell returned 127
이제 인용 문자를 사용해 보겠습니다.
#!/bin/sh
echo Hello\; Word
실행하면 다음과 같은 결과를 받게됩니다.
Hello; Word
그만큼 $ sign은 메타 문자 중 하나이므로 쉘에 의한 특별한 처리를 피하기 위해 인용되어야합니다.
#!/bin/sh
echo "I have \$1200"
실행하면 다음과 같은 결과를 받게됩니다.
I have $1200
다음 표는 인용의 네 가지 형태를 나열합니다.
Sr. 아니. | 인용 및 설명 |
---|---|
1 | Single quote 이 따옴표 사이의 모든 특수 문자는 특별한 의미를 잃습니다. |
2 | Double quote 이 따옴표 사이의 대부분의 특수 문자는 이러한 예외를 제외하고는 특별한 의미를 잃습니다
|
삼 | Backslash 백 슬래시 바로 뒤에 오는 문자는 특별한 의미를 잃습니다. |
4 | Back quote 역 따옴표 사이에있는 모든 것은 명령으로 처리되고 실행됩니다. |
작은 따옴표
많은 특수 쉘 문자를 포함하는 echo 명령을 고려하십시오.
echo <-$1500.**>; (update?) [y|n]
각 특수 문자 앞에 백 슬래시를 두는 것은 지루하고 줄을 읽기 어렵게 만듭니다.
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
많은 문자 그룹을 쉽게 인용 할 수있는 방법이 있습니다. 문자열의 시작과 끝에 작은 따옴표 ( ')를 넣으십시오.
echo '<-$1500.**>; (update?) [y|n]'
작은 따옴표 안의 문자는 각 문자 앞에 백 슬래시가있는 것처럼 인용됩니다. 이를 통해 echo 명령이 적절한 방식으로 표시됩니다.
출력 할 문자열 내에 작은 따옴표가 나타나면 전체 문자열을 작은 따옴표 안에 넣지 말고 다음과 같이 백 슬래시 (\)를 사용하여 문자열 앞에 와야합니다.
echo 'It\'s Shell Programming
큰 따옴표
다음 쉘 스크립트를 실행 해보십시오. 이 쉘 스크립트는 작은 따옴표를 사용합니다-
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
실행하면 다음과 같은 결과를 받게됩니다.
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
이것은 표시되어야하는 것이 아닙니다. 작은 따옴표가 변수 대체를 방지한다는 것은 분명합니다. 변수 값을 대체하고 반전 된 쉼표가 예상대로 작동하도록하려면 다음과 같이 명령을 큰 따옴표로 묶어야합니다.
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
실행하면 다음과 같은 결과를 받게됩니다.
ZARA owes <-$1500.**>; [ as of (07/02) ]
큰 따옴표는 다음을 제외한 모든 문자의 특별한 의미를 제거합니다.
$ 매개 변수 대체 용
명령 대체에 대한 역 따옴표
\$ 문자 그대로 달러 기호를 사용하려면
\` 리터럴 역 따옴표를 사용하려면
\" 포함 된 큰 따옴표를 사용하려면
\\ 포함 된 백 슬래시를 사용하려면
그 외 모든 것들 \ 문자는 리터럴 (특별하지 않음)
작은 따옴표 안의 문자는 각 문자 앞에 백 슬래시가있는 것처럼 인용됩니다. 이렇게하면 echo 명령이 제대로 표시됩니다.
출력 할 문자열 내에 작은 따옴표가 나타나면 전체 문자열을 작은 따옴표 안에 넣지 말고 다음과 같이 백 슬래시 (\)를 사용하여 문자열 앞에 와야합니다.
echo 'It\'s Shell Programming'
역 따옴표
사이에 셸 명령 삽입 backquotes 명령을 실행합니다.
통사론
다음은 쉘을 넣는 간단한 구문입니다. command 역 따옴표 사이-
var=`command`
예
그만큼 date 다음 예제에서 명령을 실행하고 생성 된 결과는 DATA 변수에 저장됩니다.
DATE=`date`
echo "Current Date: $DATE"
실행하면 다음과 같은 결과를 받게됩니다.
Current Date: Thu Jul 2 05:28:45 MST 2009
이 장에서는 셸 입력 / 출력 리디렉션에 대해 자세히 설명합니다. 대부분의 Unix 시스템 명령은 터미널에서 입력을 받아 결과 출력을 터미널로 다시 보냅니다. 명령은 일반적으로 기본적으로 터미널 인 표준 입력에서 입력을 읽습니다. 마찬가지로 명령은 일반적으로 출력을 표준 출력 (기본적으로 터미널)에 기록합니다.
출력 리디렉션
일반적으로 표준 출력을위한 명령의 출력은 대신 파일로 쉽게 전환 될 수 있습니다. 이 기능을 출력 리디렉션이라고합니다.
일반적으로 출력을 표준 출력에 쓰는 명령에 표기법> 파일이 추가되면 해당 명령의 출력이 터미널 대신 파일에 기록됩니다.
다음을 확인하십시오. who 사용자 파일에서 명령의 전체 출력을 리디렉션하는 명령입니다.
$ who > users
터미널에 출력이 표시되지 않습니다. 이는 출력이 기본 표준 출력 장치 (터미널)에서 지정된 파일로 리디렉션 되었기 때문입니다. 전체 내용에 대한 사용자 파일을 확인할 수 있습니다-
$ cat users
oko tty01 Sep 12 07:30
ai tty15 Sep 12 13:32
ruth tty21 Sep 12 10:10
pat tty24 Sep 12 13:07
steve tty25 Sep 12 13:03
$
명령의 출력이 파일로 리디렉션되고 파일에 이미 일부 데이터가 포함되어 있으면 해당 데이터가 손실됩니다. 다음 예를 고려하십시오-
$ echo line 1 > users
$ cat users line 1 $
>> 연산자를 사용하여 다음과 같이 기존 파일에 출력을 추가 할 수 있습니다.
$ echo line 2 >> users $ cat users
line 1
line 2
$
입력 리디렉션
명령의 출력을 파일로 리디렉션 할 수있는 것처럼 명령 입력을 파일에서 리디렉션 할 수 있습니다. 로greater-than character > 출력 리디렉션에 사용됩니다. less-than character < 명령 입력을 리디렉션하는 데 사용됩니다.
일반적으로 표준 입력에서 입력을받는 명령은 이러한 방식으로 입력을 파일에서 리디렉션 할 수 있습니다. 예를 들어, 위에서 생성 한 파일 사용자 의 줄 수를 계산하려면 다음과 같이 명령을 실행할 수 있습니다.
$ wc -l users
2 users
$
실행하면 다음 출력이 표시됩니다. 표준 입력을 리디렉션하여 파일의 줄 수를 계산할 수 있습니다.wc파일 사용자의 명령 -
$ wc -l < users
2
$
wc 명령의 두 가지 형식에 의해 생성되는 출력에는 차이가 있습니다. 첫 번째 경우 파일 사용자의 이름이 줄 수와 함께 나열됩니다. 두 번째 경우에는 그렇지 않습니다.
첫 번째 경우 wc는 파일 사용자로부터 입력을 읽고 있음을 알고 있습니다. 두 번째 경우에는 표준 입력에서 입력을 읽는 것만 알고 있으므로 파일 이름을 표시하지 않습니다.
Here Document
ㅏ here document 입력을 대화 형 쉘 스크립트 또는 프로그램으로 리디렉션하는 데 사용됩니다.
대화 형 프로그램 또는 대화 형 셸 스크립트에 필요한 입력을 제공하여 사용자 작업없이 셸 스크립트 내에서 대화 형 프로그램을 실행할 수 있습니다.
a에 대한 일반적인 형태 here 문서는-
command << delimiter
document
delimiter
여기서 쉘은 <<연산자는 지정된 구분 기호를 포함하는 행을 찾을 때까지 입력을 읽는 명령으로 사용됩니다. 그런 다음 구분 기호를 포함하는 행까지의 모든 입력 행이 명령의 표준 입력으로 공급됩니다.
구분 기호는 쉘에 here문서가 완료되었습니다. 이것이 없으면 쉘은 계속해서 입력을 계속 읽습니다. 구분 기호는 공백이나 탭을 포함하지 않는 단일 단어 여야합니다.
다음은 명령에 대한 입력입니다. wc -l 총 줄 수를 계산하려면-
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
사용할 수 있습니다 here document 다음과 같이 스크립트를 사용하여 여러 줄을 인쇄하려면-
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
실행하면 다음과 같은 결과를 받게됩니다.
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
다음 스크립트는 vi 텍스트 편집기 및 파일에 입력 저장 test.txt.
#!/bin/sh
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands
vim이 vi로 작동하는이 스크립트를 실행하면 다음과 같은 출력이 표시됩니다.
$ sh test.sh Vim: Warning: Input is not from a terminal $
스크립트를 실행하면 파일에 다음이 추가 된 것을 볼 수 있습니다. test.txt −
$ cat test.txt This file was created automatically from a shell script $
출력 버리기
때때로 명령을 실행해야하지만 화면에 출력이 표시되는 것을 원하지 않습니다. 이러한 경우 출력을 파일로 리디렉션하여 삭제할 수 있습니다./dev/null −
$ command > /dev/null
여기서 command는 실행하려는 명령의 이름입니다. 파일/dev/null 모든 입력을 자동으로 삭제하는 특수 파일입니다.
명령의 출력과 오류 출력을 모두 버리려면 표준 리디렉션을 사용하여 STDERR ...에 STDOUT −
$ command > /dev/null 2>&1
여기 2 대표하다 STDERR 과 1 대표하다 STDOUT. 다음과 같이 STDOUT을 STDERR로 리디렉션하여 STDERR에 메시지를 표시 할 수 있습니다.
$ echo message 1>&2
리디렉션 명령
다음은 리디렉션에 사용할 수있는 명령의 전체 목록입니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | pgm > file pgm의 출력이 파일로 리디렉션됩니다. |
2 | pgm < file 프로그램 pgm은 파일에서 입력을 읽습니다. |
삼 | pgm >> file pgm의 출력이 파일에 추가됩니다. |
4 | n > file 설명자가있는 스트림의 출력 n 파일로 리디렉션 됨 |
5 | n >> file 설명자가있는 스트림의 출력 n 파일에 추가 |
6 | n >& m 스트림의 출력 병합 n 스트림 m |
7 | n <& m 스트림의 입력 병합 n 스트림 m |
8 | << tag 표준 입력은 여기에서 줄 시작 부분의 다음 태그를 통해옵니다. |
9 | | 한 프로그램 또는 프로세스에서 출력을 가져 와서 다른 프로그램으로 보냅니다. |
파일 설명자는 0 일반적으로 표준 입력 (STDIN)입니다. 1 표준 출력 (STDOUT)이고 2 표준 오류 출력 (STDERR)입니다.
이 장에서는 쉘 기능에 대해 자세히 설명합니다. 함수를 사용하면 스크립트의 전체 기능을 더 작은 논리적 하위 섹션으로 나눈 다음 필요할 때 개별 작업을 수행하도록 호출 할 수 있습니다.
기능을 사용하여 반복적 인 작업을 수행하는 것은 code reuse. 이것은 현대 객체 지향 프로그래밍 원칙의 중요한 부분입니다.
쉘 함수는 다른 프로그래밍 언어의 서브 루틴, 프로 시저 및 함수와 유사합니다.
함수 생성
함수를 선언하려면 다음 구문을 사용하십시오.
function_name () {
list of commands
}
함수의 이름은 function_name, 그리고 그것이 스크립트의 다른 곳에서 호출하는 데 사용할 것입니다. 함수 이름 뒤에는 괄호와 중괄호로 묶인 명령 목록이 와야합니다.
예
다음 예제는 함수의 사용을 보여줍니다-
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
실행하면 다음과 같은 출력이 표시됩니다.
$./test.sh
Hello World
함수에 매개 변수 전달
함수를 호출하는 동안 매개 변수를 허용하는 함수를 정의 할 수 있습니다. 이러한 매개 변수는 다음과 같이 표시됩니다.$1, $2 등등.
다음은 Zara 와 Ali 라는 두 개의 매개 변수를 전달한 다음 함수에서 이러한 매개 변수를 캡처하고 인쇄하는 예입니다.
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2"
}
# Invoke your function
Hello Zara Ali
실행하면 다음과 같은 결과를 받게됩니다.
$./test.sh
Hello World Zara Ali
함수에서 값 반환
실행하면 exit 함수 내부에서 명령을 실행하면 그 효과는 함수의 실행을 종료 할뿐만 아니라 함수를 호출 한 쉘 프로그램도 종료하는 것입니다.
대신 함수의 실행을 종료하고 싶다면 정의 된 함수에서 나올 수있는 방법이 있습니다.
상황에 따라 다음을 사용하여 함수에서 값을 반환 할 수 있습니다. return 구문이 다음과 같은 명령-
return code
여기 code 여기에서 선택할 수있는 것은 무엇이든 될 수 있지만 스크립트 전체에서 의미 있거나 유용한 것을 선택해야합니다.
예
다음 함수는 값 10을 반환합니다-
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$?
echo "Return value is $ret"
실행하면 다음과 같은 결과를 받게됩니다.
$./test.sh
Hello World Zara Ali
Return value is 10
중첩 함수
함수의 더 흥미로운 기능 중 하나는 자신과 다른 함수를 호출 할 수 있다는 것입니다. 자신을 호출하는 함수는recursive function.
다음 예제는 두 함수의 중첩을 보여줍니다.
#!/bin/sh
# Calling one function from another
number_one () {
echo "This is the first function speaking..."
number_two
}
number_two () {
echo "This is now the second function speaking..."
}
# Calling function one.
number_one
실행하면 다음과 같은 결과를 받게됩니다.
This is the first function speaking...
This is now the second function speaking...
프롬프트에서 함수 호출
일반적으로 사용되는 함수에 대한 정의를 .profile. 이러한 정의는 로그인 할 때마다 사용할 수 있으며 명령 프롬프트에서 사용할 수 있습니다.
또는 파일의 정의를 그룹화 할 수 있습니다. test.sh을 입력 한 다음 현재 쉘에서 파일을 실행합니다.
$. test.sh
이것은 내부에 정의 된 함수를 일으키는 효과가 있습니다. test.sh 다음과 같이 현재 쉘에 읽고 정의됩니다.
$ number_one
This is the first function speaking...
This is now the second function speaking...
$
셸에서 함수 정의를 제거하려면 다음과 함께 unset 명령을 사용합니다. .f선택권. 이 명령은 쉘에 대한 변수 정의를 제거하는데도 사용됩니다.
$ unset -f function_name
모든 Unix 명령에는 여러 선택적 및 필수 옵션이 제공됩니다. 이러한 명령의 전체 구문을 잊어 버리는 것은 매우 일반적입니다.
아무도 모든 Unix 명령과 모든 옵션을 기억할 수 없기 때문에 Unix가 개발 단계에있을 때부터이 권한을 완화 할 수있는 온라인 도움말이 있습니다.
유닉스 버전 Help files 불린다 man pages. 명령 이름이 있고 사용 방법을 잘 모르는 경우 매뉴얼 페이지가 모든 단계에서 도움을줍니다.
통사론
다음은 시스템에서 작업하는 동안 Unix 명령에 대한 세부 정보를 얻는 데 도움이되는 간단한 명령입니다.
$man command
예
도움을 받아야하는 명령이 있다고 가정합니다. 당신이 알고 싶다고 가정pwd 다음 명령을 사용하면됩니다.
$man pwd
위의 명령은 다음에 대한 완전한 정보를 제공합니다. pwd명령. 자세한 내용을 보려면 명령 프롬프트에서 직접 시도하십시오.
당신은 완전한 세부 사항을 얻을 수 있습니다 man 다음 명령을 사용하여 자체 명령-
$man man
매뉴얼 페이지 섹션
매뉴얼 페이지는 일반적으로 섹션으로 나뉘며 일반적으로 매뉴얼 페이지 작성자의 선호도에 따라 다릅니다. 다음 표에는 몇 가지 일반적인 섹션이 나열되어 있습니다.
Sr. 아니. | 섹션 및 설명 |
---|---|
1 | NAME 명령의 이름 |
2 | SYNOPSIS 명령의 일반 사용 매개 변수 |
삼 | DESCRIPTION 명령이 수행하는 작업을 설명합니다. |
4 | OPTIONS 명령에 대한 모든 인수 또는 옵션을 설명합니다. |
5 | SEE ALSO 매뉴얼 페이지의 명령과 직접 관련되거나 기능과 매우 유사한 기타 명령을 나열합니다. |
6 | BUGS 명령 또는 출력에 존재하는 알려진 문제 또는 버그를 설명합니다. |
7 | EXAMPLES 독자에게 명령 사용 방법에 대한 아이디어를 제공하는 일반적인 사용 예 |
8 | AUTHORS 매뉴얼 페이지 / 명령의 작성자 |
요약하자면 맨 페이지는 유닉스 시스템의 명령이나 파일에 대한 정보가 필요할 때 중요한 리소스이자 연구의 첫 번째 방법입니다.
유용한 셸 명령
다음 링크는 가장 중요하고 자주 사용되는 Unix Shell 명령 목록을 제공합니다.
명령을 사용하는 방법을 모르는 경우 man 페이지를 사용하여 명령에 대한 자세한 내용을 확인하십시오.
다음은 Unix Shell-유용한 명령 목록입니다.
이 장에서는 Unix에서 SED를 사용한 정규식에 대해 자세히 설명합니다.
정규식은 여러 문자 시퀀스를 설명하는 데 사용할 수있는 문자열입니다. 정규식은 다음을 포함하여 여러 다른 Unix 명령에서 사용됩니다.ed, sed, awk, grep, 그리고 더 제한적으로 vi.
여기 SED 약자 s떨다 editor. 이 스트림 지향 편집기는 스크립트 실행 전용으로 만들어졌습니다. 따라서 입력 한 모든 입력은 통과하여 STDOUT으로 이동하며 입력 파일을 변경하지 않습니다.
sed 호출
시작하기 전에 로컬 사본이 있는지 확인하십시오. /etc/passwd 작업 할 텍스트 파일 sed.
앞서 언급했듯이 sed는 다음과 같이 파이프를 통해 데이터를 전송하여 호출 할 수 있습니다.
$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression = script
...............................
그만큼 cat 명령은 내용을 덤프합니다. /etc/passwd ...에 sed파이프를 통해 sed의 패턴 공간으로. 패턴 공간은 sed가 작업에 사용하는 내부 작업 버퍼입니다.
sed 일반 구문
다음은 sed의 일반적인 구문입니다-
/pattern/action
여기, pattern 정규식이고 action다음 표에 제공된 명령 중 하나입니다. 만약pattern 생략됩니다. action 위에서 본 것처럼 모든 라인에 대해 수행됩니다.
패턴을 둘러싸는 슬래시 문자 (/)는 구분 기호로 사용되기 때문에 필요합니다.
Sr. 아니. | 범위 및 설명 |
---|---|
1 | p 라인을 인쇄합니다. |
2 | d 라인을 삭제합니다 |
삼 | s/pattern1/pattern2/ pattern1의 첫 번째 발생을 pattern2로 대체합니다. |
sed로 모든 라인 삭제
이제 sed로 모든 줄을 삭제하는 방법을 이해할 것입니다. sed를 다시 호출하십시오. 그러나 sed는 이제editing command delete line, 단일 문자로 표시 d −
$ cat /etc/passwd | sed 'd' $
파이프를 통해 파일을 전송하여 sed를 호출하는 대신 다음 예제와 같이 파일에서 데이터를 읽도록 sed에 지시 할 수 있습니다.
다음 명령은 cat 명령없이 이전 예제와 똑같습니다.
$ sed -e 'd' /etc/passwd $
sed 주소
sed는 주소도 지원합니다. 주소는 파일의 특정 위치 또는 특정 편집 명령을 적용해야하는 범위입니다. sed에 주소가 없으면 파일의 모든 행에서 작업을 수행합니다.
다음 명령은 사용했던 sed 명령에 기본 주소를 추가합니다.
$ cat /etc/passwd | sed '1d' |more daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
숫자 1이 delete edit명령. 이것은 sed가 파일의 첫 번째 줄에서 편집 명령을 수행하도록 지시합니다. 이 예에서 sed는/etc/password 나머지 파일을 인쇄합니다.
sed 주소 범위
이제 우리는 the sed address ranges. 그렇다면 파일에서 한 줄 이상을 제거하려면 어떻게해야합니까? 다음과 같이 sed로 주소 범위를 지정할 수 있습니다.
$ cat /etc/passwd | sed '1, 5d' |more games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
위의 명령은 1부터 5까지의 모든 줄에 적용됩니다. 이렇게하면 처음 5 줄이 삭제됩니다.
다음 주소 범위를 시도하십시오-
Sr. 아니. | 범위 및 설명 |
---|---|
1 | '4,10d' 4부터 라인 일 10까지 일 삭제 |
2 | '10,4d' sed가 역방향으로 작동하지 않기 때문에 10 번째 줄만 삭제됩니다. |
삼 | '4,+5d' 파일의 4 행과 일치하고 해당 행을 삭제하고 다음 5 행을 계속 삭제 한 다음 삭제를 중단하고 나머지를 인쇄합니다. |
4 | '2,5!d' 2 시작을 제외하고이 삭제 된 모든 차 5까지 일 라인 |
5 | '1~3d' 이렇게하면 첫 번째 줄이 삭제되고 다음 세 줄로 넘어간 다음 네 번째 줄이 삭제됩니다. Sed는 파일이 끝날 때까지이 패턴을 계속 적용합니다. |
6 | '2~2d' 이것은 sed에게 두 번째 줄을 삭제하고, 다음 줄로 넘어 가고, 다음 줄을 삭제하고, 파일 끝에 도달 할 때까지 반복하도록 지시합니다. |
7 | '4,10p' 4 라인부터 제 10까지 번째 인쇄 |
8 | '4,d' 이것은 구문 오류를 생성합니다. |
9 | ',10d' 이것은 또한 구문 오류를 생성합니다. |
Note − 사용 중 p 액션을 사용하려면 -n라인 인쇄의 반복을 방지하는 옵션. 다음 두 명령의 차이점을 확인하십시오-
$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'
대체 사령부
다음으로 표시되는 대체 명령 s은 지정한 문자열을 지정한 다른 문자열로 대체합니다.
한 문자열을 다른 문자열로 대체하려면 sed에 첫 번째 문자열이 끝나고 대체 문자열이 시작되는 위치에 대한 정보가 있어야합니다. 이를 위해 슬래시 ()로 두 문자열을 예약 처리합니다./) 캐릭터.
다음 명령은 문자열의 행에서 첫 번째 항목을 대체합니다. root 문자열로 amrood.
$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................
sed는 한 줄의 첫 번째 항목 만 대체한다는 점에 유의해야합니다. 문자열 루트가 한 줄에 두 번 이상 발생하면 첫 번째 일치 항목 만 대체됩니다.
sed가 전역 대체를 수행하려면 문자를 추가하십시오. g 다음과 같이 명령의 끝까지-
$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...........................
대체 플래그
이외에도 전달할 수있는 기타 유용한 플래그가 많이 있습니다. g 한 번에 둘 이상을 지정할 수 있습니다.
Sr. 아니. | 플래그 및 설명 |
---|---|
1 | g 첫 번째 일치뿐만 아니라 모든 일치 항목을 바꿉니다. |
2 | NUMBER NUMBER 번째 일치 만 바꿉니다. |
삼 | p 대체가 이루어진 경우 패턴 공간을 인쇄합니다. |
4 | w FILENAME 대체 된 경우 결과를 FILENAME에 기록합니다. |
5 | I or i 대소 문자를 구분하지 않는 방식으로 일치 |
6 | M or m 특수 정규식 문자 ^ 및 $, this flag causes ^ to match the empty string after a newline and $ 줄 바꿈 앞의 빈 문자열과 일치 |
대체 문자열 구분 기호 사용
슬래시 문자를 포함하는 문자열에서 대체를 수행해야한다고 가정하십시오. 이 경우 뒤에 지정된 문자를 제공하여 다른 구분 기호를 지정할 수 있습니다.s.
$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
위의 예에서 우리는 : 로 delimiter 슬래시 대신 / 검색을 시도했기 때문에 /root 단순한 루트 대신.
빈 공간으로 바꾸기
빈 대체 문자열을 사용하여 루트 문자열을 /etc/passwd 완전히 파일-
$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
주소 대체
문자열을 대체하려면 sh 문자열로 quiet 10 행에서만 다음과 같이 지정할 수 있습니다.
$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet
마찬가지로 주소 범위 대체를 수행하려면 다음과 같이 할 수 있습니다.
$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
출력에서 볼 수 있듯이 처음 다섯 줄에는 문자열이 있습니다. sh 로 변경 quiet, 그러나 나머지 줄은 그대로 두었습니다.
매칭 명령
당신은 p 옵션과 함께 -n 다음과 같이 모든 일치하는 줄을 인쇄하는 옵션-
$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
정규식 사용
패턴을 일치시키는 동안 더 많은 유연성을 제공하는 정규식을 사용할 수 있습니다.
daemon으로 시작하는 모든 줄과 일치하는 다음 예제를 확인한 다음 삭제합니다.
$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
다음은 다음으로 끝나는 모든 줄을 삭제하는 예입니다. sh −
$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync
다음 표에는 정규식에서 매우 유용한 네 가지 특수 문자가 나열되어 있습니다.
Sr. 아니. | 캐릭터 및 설명 |
---|---|
1 | ^ 줄의 시작과 일치 |
2 | $ 줄의 끝과 일치 |
삼 | . 단일 문자와 일치 |
4 | * 0 개 이상의 이전 문자와 일치 |
5 | [chars] chars에 지정된 문자 중 하나와 일치합니다. 여기서 chars는 일련의 문자입니다. -문자를 사용하여 문자 범위를 나타낼 수 있습니다. |
일치하는 문자
몇 가지 표현을 더 살펴보면 metacharacters. 예를 들어, 다음 패턴-
Sr. 아니. | 표현 및 설명 |
---|---|
1 | /a.c/ 다음과 같은 문자열을 포함하는 행과 일치합니다. a+c, a-c, abc, match, 및 a3c |
2 | /a*c/ 다음과 같은 문자열과 함께 동일한 문자열을 찾습니다. ace, yacc, 및 arctic |
삼 | /[tT]he/ 문자열과 일치 The 과 the |
4 | /^$/ 빈 줄과 일치 |
5 | /^.*$/ 그것이 무엇이든 전체 라인과 일치 |
6 | / */ 하나 이상의 공백과 일치 |
7 | /^$/ 성냥 blank 윤곽 |
다음 표는 자주 사용되는 문자 집합을 보여줍니다.
Sr. 아니. | 세트 및 설명 |
---|---|
1 | [a-z] 단일 소문자와 일치 |
2 | [A-Z] 단일 대문자와 일치 |
삼 | [a-zA-Z] 단일 문자와 일치 |
4 | [0-9] 단일 숫자와 일치 |
5 | [a-zA-Z0-9] 단일 문자 또는 숫자와 일치 |
문자 클래스 키워드
일부 특수 키워드는 일반적으로 regexps, 특히 regexps. 이것들은 일을 단순화하고 가독성을 향상시키기 때문에 sed 정규식에 매우 유용합니다.
예를 들어, 문자 a through z 그리고 캐릭터 A through Z, 키워드가있는 문자 클래스를 구성합니다. [[:alpha:]]
알파벳 문자 클래스 키워드를 사용하면이 명령은 /etc/syslog.conf 알파벳 문자로 시작하는 파일 −
$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
다음 표는 GNU sed에서 사용 가능한 문자 클래스 키워드의 전체 목록입니다.
Sr. 아니. | 캐릭터 클래스 및 설명 |
---|---|
1 | [[:alnum:]] 영숫자 [az AZ 0-9] |
2 | [[:alpha:]] 알파벳 [az AZ] |
삼 | [[:blank:]] 공백 문자 (공백 또는 탭) |
4 | [[:cntrl:]] 제어 문자 |
5 | [[:digit:]] 숫자 [0-9] |
6 | [[:graph:]] 보이는 모든 문자 (공백 제외) |
7 | [[:lower:]] 소문자 [az] |
8 | [[:print:]] 인쇄 가능한 문자 (비 제어 문자) |
9 | [[:punct:]] 구두점 문자 |
10 | [[:space:]] 공백 |
11 | [[:upper:]] 대문자 [AZ] |
12 | [[:xdigit:]] 16 진수 [0-9 af AF] |
앰퍼샌드 참조
그만큼 sed metacharacter &일치 된 패턴의 내용을 나타냅니다. 예를 들어 다음과 같은 파일이 있다고 가정합니다.phone.txt 다음과 같은 전체 전화 번호-
5555551212
5555551213
5555551214
6665551215
6665551216
7775551217
당신은 만들고 싶어 area code(처음 세 자리) 쉽게 읽을 수 있도록 괄호로 묶습니다. 이를 위해 앰퍼샌드 대체 문자를 사용할 수 있습니다.
$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(777)5551217
여기 패턴 부분에서 처음 세 자리를 일치시키고 다음을 사용합니다. & 이 3 자리 숫자를 주변으로 대체합니다. parentheses.
여러 sed 명령 사용
다음과 같이 단일 sed 명령에서 여러 sed 명령을 사용할 수 있습니다.
$ sed -e 'command1' -e 'command2' ... -e 'commandN' files
여기 command1 ...을 통하여 commandN이전에 설명한 유형의 sed 명령입니다. 이 명령은 파일이 제공하는 파일 목록의 각 행에 적용됩니다.
동일한 메커니즘을 사용하여 위의 전화 번호 예를 다음과 같이 작성할 수 있습니다.
$ sed -e 's/^[[:digit:]]\{3\}/(&)/g' \
-e 's/)[[:digit:]]\{3\}/&-/g' phone.txt
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
Note − 위의 예에서 문자 클래스 키워드를 반복하는 대신 [[:digit:]] 세 번, 우리는 그것을 \{3\}, 이는 앞의 정규 표현식이 세 번 일치 함을 의미합니다. 우리는 또한 사용했습니다\ 줄 바꿈을 제공하려면 명령을 실행하기 전에 제거해야합니다.
역 참조
그만큼 ampersand metacharacter유용하지만 더 유용한 것은 정규 표현식에서 특정 영역을 정의하는 기능입니다. 이러한 특수 영역은 대체 문자열에서 참조로 사용할 수 있습니다. 정규식의 특정 부분을 정의하면 특수 참조 문자로 해당 부분을 다시 참조 할 수 있습니다.
할 것 back references, 먼저 지역을 정의한 다음 해당 지역을 다시 참조해야합니다. 영역을 정의하려면 다음을 삽입합니다.backslashed parentheses관심있는 각 지역 주변. 백 슬래시로 둘러싼 첫 번째 영역은 다음으로 참조됩니다.\1, 두 번째 지역 \2, 등등.
가정 phone.txt 다음 텍스트가 있습니다-
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
다음 명령을 시도하십시오-
$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \
code: \1 Second: \2 Third: \3/'
Area code: (555) Second: 555- Third: 1212
Area code: (555) Second: 555- Third: 1213
Area code: (555) Second: 555- Third: 1214
Area code: (666) Second: 555- Third: 1215
Area code: (666) Second: 555- Third: 1216
Area code: (777) Second: 555- Third: 1217
Note − 위의 예에서 괄호 안의 각 정규식은 다음에 의해 다시 참조됩니다. \1, \2등등. 우리는 사용했습니다\여기서 줄 바꿈을합니다. 명령을 실행하기 전에 제거해야합니다.
파일 시스템은 파티션 또는 디스크에있는 파일의 논리적 모음입니다. 파티션은 정보의 컨테이너이며 원하는 경우 전체 하드 드라이브에 걸쳐있을 수 있습니다.
하드 드라이브는 일반적으로 하나의 파일 시스템 만 포함하는 다양한 파티션을 가질 수 있습니다. /file system 또는 다른 포함 /home file system.
파티션 당 하나의 파일 시스템은 서로 다른 파일 시스템의 논리적 유지 관리 및 관리를 허용합니다.
DVD-ROM, USB 장치 및 플로피 드라이브와 같은 물리적 장치를 포함하여 Unix의 모든 것은 파일로 간주됩니다.
디렉토리 구조
Unix는 거꾸로 된 트리와 매우 유사한 계층 적 파일 시스템 구조를 사용하며, 파일 시스템의 기본에 루트 (/)가 있고 여기에서 확산되는 다른 모든 디렉토리가 있습니다.
Unix 파일 시스템은 다음과 같은 속성을 가진 파일과 디렉토리의 모음입니다.
루트 디렉토리 (/) 다른 파일과 디렉토리를 포함합니다.
각 파일 또는 디렉토리는 이름, 파일이있는 디렉토리 및 일반적으로라는 고유 식별자로 고유하게 식별됩니다. inode.
관례 상 루트 디렉토리는 inode 수 2 그리고 lost+found 디렉토리에는 inode 수 3. Inode 번호0 과 1사용되지 않습니다. 파일 inode 번호는 다음을 지정하여 볼 수 있습니다.-i option ...에 ls command.
독립형입니다. 한 파일 시스템과 다른 파일 시스템 간에는 종속성이 없습니다.
디렉토리는 특정 목적을 가지고 있으며 일반적으로 파일을 쉽게 찾을 수 있도록 동일한 유형의 정보를 보유합니다. 다음은 유닉스의 주요 버전에 존재하는 디렉토리입니다-
Sr. 아니. | 디렉토리 및 설명 |
---|---|
1 | / 파일 구조의 최상위 수준에서 필요한 디렉토리 만 포함해야하는 루트 디렉토리입니다. |
2 | /bin 여기에 실행 파일이 있습니다. 이 파일은 모든 사용자가 사용할 수 있습니다. |
삼 | /dev 이들은 장치 드라이버입니다 |
4 | /etc 감독자 디렉토리 명령, 구성 파일, 디스크 구성 파일, 유효한 사용자 목록, 그룹, 이더넷, 호스트, 중요한 메시지를 보낼 위치 |
5 | /lib 공유 라이브러리 파일과 때때로 다른 커널 관련 파일을 포함합니다. |
6 | /boot 시스템 부팅을위한 파일 포함 |
7 | /home 사용자 및 기타 계정의 홈 디렉토리를 포함합니다. |
8 | /mnt 다음과 같은 다른 임시 파일 시스템을 마운트하는 데 사용됩니다. cdrom 과 floppy 에 대한 CD-ROM 운전하고 floppy diskette drive, 각각 |
9 | /proc 파일로 표시된 모든 프로세스를 포함합니다. process number 또는 시스템에 동적 인 기타 정보 |
10 | /tmp 시스템 부팅 사이에 사용되는 임시 파일을 보관합니다. |
11 | /usr 기타 용도로 사용되며 많은 사용자가 사용할 수 있습니다. 관리 명령, 공유 파일, 라이브러리 파일 및 기타 포함 |
12 | /var 일반적으로 로그 및 인쇄 파일과 같은 가변 길이 파일과 가변적 인 양의 데이터를 포함 할 수있는 기타 유형의 파일을 포함합니다. |
13 | /sbin 일반적으로 시스템 관리를위한 바이너리 (실행 가능) 파일이 포함되어 있습니다. 예를 들면fdisk 과 ifconfig 유용성 |
14 | /kernel 커널 파일 포함 |
파일 시스템 탐색
이제 파일 시스템의 기본 사항을 이해 했으므로 필요한 파일을 탐색 할 수 있습니다. 다음 명령은 시스템을 탐색하는 데 사용됩니다-
Sr. 아니. | 명령 및 설명 |
---|---|
1 | cat filename 파일 이름을 표시합니다 |
2 | cd dirname 식별 된 디렉토리로 이동합니다. |
삼 | cp file1 file2 하나의 파일 / 디렉토리를 지정된 위치에 복사합니다. |
4 | file filename 파일 유형 (이진, 텍스트 등)을 식별합니다. |
5 | find filename dir 파일 / 디렉토리를 찾습니다. |
6 | head filename 파일의 시작을 표시합니다. |
7 | less filename 끝 또는 처음부터 파일 검색 |
8 | ls dirname 지정된 디렉토리의 내용을 표시합니다. |
9 | mkdir dirname 지정된 디렉터리를 만듭니다. |
10 | more filename 처음부터 끝까지 파일을 검색합니다. |
11 | mv file1 file2 파일 / 디렉토리의 위치를 이동하거나 이름을 바꿉니다. |
12 | pwd 사용자가있는 현재 디렉토리를 표시합니다. |
13 | rm filename 파일을 제거합니다. |
14 | rmdir dirname 디렉토리를 제거합니다. |
15 | tail filename 파일의 끝을 표시합니다. |
16 | touch filename 빈 파일을 생성하거나 기존 파일 또는 해당 속성을 수정합니다. |
17 | whereis filename 파일의 위치를 보여줍니다 |
18 | which filename PATH에있는 경우 파일의 위치를 표시합니다. |
맨 페이지 도움말 을 사용 하여 여기에 언급 된 각 명령에 대한 전체 구문을 확인할 수 있습니다 .
df 명령
파티션 공간을 관리하는 첫 번째 방법은 df (disk free)명령. 명령df -k (disk free) 표시합니다 disk space usage in kilobytes, 아래와 같이-
$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $
다음과 같은 일부 디렉토리 /devices, kbytes, used 및 avail 열에 0이 표시되고 용량에 0 %가 표시됩니다. 이들은 특수 (또는 가상) 파일 시스템이며 / 아래의 디스크에 있지만 그 자체로는 디스크 공간을 사용하지 않습니다.
그만큼 df -k출력은 일반적으로 모든 Unix 시스템에서 동일합니다. 일반적으로 포함되는 내용은 다음과 같습니다.
Sr. 아니. | 열 및 설명 |
---|---|
1 | Filesystem 물리적 파일 시스템 이름 |
2 | kbytes 저장 매체에서 사용 가능한 총 공간 (KB) |
삼 | used 사용 된 총 공간 (파일 별) |
4 | avail 사용 가능한 총 KB |
5 | capacity 파일이 사용하는 총 공간의 백분율 |
6 | Mounted on 파일 시스템이 마운트되는 대상 |
사용할 수 있습니다 -h (human readable) option 이해하기 쉬운 표기법으로 크기를 표시하는 형식으로 출력을 표시합니다.
뒤 사령부
그만큼 du (disk usage) command 특정 디렉토리의 디스크 공간 사용량을 표시하는 디렉토리를 지정할 수 있습니다.
이 명령은 특정 디렉토리가 차지하는 공간을 확인하려는 경우 유용합니다. 다음 명령은 각 디렉토리에서 사용하는 블록 수를 표시합니다. 단일 블록은 시스템에 따라 512 바이트 또는 1 킬로바이트를 사용할 수 있습니다.
$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $
그만큼 -h 옵션은 출력을 이해하기 쉽게 만듭니다.
$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $
파일 시스템 마운트
시스템에서 사용할 수 있으려면 파일 시스템을 마운트해야합니다. 현재 시스템에 마운트 된 (사용 가능한) 항목을 보려면 다음 명령을 사용하십시오.
$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $
그만큼 /mntUnix 규칙에 따라 디렉토리는 임시 마운트 (예 : CDROM 드라이브, 원격 네트워크 드라이브 및 플로피 드라이브)가있는 위치입니다. 파일 시스템을 마운트해야하는 경우 다음 구문으로 mount 명령을 사용할 수 있습니다.
mount -t file_system_type device_to_mount directory_to_mount_to
예를 들어, CD-ROM 디렉토리로 /mnt/cdrom, 입력 할 수 있습니다-
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
이것은 CD-ROM 장치가 호출되었다고 가정합니다. /dev/cdrom 그리고 당신이 그것을 마운트하려는 /mnt/cdrom. 자세한 내용은 mount 매뉴얼 페이지를 참조하거나 mount를 입력하십시오.-h 도움말 정보를 보려면 명령 줄에서.
마운트 후 cd 명령을 사용하여 방금 만든 마운트 지점을 통해 새로 사용 가능한 파일 시스템을 탐색 할 수 있습니다.
파일 시스템 마운트 해제
시스템에서 파일 시스템을 마운트 해제 (제거)하려면 umount 마운트 지점 또는 장치를 식별하여 명령.
예를 들면 to unmount cdrom, 다음 명령을 사용하십시오-
$ umount /dev/cdrom
그만큼 mount command 파일 시스템에 액세스 할 수 있지만 대부분의 최신 Unix 시스템에서는 automount function 이 프로세스는 사용자에게 보이지 않으며 개입이 필요하지 않습니다.
사용자 및 그룹 할당량
사용자 및 그룹 할당량은 단일 사용자 또는 특정 그룹 내의 모든 사용자가 사용하는 공간의 양을 관리자가 정의한 값으로 제한 할 수있는 메커니즘을 제공합니다.
할당량은 공간의 양이나 디스크 블록 수가 관리자가 정의한 제한을 초과하기 시작하면 사용자가 어떤 조치를 취할 수 있도록 두 가지 제한 주위에서 작동합니다.
Soft Limit − 사용자가 정의 된 제한을 초과하면 사용자가 여유 공간을 확보 할 수있는 유예 기간이 있습니다.
Hard Limit − 하드 제한에 도달하면 유예 기간에 관계없이 더 이상 파일이나 블록을 할당 할 수 없습니다.
쿼터를 관리하기위한 많은 명령이 있습니다-
Sr. 아니. | 명령 및 설명 |
---|---|
1 | quota 그룹 사용자에 대한 디스크 사용량 및 제한을 표시합니다. |
2 | edquota 할당량 편집기입니다. 이 명령을 사용하여 사용자 또는 그룹 할당량을 편집 할 수 있습니다. |
삼 | quotacheck 파일 시스템에서 디스크 사용량을 검색하고 할당량 파일을 생성, 확인 및 복구합니다. |
4 | setquota 이것은 명령 줄 할당량 편집기입니다. |
5 | quotaon 하나 이상의 파일 시스템에서 디스크 할당량을 활성화해야 함을 시스템에 알립니다. |
6 | quotaoff 하나 이상의 파일 시스템에 대해 디스크 할당량을 비활성화해야 함을 시스템에 알립니다. |
7 | repquota 지정된 파일 시스템에 대한 디스크 사용량 및 할당량 요약을 인쇄합니다. |
맨 페이지 도움말 을 사용 하여 여기에 언급 된 각 명령에 대한 전체 구문을 확인할 수 있습니다 .
이 장에서는 Unix에서의 사용자 관리에 대해 자세히 설명합니다.
Unix 시스템에는 세 가지 유형의 계정이 있습니다.
루트 계정
이것은 또한 superuser시스템을 완전하고 자유롭게 제어 할 수 있습니다. 수퍼 유저는 제한없이 모든 명령을 실행할 수 있습니다. 이 사용자는 시스템 관리자로 가정해야합니다.
시스템 계정
시스템 계정은 메일 계정과 같은 시스템 특정 구성 요소의 작동에 필요한 것입니다. sshd계정. 이러한 계정은 일반적으로 시스템의 특정 기능에 필요하며이를 수정하면 시스템에 부정적인 영향을 미칠 수 있습니다.
사용자 계정
사용자 계정은 사용자 및 사용자 그룹에 대해 시스템에 대한 대화 형 액세스를 제공합니다. 일반 사용자는 일반적으로 이러한 계정에 할당되며 일반적으로 중요한 시스템 파일 및 디렉터리에 대한 액세스가 제한됩니다.
Unix는 여러 계정 을 논리적으로 그룹화하는 그룹 계정 개념을 지원 합니다. 모든 계정은 다른 그룹 계정의 일부가됩니다. Unix 그룹은 파일 권한 및 프로세스 관리를 처리하는 데 중요한 역할을합니다.
사용자 및 그룹 관리
네 가지 주요 사용자 관리 파일이 있습니다.
/etc/passwd− 사용자 계정 및 비밀번호 정보를 유지합니다. 이 파일은 Unix 시스템의 계정에 대한 대부분의 정보를 보유합니다.
/etc/shadow− 해당 계정의 암호화 된 비밀번호를 보관합니다. 모든 시스템이이 파일을 지원하는 것은 아닙니다.
/etc/group −이 파일에는 각 계정에 대한 그룹 정보가 포함되어 있습니다.
/etc/gshadow −이 파일에는 보안 그룹 계정 정보가 포함되어 있습니다.
다음을 사용하여 위의 모든 파일을 확인하십시오. cat 명령.
다음 표는 계정과 그룹을 만들고 관리하기 위해 대부분의 Unix 시스템에서 사용할 수있는 명령을 나열합니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | useradd 시스템에 계정을 추가합니다. |
2 | usermod 계정 속성 수정 |
삼 | userdel 시스템에서 계정을 삭제합니다. |
4 | groupadd 시스템에 그룹 추가 |
5 | groupmod 그룹 속성 수정 |
6 | groupdel 시스템에서 그룹을 제거합니다. |
맨 페이지 도움말 을 사용 하여 여기에 언급 된 각 명령에 대한 전체 구문을 확인할 수 있습니다 .
그룹 만들기
이제 그룹을 만드는 방법을 이해합니다. 이를 위해 계정을 만들기 전에 그룹을 만들어야합니다. 그렇지 않으면 시스템의 기존 그룹을 사용할 수 있습니다. 우리는 모든 그룹이/etc/groups 파일.
모든 기본 그룹은 시스템 계정 특정 그룹이며 일반 계정에는 사용하지 않는 것이 좋습니다. 따라서 다음은 새 그룹 계정을 만드는 구문입니다.
groupadd [-g gid [-o]] [-r] [-f] groupname
다음 표는 매개 변수를 나열합니다.
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -g GID 그룹 ID의 숫자 값 |
2 | -o 이 옵션은 고유하지 않은 GID로 그룹을 추가하도록 허용합니다. |
삼 | -r 이 플래그는 groupadd 시스템 계정을 추가하려면 |
4 | -f 이 옵션은 지정된 그룹이 이미 존재하는 경우 성공 상태로 종료됩니다. -g를 사용하면 지정된 GID가 이미 존재하면 다른 (고유) GID가 선택됩니다. |
5 | groupname 생성 할 실제 그룹 이름 |
매개 변수를 지정하지 않으면 시스템이 기본값을 사용합니다.
다음 예제 는 대부분의 관리자가 매우 수용 할 수있는 기본값으로 개발자 그룹을 만듭니다 .
$ groupadd developers
그룹 수정
그룹을 수정하려면 groupmod 구문-
$ groupmod -n new_modified_group_name old_group_name
developers_2 그룹 이름을 developer로 변경하려면 다음을 입력하십시오.
$ groupmod -n developer developer_2
재정 GID를 545로 변경하는 방법은 다음과 같습니다.
$ groupmod -g 545 developer
그룹 삭제
이제 그룹을 삭제하는 방법을 이해합니다. 기존 그룹을 삭제하려면groupdel command 그리고 group name. 금융 그룹을 삭제하려면 명령은 다음과 같습니다.
$ groupdel developer
이렇게하면 해당 그룹과 연결된 파일이 아닌 그룹 만 제거됩니다. 소유자는 여전히 파일에 액세스 할 수 있습니다.
계정 생성
Unix 시스템에서 새 계정을 만드는 방법을 살펴 보겠습니다. 다음은 사용자 계정을 생성하는 구문입니다-
useradd -d homedir -g groupname -m -s shell -u userid accountname
다음 표는 매개 변수를 나열합니다.
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -d homedir 계정의 홈 디렉토리를 지정합니다. |
2 | -g groupname 이 계정에 대한 그룹 계정을 지정합니다. |
삼 | -m 존재하지 않는 경우 홈 디렉토리를 만듭니다. |
4 | -s shell 이 계정의 기본 셸을 지정합니다. |
5 | -u userid 이 계정에 대한 사용자 ID를 지정할 수 있습니다. |
6 | accountname 생성 할 실제 계정 이름 |
매개 변수를 지정하지 않으면 시스템이 기본값을 사용합니다. 그만큼useradd 명령은 /etc/passwd, /etc/shadow, 및 /etc/group 파일을 만들고 홈 디렉토리를 만듭니다.
다음은 계정을 만드는 예입니다. mcmohd, 홈 디렉토리를 다음으로 설정 /home/mcmohd 그리고 그룹은 developers. 이 사용자에게는 Korn Shell이 할당되어 있습니다.
$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd
위의 명령을 실행하기 전에 다음을 사용하여 만든 개발자 그룹 이 있는지 확인하십시오 .groupadd 명령.
계정이 생성되면 다음을 사용하여 비밀번호를 설정할 수 있습니다. passwd 다음과 같이 명령-
$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
입력 할 때 passwd accountname, 수퍼 유저 인 경우 암호를 변경할 수있는 옵션이 제공됩니다. 그렇지 않으면 계정 이름을 지정하지 않고 동일한 명령을 사용하여 비밀번호 만 변경할 수 있습니다.
계정 수정
그만큼 usermod명령을 사용하면 명령 줄에서 기존 계정을 변경할 수 있습니다. 다음과 같은 인수를 사용합니다.useradd 명령과 함께 -l 인수를 사용하여 계정 이름을 변경할 수 있습니다.
예를 들어 계정 이름을 변경하려면 mcmohd ...에 mcmohd20 그에 따라 홈 디렉토리를 변경하려면 다음 명령을 실행해야합니다.
$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20
계정 삭제
그만큼 userdel명령을 사용하여 기존 사용자를 삭제할 수 있습니다. 주의해서 사용하지 않으면 매우 위험한 명령입니다.
명령에 사용할 수있는 인수 또는 옵션은 하나뿐입니다. .r, 계정의 홈 디렉토리 및 메일 파일을 제거합니다.
예를 들어, mcmohd20 계정을 제거 하려면 다음 명령을 실행하십시오.
$ userdel -r mcmohd20
백업 목적으로 홈 디렉토리를 유지하려면 -r선택권. 나중에 필요에 따라 홈 디렉토리를 제거 할 수 있습니다.
이 장에서는 Unix의 시스템 성능에 대해 자세히 설명합니다.
Unix 시스템에서 성능을 모니터링하고 관리하는 데 사용할 수있는 몇 가지 무료 도구를 소개합니다. 이러한 도구는 Unix 환경에서 성능 문제를 진단하고 수정하는 방법에 대한 지침도 제공합니다.
유닉스에는 모니터링 및 조정이 필요한 다음과 같은 주요 리소스 유형이 있습니다.
CPU
Memory
Disk space
Communications lines
I/O Time
Network Time
Applications programs
성능 구성 요소
다음 표는 시스템 시간을 차지하는 5 가지 주요 구성 요소를 나열합니다.
Sr. 아니. | 구성 요소 및 설명 |
---|---|
1 | User State CPU CPU가 사용자 상태에서 사용자 프로그램을 실행하는 데 소비하는 실제 시간입니다. 여기에는 라이브러리 호출을 실행하는 데 소요 된 시간이 포함되지만 대신 커널에서 소요 된 시간은 포함되지 않습니다. |
2 | System State CPU 이것은 CPU가이 프로그램을 대신하여 시스템 상태에서 소비하는 시간입니다. 모두I/O routines커널 서비스가 필요합니다. 프로그래머는 I / O 전송을 차단하여이 값에 영향을 줄 수 있습니다. |
삼 | I/O Time and Network Time 데이터를 이동하고 I / O 요청을 처리하는 데 소요 된 시간입니다. |
4 | Virtual Memory Performance 여기에는 컨텍스트 전환 및 스와핑이 포함됩니다. |
5 | Application Program 다른 프로그램을 실행하는 데 소요 된 시간-다른 응용 프로그램에 현재 CPU가 있기 때문에 시스템이이 응용 프로그램을 서비스하지 않는 경우 |
성능 도구
Unix는 Unix 시스템 성능을 측정하고 미세 조정하기 위해 다음과 같은 중요한 도구를 제공합니다.
Sr. 아니. | 명령 및 설명 |
---|---|
1 | nice/renice 수정 된 스케줄링 우선 순위로 프로그램 실행 |
2 | netstat 네트워크 연결, 라우팅 테이블, 인터페이스 통계, 가장 연결 및 멀티 캐스트 멤버십을 인쇄합니다. |
삼 | time 간단한 명령 시간을 지정하거나 리소스 사용량을 제공합니다. |
4 | uptime 이것은 시스템 부하 평균입니다. |
5 | ps 현재 프로세스의 스냅 샷을보고합니다. |
6 | vmstat 가상 메모리 통계를보고합니다. |
7 | gprof 콜 그래프 프로필 데이터를 표시합니다. |
8 | prof 프로세스 프로파일 링 용이 |
9 | top 시스템 작업을 표시합니다. |
맨 페이지 도움말 을 사용 하여 여기에 언급 된 각 명령에 대한 전체 구문을 확인할 수 있습니다 .
이 장에서는 Unix의 시스템 로깅에 대해 자세히 설명합니다.
Unix 시스템은 매우 유연하고 강력한 로깅 시스템을 갖추고있어 상상할 수있는 거의 모든 것을 기록한 다음 로그를 조작하여 필요한 정보를 검색 할 수 있습니다.
많은 버전의 Unix는 다음과 같은 범용 로깅 기능을 제공합니다. syslog. 정보를 기록해야하는 개별 프로그램은 정보를 syslog로 보냅니다.
Unix syslog 는 호스트 구성이 가능한 균일 한 시스템 로깅 기능입니다. 시스템은 프로그램을 실행하는 중앙 집중식 시스템 로깅 프로세스를 사용합니다./etc/syslogd 또는 /etc/syslog.
시스템 로거의 작동은 매우 간단합니다. 프로그램 은 구성 파일을 참조하는 syslogd로 로그 항목을 보냅니다 ./etc/syslogd.conf 또는 /etc/syslog 일치하는 항목이 발견되면 원하는 로그 파일에 로그 메시지를 기록합니다.
이해해야 할 4 가지 기본 syslog 용어가 있습니다.
Sr. 아니. | 용어 및 설명 |
---|---|
1 | Facility 로그 메시지를 제출 한 애플리케이션 또는 프로세스를 설명하는 데 사용되는 식별자입니다. 예를 들어, 메일, 커널 및 ftp입니다. |
2 | Priority 메시지의 중요성을 나타내는 표시기입니다. 수준은 디버깅 정보에서 중요한 이벤트에 이르기까지 syslog 내에서 지침으로 정의됩니다. |
삼 | Selector 하나 이상의 시설 및 레벨의 조합. 수신 이벤트가 선택기와 일치하면 조치가 수행됩니다. |
4 | Action 선택기와 일치하는 수신 메시지에 발생하는 일 — 작업은 메시지를 로그 파일에 기록하거나, 메시지를 콘솔 또는 기타 장치에 에코하거나, 로그인 한 사용자에게 메시지를 기록하거나, 다른 syslog 서버에 메시지를 보낼 수 있습니다. |
Syslog 시설
이제 syslog 기능에 대해 이해하겠습니다. 선택기에 사용할 수있는 기능은 다음과 같습니다. 모든 기능이 모든 버전의 Unix에있는 것은 아닙니다.
시설 | 기술 |
---|---|
1 | auth 이름 및 비밀번호 요청 관련 활동 (getty, su, login) |
2 | authpriv 인증과 동일하지만 선택한 사용자 만 읽을 수있는 파일에 기록됩니다. |
삼 | console 일반적으로 시스템 콘솔로 전달되는 메시지를 캡처하는 데 사용됩니다. |
4 | cron 크론 시스템 스케줄러의 메시지 |
5 | daemon 시스템 데몬 포괄 |
6 | ftp ftp 데몬과 관련된 메시지 |
7 | kern 커널 메시지 |
8 | local0.local7 사이트별로 정의 된 지역 시설 |
9 | lpr 라인 프린팅 시스템의 메시지 |
10 | 메일 시스템과 관련된 메시지 |
11 | mark 로그 파일에서 타임 스탬프를 생성하는 데 사용되는 의사 이벤트 |
12 | news 네트워크 뉴스 프로토콜 (nntp)과 관련된 메시지 |
13 | ntp 네트워크 시간 프로토콜과 관련된 메시지 |
14 | user 일반 사용자 프로세스 |
15 | uucp UUCP 하위 시스템 |
Syslog 우선 순위
syslog 우선 순위는 다음 표에 요약되어 있습니다.
Sr. 아니. | 우선 순위 및 설명 |
---|---|
1 | emerg 임박한 시스템 충돌과 같은 비상 상황은 일반적으로 모든 사용자에게 브로드 캐스트됩니다. |
2 | alert 손상된 시스템 데이터베이스와 같이 즉시 수정해야하는 조건 |
삼 | crit 하드웨어 오류와 같은 심각한 상태 |
4 | err 일반적인 오류 |
5 | Warning 경고 |
6 | notice 오류는 아니지만 특수한 방법으로 처리해야하는 조건 |
7 | info 정보 메시지 |
8 | debug 프로그램을 디버깅 할 때 사용되는 메시지 |
9 | none 메시지를 기록하지 않도록 지정하는 데 사용되는 의사 레벨 |
시설과 레벨의 조합을 통해 기록되는 내용과 해당 정보가 어디로 가는지 식별 할 수 있습니다.
각 프로그램이 메시지를 시스템 로거에 성실하게 보내면 로거는 선택기에 정의 된 수준에 따라 추적 할 항목과 폐기 할 항목을 결정합니다.
레벨을 지정하면 시스템은 해당 레벨 이상의 모든 것을 추적합니다.
/etc/syslog.conf 파일
그만큼 /etc/syslog.conf파일은 메시지가 기록되는 위치를 제어합니다. 전형적인syslog.conf 파일은 다음과 같습니다.
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
파일의 각 줄에는 두 부분이 포함되어 있습니다.
ㅏ message selector기록 할 메시지의 종류를 지정합니다. 예를 들어, 커널의 모든 오류 메시지 또는 모든 디버깅 메시지입니다.
안 action field메시지로 무엇을해야하는지 알려줍니다. 예를 들어, 파일에 넣거나 메시지를 사용자의 터미널로 보냅니다.
다음은 위의 구성에 대한 주목할만한 점입니다.
메시지 선택기는 두 부분으로 구성됩니다. a facility 과 a priority. 예를 들어 kern.debug 는 커널 (시설)에 의해 생성 된 모든 디버그 메시지 (우선 순위)를 선택합니다.
메시지 선택기 kern.debug 는 디버그보다 큰 모든 우선 순위를 선택합니다.
시설 또는 우선 순위 대신 별표는 "모두"를 나타냅니다. 예를 들면*.debug 모든 디버그 메시지를 의미하며 kern.* 커널에 의해 생성 된 모든 메시지를 의미합니다.
쉼표를 사용하여 여러 기능을 지정할 수도 있습니다. 세미콜론을 사용하여 둘 이상의 선택기를 함께 그룹화 할 수 있습니다.
작업 로깅
작업 필드는 다섯 가지 작업 중 하나를 지정합니다.
파일 또는 장치에 메시지를 기록합니다. 예를 들면/var/log/lpr.log 또는 /dev/console.
사용자에게 메시지를 보냅니다. 쉼표로 구분하여 여러 사용자 이름을 지정할 수 있습니다. 예 : root, amrood.
모든 사용자에게 메시지를 보냅니다. 이 경우 작업 필드는 별표로 구성됩니다. 예 : *.
프로그램에 메시지를 파이프하십시오. 이 경우 프로그램은 Unix 파이프 기호 (|) 뒤에 지정됩니다.
다른 호스트의 syslog에 메시지를 보냅니다. 이 경우 작업 필드는 at 기호가 앞에 오는 호스트 이름으로 구성됩니다. 예 : @ tutorialspoint.com.
로거 명령
유닉스는 logger시스템 로깅을 처리하는 데 매우 유용한 명령입니다. 그만큼logger 명령은 syslogd 데몬에 로깅 메시지를 보내고 결과적으로 시스템 로깅을 유발합니다.
즉, 언제든지 명령 줄에서 확인할 수 있습니다. syslogd데몬 및 구성. logger 명령은 명령 줄에서 시스템 로그 파일에 한 줄 항목을 추가하는 방법을 제공합니다.
명령의 형식은-
logger [-i] [-f file] [-p priority] [-t tag] [message]...
다음은 매개 변수의 세부 사항입니다.
Sr. 아니. | 옵션 및 설명 |
---|---|
1 | -f filename 파일 filename의 내용을 기록 할 메시지로 사용합니다. |
2 | -i 로거 프로세스의 프로세스 ID를 각 행에 기록합니다. |
삼 | -p priority 지정된 우선 순위 (지정된 선택기 항목)로 메시지를 입력합니다. 메시지 우선 순위는 숫자로 지정하거나 Facility.priority 쌍으로 지정할 수 있습니다. 기본 우선 순위는 user.notice입니다. |
4 | -t tag 로그에 추가 된 각 행을 지정된 태그로 표시합니다. |
5 | message 내용이 공백으로 구분 된 지정된 순서로 함께 연결되는 문자열 인수입니다. |
맨 페이지 도움말 을 사용 하여이 명령의 전체 구문을 확인할 수 있습니다 .
로그 회전
로그 파일은 매우 빠르게 증가하고 많은 양의 디스크 공간을 소비하는 경향이 있습니다. 로그 회전을 활성화하기 위해 대부분의 배포는 다음과 같은 도구를 사용합니다.newsyslog 또는 logrotate.
이러한 도구는 다음을 사용하여 빈번한 시간 간격으로 호출해야합니다. cron daemon. 자세한 내용 은 newsyslog 또는 logrotate에 대한 매뉴얼 페이지를 확인 하십시오.
중요한 로그 위치
모든 시스템 응용 프로그램은 다음 위치에 로그 파일을 만듭니다. /var/log및 하위 디렉토리. 다음은 몇 가지 중요한 응용 프로그램과 해당 로그 디렉토리입니다.
신청 | 예배 규칙서 |
---|---|
httpd | / var / log / httpd |
삼바 | / var / log / samba |
크론 | / var / log / |
우편 | / var / log / |
mysql | / var / log / |
이 장에서는 유닉스의 시그널과 트랩에 대해 자세히 논의 할 것입니다.
신호는 중요한 이벤트가 발생했음을 나타 내기 위해 프로그램에 전송되는 소프트웨어 인터럽트입니다. 이벤트는 사용자 요청에서 잘못된 메모리 액세스 오류까지 다양합니다. 인터럽트 신호와 같은 일부 신호는 사용자가 일반적인 제어 흐름에없는 작업을 프로그램에 요청했음을 나타냅니다.
다음 표에는 프로그램에서 접할 수 있고 사용하고자하는 일반적인 신호가 나열되어 있습니다.
신호 이름 | 신호 번호 | 기술 |
---|---|---|
SIGHUP | 1 | 제어 단말에서 끊김 또는 제어 프로세스 종료 감지 |
SIGINT | 2 | 사용자가 인터럽트 신호를 보내는 경우 발생합니다 (Ctrl + C). |
SIGQUIT | 삼 | 사용자가 종료 신호를 보내는 경우 발생합니다 (Ctrl + D). |
SIGFPE | 8 | 잘못된 수학적 연산을 시도하면 발행됩니다. |
SIGKILL | 9 | 프로세스가이 신호를 받으면 즉시 종료해야하며 정리 작업을 수행하지 않습니다. |
SIGALRM | 14 | 알람 시계 신호 (타이머에 사용됨) |
SIGTERM | 15 | 소프트웨어 종료 신호 (기본적으로 kill에 의해 전송 됨) |
신호 목록
시스템에서 지원하는 모든 신호를 쉽게 나열 할 수있는 방법이 있습니다. 그냥 발행kill -l 명령하고 지원되는 모든 신호를 표시합니다.
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
실제 신호 목록은 Solaris, HP-UX 및 Linux에 따라 다릅니다.
기본 동작
모든 신호에는 연관된 기본 동작이 있습니다. 신호에 대한 기본 동작은 스크립트 나 프로그램이 신호를받을 때 수행하는 동작입니다.
가능한 기본 동작 중 일부는-
프로세스를 종료하십시오.
신호를 무시하십시오.
코어 덤프. 이렇게하면 다음과 같은 파일이 생성됩니다.core 프로세스가 신호를 받았을 때의 메모리 이미지를 포함합니다.
프로세스를 중지하십시오.
중지 된 프로세스를 계속하십시오.
신호 보내기
프로그램이나 스크립트에 신호를 전달하는 방법에는 여러 가지가 있습니다. 가장 일반적인 방법 중 하나는 사용자가CONTROL-C 아니면 그 INTERRUPT key 스크립트가 실행되는 동안.
누를 때 Ctrl+C 키, SIGINT 스크립트로 전송되고 정의 된 기본 작업 스크립트에 따라 종료됩니다.
신호를 전달하는 다른 일반적인 방법은 kill command, 그 구문은 다음과 같습니다-
$ kill -signal pid
여기 signal 전달할 신호의 번호 또는 이름이며 pid신호를 보내야하는 프로세스 ID입니다. 예를 들어-
$ kill -1 1001
위의 명령은 HUP 또는 hang-up 신호를 다음으로 실행중인 프로그램에 보냅니다. process ID 1001. 동일한 프로세스에 종료 신호를 보내려면 다음 명령을 사용하십시오.
$ kill -9 1001
이것은 다음으로 실행되는 프로세스를 죽입니다. process ID 1001.
신호 트래핑
당신이 누르면 Ctrl + C 쉘 프로그램을 실행하는 동안 터미널이나 브레이크 키를, 일반적으로 그 프로그램을 즉시 종료하고 명령 프롬프트가 리턴됩니다. 이것은 항상 바람직한 것은 아닙니다. 예를 들어, 정리되지 않는 임시 파일을 많이 남길 수 있습니다.
이러한 신호를 트래핑하는 것은 매우 쉬우 며 trap 명령은 다음 구문을 사용합니다.
$ trap commands signals
여기서 명령 은 유효한 Unix 명령이거나 사용자 정의 함수일 수 있으며 signal은 트랩하려는 신호의 목록이 될 수 있습니다.
쉘 스크립트에서 트랩에 대한 두 가지 일반적인 용도가 있습니다.
- 임시 파일 정리
- 신호 무시
임시 파일 정리
trap 명령의 예로서, 다음은 일부 파일을 제거하고 누군가가 터미널에서 프로그램을 중단하려고하면 종료하는 방법을 보여줍니다.
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
이 트랩이 실행되는 셸 프로그램의 지점에서 두 파일 work1$$ 과 dataout$$ 프로그램이 신호 번호 2를 수신하면 자동으로 제거됩니다.
따라서이 트랩이 실행 된 후 사용자가 프로그램 실행을 중단하면이 두 파일이 정리 될 것임을 확신 할 수 있습니다. 그만큼exit 다음에 오는 명령 rm 이것이 없으면 신호가 수신되었을 때 중단 된 지점에서 프로그램에서 실행이 계속되기 때문에 필요합니다.
신호 번호 1이 생성됩니다. hangup. 누군가 고의로 회선을 끊거나 회선이 우연히 끊어집니다.
이 경우 신호 목록에 신호 번호 1을 추가하여 두 개의 지정된 파일을 제거하도록 앞의 트랩을 수정할 수 있습니다.
$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2
이제 이러한 파일은 줄이 끊기거나 Ctrl + C 키를 누르면 제거됩니다.
트랩에 지정된 명령은 둘 이상의 명령을 포함하는 경우 따옴표로 묶어야합니다. 또한 쉘은 trap 명령이 실행될 때와 나열된 신호 중 하나가 수신 될 때 명령 행을 스캔합니다.
따라서 앞의 예에서 값은 WORKDIR 과 $$trap 명령이 실행될 때 대체됩니다. 신호 1 또는 2가 수신 될 때이 대체가 발생하도록하려면 명령을 작은 따옴표 안에 넣을 수 있습니다.
$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2
신호 무시
트랩에 대해 나열된 명령이 널이면 지정된 신호가 수신 될 때 무시됩니다. 예를 들어, 명령-
$ trap '' 2
이것은 인터럽트 신호가 무시되도록 지정합니다. 중단을 원하지 않는 작업을 수행 할 때 특정 신호를 무시할 수 있습니다. 다음과 같이 무시할 여러 신호를 지정할 수 있습니다.
$ trap '' 1 2 3 15
신호를 무시하려면 첫 번째 인수를 지정해야하며 다음을 작성하는 것과 동일하지 않습니다.
$ trap 2
신호를 무시하면 모든 서브 쉘도 해당 신호를 무시합니다. 그러나 신호 수신시 수행 할 조치를 지정하면 모든 서브 쉘은 해당 신호 수신시 기본 조치를 계속 취합니다.
트랩 재설정
신호 수신시 수행 할 기본 동작을 변경 한 후 첫 번째 인수를 생략하면 트랩을 사용하여 다시 변경할 수 있습니다. 그래서-
$ trap 1 2
이렇게하면 신호 1 또는 2 수신시 수행 할 작업이 기본값으로 재설정됩니다.