***ls 명령어의 옵션 형식***
#ls -l --->디렉토리의 파일과 서브 디렉토리의 구체적인 정보를 제공한다. 파일의 크기, 사용 권한, 파일이 변경된 시간과 날짜 등을 보여줍니다.(예, ls -l dirname)
#ls -x --->디렉토리 밑의 파일과 디렉토리의 이름을 알파벳 순으로 정렬된 이름으로 열을 맞춰 밑으로 보여주는 대신에 옆으로 보여 줍니다.(예, ls -x /)
#ls -s --->각 파일과 디렉토리의 크기를 보여준다. 파일의 크기는 512 바이트 길이인 블록 단위로 표시됩니다.(예, ls -s dirname)
#ls -p --->디렉토리와 파일을 구분해줍니다. 디렉토리의 뒤에는 "/" 가 붙습니다.
#ls -d --->디렉토리의 내용보다는 디렉토리 자체에 관한 정보를 알고 싶을 때 사용하는 옵션입니다.
#ls -R --->파일 시스템의 트리(tree)를 탐색하다가 만나게 되는 각 디렉토리와 서브 디렉 토리의 내용을 표시합니다.
#ls -u --->읽기나 쓰기 위해 접근했던 파일의 순서대로 보여줍니다.
#ls -a --->점으로 시작하는 파일이나 디렉토리의 이름을 보여줍니다. 다시 말하면 현재 디렉토리(.)와 현재 디렉토리의 부모 디렉토리(..)를 보여줍니다.
***glob 구문***
도스 사용자들은 a:디스켓에 있는 모든 파일을 하드 디스크 c:로 복사하때 다음과 같은 명 령어를 이용할 것입니다.
copy a:*.* c:
이처럼 도스의 *.*의 기능을 유닉스에서는 glob 구문, 와일드 카드 또는 파일 이름 생성 구 문이 같은 기능을 합니다.
[? glob 구문]
가장 간단한 유닉스의 glob 구문은 물음표(?)입니다. 이것은 경로명을 분리하는 /를 제외하 고 파일 이름에 나타나는 글자 하나와 같은 것입니다. 예를 들자면,
more ?eon
shell이 ?을 만났을 때 그 문자를 담고 있는 인수로 치환합니다. 즉 shell이 한문자 뒤에 eon 가 붙어 있는 모든 파일 찾아 몰록을 만듭니다. 이 경우 jeon이라는 파일이 유일하게 존재 한다면 shell은 앞의 명령을 다음 처럼 바꾸어 실행합니다.
more jeon
그럼, ? glob 구문 사용의 몇 가지 예를 더 들어 보기로 하지요.
echo ?eon
이것은 또 shell이 ?eon 구문을 적당한 파일 이름의 목록으로 바꾸어 다음과 같은 명령어를 실행시킵니다.
echo jeon
echo 는 이름들의 목록을 출력합니다.
more ??????
위의 예는 현재 디렉토리에 있는 정확히 여섯 글자의 이름을 가진 모든 파일들의 내용을 표 시합니다.
ls -l ???????
위의 예는 현재 디렉토리에 있는 일곱 글자의 일므을 가진 모든 파일들의 정보를 열거합니 다.
echo /lu/etc/??????
위의 예는 정확히 여섯 글자의 이름을 가진 /lu/etc 밑의 모든 파일들의 이름을 표시합니다. 마지막 예로,
echo ?
shell이 ? 인수를 만났을 때 적당한 파일이름의 목록으로 치환하려 합니다. 여러분이 배워온 대로라면 단지 한 글자의 이름을 가진 파일 목록으로 바꾸어야 하는데, 현재 디렉토리에는 그런 파일이 하나도 없습니다. 다시 말하면 ? 구문은 적절한 파일이름의 목록으로 치환할 수 없다는 뜻입니다. 이런 경우 ? 인수를 아래와 같이 표시합니다.
echo : No match
< "*"glob 구문>
*은 글자 수가 없거나 여러 글자를 대신하여 치환된다. 예를 들어 아래와 같이 명령을 입력 해보세요.
echo *t
shell이 *t에서 *를 만났을 때, 인수를 t 가 붙는 아무 글자로나 이루어진 현재 디렉토리의 파일 이름으로 치환합니다. 다시 말하면, 위 echo 명령어는 t 로 끝나는 현 디렉토리의 모 든 파일 이름을 나타냅니다. 다음과 같이 해보세요.
echo s* -->s 로 시작하는 모든 파일 이름을 보여준다.
echo * -->모든 문자열을 대표하므로 shell은 현재 디렉토리의 모든 파일이름으로 치 환합니다.
아마 여러분은 위의 결과와 옵션 없는 ls 명령어의 차이점을 발견하실 수 있을겁니다. 그것 은 echo에 의한 출력은 모든 파일 이름 사이에 한 칸씩의 빈 공백을 가지고 한 줄에 씌어 지지만 ls 에 의한 출력은 열을 맞춰 정렬을 합니다.
*의 사용법에 대한 마지막 예로서 현 디렉토리의 모든 파일을 kimdir 디렉토리로 복사하는 다음을 입력해보세요.
cp * kimdir
kimdir 밑의 모든 파일을 지우기 위해 다음처럼 해보세요.
rm kimdir/*
참고:UNIX 와 DOS에서 *과 ?의 차이
*은 도스와 유닉스에서 모든 문자열을 대표하므로 거의 똑같습니다. 그러나 도스에서 *은 점과 대응하지는 않습니다. 그래서 도스에서는 kimdir 디렉토리로 현재 디렉토리의 모든 것 을 복사하는 명령이
copy *.* kimdir
인 반면에 유닉스에서는
cp * kimdir
입니다. 도스에서 *.*라고 써야만 하는데 점을 취급하는 두 가지 다른 점 때문입니다. 비슷 하게 dir *t.* 같은 도스 명령어는 t 다음의 .*가 하나 이상의 글자와 대응하기 때문에 t 로 끝나는 모든 파일을 나열하지 않습니다. 같은 법칙이 ?에도 적용됩니다. 도스에서 ? 는 결코 점과 대응하지 않습니다.
***[ ] 구문***
이 구문은 유닉스에만 사용되는 부가적인 glob 구문입니다.
유닉스에만 유일한 첫째 glob 구문은 아래처럼 대괄호로 둘러싸인 문자의 집합입니다.
[abc]
이 구문은 괄호 안의 문자 중 어느 것 하나하고 대응됩니다. 예를 들어보면,
[abc]def
이는 아래 중 하나 또는 모두와 대응합니다.
adef bdef cdef
[abc]는 단지 한 문자하고만 대응하기 때문에 abdef 또는 bcdef 등과는 대응하지 않습니다. shell은 현존하는 파일이 있을 때만 glob를 치환합니다. 다음과 같이 해보세요.
echo [abc]ola
결과는 다음과 같습니다.
cola
[abc]ola 는 아마 aola 또는 bola로 치환될지도 모르지만 현재 디렉토리에 그런 이름이 없기 때문에 치환의 결과 나타나는 이름은 디렉토리에 있는 cola 뿐입니다. 또 대괄호 안에 어떤 범위의 첫 글자, - 기호 그리고 범위의 마지막 글자를 넣어서 문자의 범위를 지정할 수 있습니다. 다음 예는 모든 소문자를 대신합니다.
[a-z]
그럼 다음과 같이 입력해보세요.
echo [a-z]jeon
그러면 결과는 아래와 같이 a 와 z 사이의 문자로 시작하고 뒤에 jeon이라고 붙은 모든 파 일을 보여줍니다. 이것은 적절한 이름을 가진 모든 파일의 조합입니다. [a-z]jeon는 *jeon과 다릅니다. *jeon는 숫자, 대문자 그리고 파일 이름에 유효한 다른 문자(- 과 .) 로 시작하는 파일을 포함하기 때문입니다.
대괄호 안의 첫 글자가 느낌표라면 구문은 괄호 안의 글자가 아닌 하나의 다른 문자와 대응 합니다. 예를 들어 아래는 a, b, c를 제외하고 어떤 글자든지 대응합니다. [!abc] 다음처럼 해 보세요.
echo [!abc]eon
결과는 아래와 같습니다.
jeon
[!abc]eon 구문은 a, b, c 로 시작하는 것을 제외하면서 eon 로 끝나는 파일 이름으로 치환 됩니다. 비슷하게 다음처럼 입력 해 보세요.
echo [!n-z]eon
결과는 다음과 같습니다.
keon geon
[!n-z]는 n부터 z를 벗어난 범위를 대표합니다.
사용자가 glob 구문을 결합할 서 있는데, 예를 들어 다음 명령을 입력해 보세요.
echo [n-z]*
결과는 n부터 z 로 시작하는 모든 파일을 나타냅니다.
인수를 둘러싼 따옴표는 그 glob 구문이 가지고 있는 어떤 특별한 의미도 shell이 무시하게 됩니다. 똑같은 일을 구문의 특수 문자 앞에 역슬래쉬를 사용하여 할 수 있습니다. 예를 들 어 다음과 같이 입력해 보세요.
echo *
위 명령은 단순히 아래와 같이 표시됩니다.
*
유닉스에에서 역슬래쉬는 escape 문자로 불리웁니다. 그것을 특수 문자 앞에 놓으면 그 문 자의 특별한 의미는 사라지게 됩니다. 역슬래쉬는 단지 바로 뒤따라오는 문자의 기능만 없 애줍니다. 예를 들어 다음처럼 해보세요.
echo * *
결과는 *이 나오고 연이어 현재 디렉토리의 모든 파일 이름이 나옵니다. 역슬래쉬 때문에 처음 나오는 *은 치환을 하지 않지만, 둘째 * 은 정상적으로 치환됩니다.
***find 명령어***
유닉스 유틸리티인 find 명령어는 도스의 FIND 명령어와 아무 상관이 없습니다. 유닉스의 find는 도스의 TREE와 차라리 가깝지만, TREE보다 훨씬 다양한 기능을 갖고 있습니다. 유닉스의 find 는 규정된 조건에 부합되는 파일과 디렉토리의 이름을 찾습니다. find 의 기 능을 알아보기 위해 다음처럼 명령을 입력해 보세요.
find /lu -print
이것은 /lu 디렉토리의 모든 파일과 서브 디렉토리 또 그 밑의 서브 디렉토리 등의 이름을 v시합니다. 이름은 디렉토리와 서브 디렉토리 단위로 묶어집니다. 그 목록의 첫 번째 이름 은 디렉토리 자신인 /lu입니다.
일반적인 find 명령어의 형식은 다음과 같습니다.
find dir -print
dir은 보기 원하는 파일과 서브 디렉토리를 포함하고 있는 디렉토리 이름입니다.
그럼 ls 와 find 명령어의 결과를 비교해 봅시다.
ls 명령어는 단지 파일과 디렉토리의 기본 이름만을 표시합니다. 그렇지만 find 는 절대 경 로명 또는 상대 경로명을 표시합니다. 그래서 아래 명령을 주면
ls /lu ---->결과 : bin etc lu.bat tmp usr
find /lu -print ----->결과 : /lu
/lu/bin
/lu/bin/banner.exe
참고 : -print 옵션
-print 옵션은 find 가주어진 디렉토리에서 발견된 이름을 표시하도록 하는 것입니다. 어떤 유닉스 버전에서는 -print 옵션을 항상 주어야 합니다. 그렇지않으면 find는 아무것도 표시 하지 않습니다.
#-print ----> 결과를 출력
#-atime n ---> n일전에 접근한 파일을 찾음
#-ctime n ---> n일 전에 변경된 파일을 찾음
#-ctime -n ---> n일 전 이래로 변경된 파일을 찾음
#-mtime n ---> n일 전에 특성이 수정된 파일을 찾음
#-name "form" --> form 과 대응되는 이름의 파일을 찾음
#-newer file ---> file 보다 최근에 변경된 파일을 찾음
#-type d ----> 디렉토리만 출력
#-type f ----> 파일만 출력
유닉스 프로그램은 스트림을 사용하여 I/O를 수행합니다. 스트림은 프로그램이 입력을 얻거 나 출력을 내보내는 문과 같은 것입니다. 각 스트림은 다른 스트림과 구별하기 위하여 파일 디스크립터 번호를 가지고 있습니다. shell은 프로그램을 실행시킬 때 세가지 스트림을 설정합니다.
-표준 입력(파일 디스크립터 0)
-표준 출력(파일 디스크립터 1)
-표준 에러(파일 디스크립터 2)
명령행에서 리다이렉션 구문을 사용하여, shell은 스트림을 키보드나 화면 대신에 파일로 연 결시키기 위하여 하나 또는 그 이상의 프로그램 표준 스트림을 리다이렉트 시킵니다. 이 구 문은 명령어 이름 다음에 오기만 하면 명령행의 아무 곳에나 올 수 있습니다.그러나 리다이 렉션을 끝에 놓는 것이 일반적으로 읽기 쉽습니다.
#>file ----> 표준 출력을 현재의 내용에 겹쳐 쓰면서 file에 보낸다.
#>>file ---> 표준 출력을 file에 덧붙여 보낸다.
표준 입력으로 file로 읽는다.
#2>file ----> 표준 에러를 file로 보낸다.
@파이프는 한 명령어의 표준 출력을 다른 명령어의 표준 입력으로 제공하는 것입니다. 파이프는 "|"기호를 명령어 사이에 놓으면 됩니다. 파이프로 연결된 여러 명령어를 파이프라 인이라 부릅니다. more는 파이프라인에 가장 많이 쓰이는데, 큰 용량의 출력을 읽을 때 편 리하기 때문입니다.