원격백업 linux

[출처]http://unix.co.kr/bbs/board.php?bo_table=03_2&wr_id=1906


ㅇ 로컬에서 백업하여 원격으로 바로 옮기는 경우

현재 디스크 용량이 없을때, 백업을 해야 하는 경우에 많이 사용하게 된다.

원하는 host에 home.tar.gz라는 파일로 현재 /home이 압축되어 이동하게 된다.
# tar cvfzp - /home | ssh [id]@[host name or ip address] "cat > home.tar.gz"

/dev/tape는 tape장치다... 원한다면 /dev/fd 식으로 해서 디스켓이나 /dev/cdrom을 이용해서 시디룸에도..
# tar cvfzp - /home | ssh [id]@[host name or ip address] "cat > /dev/tape"

apache디렉토리를 원하는 호스트의 /usr/local/apache.bak이라는 디렉토리에 apache.tar.gz로 백업
# tar cvfzp - apache | ssh [id]@[host name or ip address] "cd /usr/local; mv apache apache.bak; tar xvfzp -"

 

# ssh [id]@[host name or ip address] "cd /usr/local/test; tar xvfzp -" < my.tgz 
# ssh [id]@[host name or ip address] "cat my.tgz" | tar xvfzp -


[펌]linux 기초명령어 linux

[출처: http://intellicam.blogspot.com/2008/05/linux-command-3.html]

square72_blue.gif 리눅스 기초 명령어

1. 로그 아웃하기

- # logout / ^D / exit

2. 리눅스 종료하기

- # halt

- # shutdown -h now

3. 파일과 디렉토리 관리하기

1) 한글 터미널 실행하기

- [시작]-[시스템도구]-[추가시스템도구]-[한글터미널]

2) 파일과 디렉토리 목록보기

- # ls

- # ls -a :숨김파일도 표시

- # ls -l : 자세한 정보 표시

- # ls --show-control-chars : 일반 영어가 아닌 글자들을 출력하는 옵션

- # ls --color :파일의 종류에 따라 다른 색으로 표시

- # ls -c : 파일의 생성이나 변경된 시간에 따라 정렬하여 표시

- # ls -F : 파일의 종류에 따라 파일 이름 뒤에 특정 문자를 추가하여 표시

- # ls -R : 하위 디렉토리의 내용까지 모두 표시

- # ls -al --color

3) 현재의 작업 디렉토리 표시

- # pwd

4) 디렉토리 이동하기

- # cd /home

5) 파일 복사하기

- # cp [원본파일이름] [복사할파일이름]

- # cp [원본파일이름] [복사할디렉토리이름] : 디렉토리에 파일 복사

- # cp [원본파일이름] [복사할데렉토리/복사할이름] : 이름을 바꾸어서 지정한 디렉토리에 복사

- # cp [디렉토리/파일이름] [디렉토리/파일이름]

- # cp -r [원본디렉토리이름] [복사할디렉토리이름] : 디렉토리를 통채로 복사

- # cp -rb [원본디렉토리이름] [복사할디렉토리이름] : 디렉토리를 통채로 복사하는데 같은 이름이 있을 때는 ~문자를 덧붙여 백업 파일 생성

- # cp -d : 링크되어 있는 파일 자체를 심볼릭 링크 정보와 함께 복사

- # cp -f : 복사할 파일이 존재하는 경우에 기존의 파일을 삭제하고 복사

- # cp -p : 원본 파일의 소유, 권한 등의 파일 정보를 그대로 복사

- # cp -u : 대상 파일보다 원본 파일이 새로운 것일 때만 복사

- # cp -i : 복사할 파일이 존재할 경우에는 복사할 것인지 묻는다.

- # cp -rfdpu

6) 파일이나 디렉토리 이동하기

- # mv [원본파일명] [이동할디렉토리명]

- # mv [원본파일명] [이동할파일명] : 파일 이름을 변경할 때

- # mv [원본디렉토리] [이동할디렉토리] : 디렉토리가 존재하면 디렉토리 밑으로 이동, 존재하지 않으면 디렉토리 이름 변경 효과

7) 디렉토리 만들기/ 삭제하기/ 파일 삭제하기/ 파일 유형 표시하기

- # mkdir [디렉토리명]

- # mkdir -p /work/program : 'work' 와 'program'을 한번에 만들 때

- # rmdir -rf [삭제할디렉토리명] : 해당 디렉토리에 존재하는 모든 파일과 디렉토리 삭제

- # rm -i [파일이름] : 삭제할 때마다 확인

- # rm -rf [디렉토리명 : 해당 디렉토리 및 그 서브디렉토리까지 모두 삭제

- # file [파일명] : 해당 파일의 유형을 알려준다.

8) 빈 파일 만들기

- # touch couter.text

4. 파일의 내용 보기

1) 텍스트파일의 내용보기

- # cat [파일이름] : 지정한 텍스트 파일의 내용을 보여 줌

- # cat -n [파일이름] : 파일에 줄번호를 삽입하여 표시

2) 텍스트파일의 내용을 페이지 단위로 보기

- # more [파일이름] : 옵션( 스페이스바-다음 페이지, 엔터-한 줄, '-파일의 맨 앞, v-vi로 편집, q-종료 )

3) 텍스트파일의 앞 부분 보기/ 텍스트파일의 끝 부분 보기

- # head -n [파일이름] : 처음 n 개의 줄만 표시

- # tail -n [파일이름] : 맨 뒤의 n 개의 줄만 표시

4) 파일의 문자와 단어, 줄의 수 알아내기

- # wc [파일이름]: 파일에 포함된 줄, 단어, 글자 수 순으로 표시

5. 리눅스 명령어을 다른 이름으로 사용하기: alias

- # alias type='cat' : 여기서 type는 별칭, cat는 리눅스 명령어이다. alias를 항상 실행되게 하려면 홈 디렉터리의 .bashrc_profile이나 /etc/profile, .bashrc 등에 저장해 놓으면 된다.

- # unalias type : alias의 해제. 계속해서 사용하지 않을려면 ashrc_profile이나 /etc/profile, .bashrc등의 파일을 수정하면 된다.

6. 파일 내의 특정 문자열 바꿀 때: sed

-텍스트 파일에 있는 특정 문자열을 다른 문자열로 바꾸려면 sed를 사용하는게 가장 좋다. 예를 들어 test3.txt에서 unix라는 문자열을 linux로 바꾸려면 $sed -e 's/unix/linux/g' <> test3-1.txt 라고 하면 된다. -e는 에디트 모드를 뜻하는 옵션이다. s의 의미는 치환(substitute)명령이고, 끝의 g는 플래그인데 한 행에 같은 단어가 여러 번 나와도 모두 치환하라는 명령이다. > test3-1.txt은 문자열이 바뀐 것을 test3-1.txt로 저장하라는 뜻이다. sed는 치환 이외에도 삽입, 삭제등 여러 가지 명령을 수행할 수 있다. 자세한 사용법은 $info sed나 $man sed 해서 알아 보면 된다.

- # sed -e 's/unix/linux/g' <>test2.txt

7. 여러 파일을 하나로 합치기: cat

- xaa, xab, xac세 파일을 합쳐서 xa로 만들려면 $ cat xaa xab xac > xa 하면 된다. cat은 텍스트 파일을 볼 때도 사용했다. 그리고 소리(.wav, .au)를 들을 때도 사용한다.($cat love.wav > /dev/dsp 또는 /dev/audio) 여기서 알 수 있듯이 cat는 단순히 파일을 표준 출력으로 내보내는 프로그램이라는 것을 알 수 있다.

- # cat txt1 txt2 tex3 > txt

8. 큰 파일을 작게 쪼개기: split

-크기가 큰 파일을 나눌 때 split을 사용한다. 옵션을 -b(Bytes)로 주면 파일을 크기로 나누고, -l(Line)로 주면 텍스트 파일을 행으로 나눌 수 있다.

- # split -b 20k X-Win*

ls x*

x-window-configration.doc xaa xab xac xad xae xaf xag xah xai

cat xa* > X-Win.txt

more X-win.txt

split -l 50 l4.txt

9. 텍스트파일 정렬하기

- sort 명령으로 텍스트 파일의 내용을 정렬할 수 있다. 정렬은 행을 기준 단위로 한다. 숫자의 크기별로 정렬할 내용이면 -n 옵션을 준다. 역순으로 정렬할 때는 옵션 -r을 준다. 정렬한 내용을 파일로 저장하려면 옵션 "-o 저장할 파일명"을 추가하면 된다.

- # sort fruits

- # sort fruit -o fruits-1

10. 기타 명령어

1) 사용자 조회하기 / 자신의 사용자 ID 표시하기 / 비밀번호 변경하기

- # who : 현재 시스템에 로그인하여 사용중인 사용자의 목록 표시

- # whoami : 자신의 사용자 ID 표시

- # passwd : 자신의 비밀번호 변경

- # passwd [사용자ID] : 슈퍼유저인 경우에 사용자의 비밀번호 변경

2) 현재 날자와 시간 정보 표시하기 / 화변 삭제하기

- # date : 현재의 날짜와 시간 정보 표시

- # date [MMDDhhmmYYYY] : 시스템의 시간을 변경 (월일시분년)

- # clear : 화면을 깨끗하게 지울 때

3) 특정 명령어에 대한 도움말 보기

- # man [명령어] : 해당 명령어의 도움말 보기 ( 스페이스바 - 다음 페이지, :q -종료)

4) 특정 내용을 포함하는 파일 찾기 / 파일 찾기

- # grep [특정내용] [찾을 파일] : (텍스트 파일에서 특정 내용을 포함하는 파일을 찾기)

- # grep linux * : 현재 디렉토리에 있는 모든 파일 중에서 linux가 글자가 들어간 파일 찾기

- # grep -n linux * : 줄 번호까지 표시

- # grep -i linux * : 찾을 글자의 대소문자를 구분하지 않음

- # find [찾을경로] [옵션] [찾을파일명]

- # find . -name "serch*" -print

- # find [경로] -name [찾을 파일명] -exec 명령어 {} \; -print : 찾은 파일을 지정에 대해 지정한 명령어를 적용시킴

- # find . -name "*.bak" -exec rm {} \; -print : 현재 디렉토리에서 그 하위의 디렉토리에 존재하는 이름이 '*.bak'인 파일을 모두 찾아 삭제한다. find는 기본적으로 하위 디렉터리까지도 검색한다. 옵션에서 지정하기에 따라서 이름별, 날짜별,형태별, 길이별 등등으로 파일을 찾을 수 있다. 또한 찾은 파일에대해 일정한 명령을 수행하도록 할 수 있다. 사용 형식은 다음과 같다. $find 찾을디렉터리 옵션 '찾을파일' 연산자, 연산자란 찾은 파일에대한 명령이다. -print(화면에 출력), -exec rm {}(파일 지우기)등을 말한다. -print외의 연산자 뒤에는 명령이 끝난 다음에 \;로 명령의 끝을 알린다.

- # find . -name "file*" -exec grep linux {} \; -print

5) 디스크 용량 확인하기/ 특정 디렉토리 사용량 확인하기 / 현재 구동 중인 프로세스 표시하기 / 프로세스 종료하기

- # df -m: 마운트된어 있는 하드 디스크의 용량을 메가 바이트 단위로 표시

- # du -m [디렉토리명]: 특정 디렉토리의 디스크 사용량을 메가바이트 단위로 확인

- # ps : 자신이 구동한 프로세스 표시

- # ps -ef : 현재 구동 중인 모든 프로세서 목록 표시

- # kill [해당프로세스ID] : 해당 프로세스 종료 시킴

6) 파일 링크

- # ln hangle kangle : 하드링크로 동일한 파일에 대해 다른 이름을 갖는다.

- # ls -i : inode가 같으면 하드 링크다. 리눅스에서 모든 파일은 독립적인 inode를 갖는다.

- # ln -s [링크시킬파일이름] [링크파일이름]

- # ls -l : 서로 다른 inode를 가지며 파일구조도 다르다. 링크시킬 파일을 삭제하면 링크된 파일이 존재해도 실행되지 않는다.

11. 명령어에서 사용 가능한 메타 문자

1) Redirection 사용하기 (출력: >, >> 입력: < , << )

- # ls -al > list.txt : 명령어 실행 결과를 list.txt 파일에 저장함, 지정한 파일이 없으면 생성하고 있으면 모두 지우고 새로 기록

- # ls -al >> list.txt : list.txt 파일이 없으면 생성하고 저장하며, 존재하면 기존의 내용은 놔두고 새로운 내용을 맨 뒤에 기록

- # cat -n < [파일이름] : 명령어의 입력으로 파일을 지정할 수 있도록 함

2) pipe 사용하기( | ) : 명령어의 출력을 다은 명령어의 입력으로 전달한다.

- # 명령어1 | 명령어2 : 명령어1의 출력을 명령어2의 입력으로 전달

- # ps -ef | grep mysql : 많은 프로세스 중에서 mysql 관련된 명령어만 보여줌

3) 와일드카드 사용하기 (*, ? )

- # ls -al kim* : *은 모든 문자를 대치

- # ls -al kim?.??? : 지정한 위치의 모든 문자를 대치

4) 명령어 순차 실행시키기 ( ; ) / 백그라운드 실행하기( & )/ 문자 범위 지정하기 ( [..])

- # ls -al ; who ; ps : 명령을 순차적으로 실행하여 보여줌

- # 명령어 & : 서버 프로그램 실행과 같이 쉘의 제어를 받지 않고 무한으로 구동시키는 방법으로 새로운 프로세스가 생성


can may would should must have to .. English

[출처: http://englishwell.tistory.com/45]


영어에서 가장 이해하기 난해한것들이 바로 Would, could, should, might, ought to, must.. 소히 말하는 "조동사" 라고 하는놈들의 정확한 사용방법에 관해서이다. 그것에 NOT 이 붙으면 wouldn't,couldn,t shouldn,t  musn,t ..

영어를 나름대로 잘한다는 사람들도 정확하게 이 단어들의 사용법을 구분해 달라고 하면 어떻게 설명해야좋을지 난감해 한다. 나역시 가끔씩 헷갈려서 이것에 대해 아무리 질문을 해도 제대로 답변을 달아주는 사람을 찾을수가 없었다.그렇다고 사전을 찾아보면 각 단어마다 몇페이지에 달하는 설명과 예문들이 나열되어 있어 이 단어들의 설명만으로도 거뜬히 문법책한권이 나올정도이다..보기만 해도 머리가 어질어질..도리어 혼란만 더 가중되는것을 느낄수 있다. 그만큼 종횡무진 상황에 따라우리말의 경우에 아무데나 갖다붙여도 되는 뜻들을 갖고있다.

본능적으로 would, should, might ..사용하다가도 가끔씩 이럴땐 should 를 사용해야 하나.might 을 사용해야 하나  아님 ought to? 그냥 would..로 헷갈린적이 한두번이 아니다. 가장 헷갈리는 부분이 상황에 대한 의견과 추측, 후회,유감들에 대한 부분들이다.would 의 경우 과거의 형태까지 포함하면 used to 의 뜻까지도 포함되곤 한다.must 역시 ~해야 한다.라고 권유하는 의미라고만 알고 있다면 must 로 추측을 나타내는 문장을 접하면 당황하게 된다.

예를 들어 You must have hungry  당신은 배고픔을 느껴야만 합니다.가 아니라, 당신도 배고픔을 느낄텐데요..라는 추측문장이다.

실제로 이 단어들만 제대로 소화해내고 자유자재로 상황에 따라 제대로 사용할줄 안다면 왠만한 회화는 막히는 것이 거의 없을 정도이다.한국말로 해석하면 ~일것이다. 라는 뜻 한가지로 되는데 영어에서는 should, would, might..ought to..상황에 따라 행동에 대한 의견,추측, 후회,유감..전부 다르게 작동하는걸 알수있다.would will 의 과거형 could can 의 과거형,might may 의과거형..이따위로 설명한 책들도 있나본데 본전 생각 하지말고 그냥 갖다 버리는것이 본인을 위해 좋다.이 의미들은 점점 사라져가는 추세이기 때문이다. 외국인이 한국말을 배우겠다고 감사합니다 를 "성은이 망극하옵나이나이다." 이렇게 배우고 회화에서사용하려는것과 같다.영어는 진화한다는것을 명심하도록 하자. 이런 엉터리 문법지식들 때문에 영어교육에 엄청난 혼란을 가져오기만한다.이렇게 알고 있다간 평생가도 이 단어들의 뜻에 접근조차 할수없다.

예를 들어 I could buy it 이 뜻은 뭘까? 나는 그것을 살수 있었다.과거를 나타내는 말일까 ? NO !

이것은 가정으로서 나는 그것을 살수도 있는데..라는 뜻이다.

maymight 이 권유인지추측인지.과거에 대한것인지.판단하려면 오직 상황과 느낌에 의존해야만이 가능하다.무조건 상황에 따라 학술적으로 사용법을 외우려한다면 몇년이 걸릴것이다.그만큼 문법적으로 접근하기에는 그 범위가 너무 광범위하다.감각을 익힐수밖에 없다.

그리고 you had better ~ 대부분 우리나라 회화 교육에서 이것을 당신은 ~을하는것이 더 좋겠습니다.라고 배우고 나역시 그런줄알고 영화등에서 많이 나오니까 아무 생각없이 마구 써왔다..하지만 이말은 상당히무례한 말로 협박에 가까운 말이다. 당신 그거 하는게 좋을껄..아니면 좋지않은일이 생길거야... 하는 주제넘은 협박성 의미가있는것이다.친한 사이가 아니면 상대방의 기분을 상하게 하는 말투임에도 한국사람들은 아무렇지도 않게 회화라면서 마구쓴다.나 역시그랬다.이럴때는 you might as well ~ 나  you would rather ~ 이라고 하는것이 일반적인 표현이다.

일단 권유를 나타내는 기본속성들을 살펴보도록 하자.뒤로 갈수록 의미가 강해진다.
can - may  - should - would - ought to - must - have to

You CAN (COULD)do it - 당신은 이것을 할수있습니다.
You MAY (MIGHT)do it - 당신은 이것을 해도 됩니다.
You SHOULD do it - 당신은 이것을 하면 좋을것입니다.
You WOULD do it - 당신은 이것을 할것입니다.
You OUGHT TO do it - 당신은 이것을 해야 할것입니다.
You MUST do it - 당신은 이것을 해야만 합니다.
You HAVE TO do it - 당신은 이것을 가져야만 (해야만)합니다.
You HAVE GOT TO do it - 당신은 이것을 꼭 가져와야만(해야만) 합니다.

자..여기까지가 현재 내가 알고 쓰고있는 이 단어들의 기본 의미들이다.이 단어들이 내가 아는대로 이렇게만 쓰여진다면 얼마나좋겠냐만은 헷갈리기 시작하는것은 지금부터이다..가정과 후회 ,유감, 게다가 시제까지 짬뽕되서 가정법과거..이런 문장까지 더해지고얘들의 변형이 시작되면 그 사용방법이 어디까지 뻗어나갈지 아직 챙겨보질 않아서 잘 모르겠다..지금부터 하나하나 정리해 나가보기로하자..

Day 106 - I am a librarian
Day 106 - I am a librarian by cindiann 저작자 표시비영리변경 금지

본능에만 매달려 막상 쓰고나서도 내가 맞게 쓴걸까..항상 의심이 들곤한다. 이 단어들의 사용법만 정확히 마스터 하면 어떤상황에서도 자유자재로 대화폭이 가능하게 된다.언제까지- 당신은 해야만 합니다.할것입니다..-이런 한 두가지 패턴으로 모든 대화를처리할수는 없지 않은가..가끔씩 당신이 그렇게만 한다면 얼마나 좋을까요..예전에 당신은 그랬었죠..이런 모든 추측과 유감,과거에대한 다양한 영어 패턴들이 바로 이 단어들을 어떻게 쓰느냐에 따라 달려있으며 실제로 살아가면서 대부분의 필요한 회화는 이단어들에 다 담겨있다고 해도 과언이 아니다. 얼마전까지만 해도 won't 사용법을 몰라 무조건 어떤 상황이던지 don't 하나로 밀어부치곤 했다.지금도 가끔 본능적으로 나올때는 헷갈린다. won'tdon't 냐 크게 잘못될거야 있겠냐 만은 ,단지 무식한 취급 당하는것이 싫을뿐이다.would 라는 단어와의 가장 인상깊은 만남은 바로 "Million girls would die for" The Devil wears Prada 의 캐치 프레이즈 에서 이다..그리고 지금 내가 사용하고 있는 would는 기껏해야 would you mind ~would be great, or i would ~ 이 세가지 패턴뿐이다..should 를 사용해야 할때나 might, ought to 등을 사용할때 그냥 would 로 밀어부치는 경우도 있다.

일단은 would 한가지에 대해서만 사전에 나와있는것을 살펴보도록 하자.

- 사전 설명-
would는 will의 과거형이므로 직설법에서 시제의 일치에 따라 종속절에서, 또 간접화법에서 쓰임은 물론이다.그러나 would는 가정법에서의 용법이 더욱 넓고 복잡하다. 또한 과거의 습관이나 동작의 반복을 나타내는 용법도 있다.
① 직접화법에서의 단순미래 shall을 간접화법으로 옮길 때 그 주어의 인칭과는 관계없이 would를 쓰는 것이 보통이다.(⇒ A1)
② [과거의 습관·동작의 반복] used to는 과거의 꽤 긴 기간에 걸친 상습적 상태를 나타내고, would는 과거의 비교적 짧은 기간 또는 불규칙적 반복 동작을 나타낸다.(⇒ A3)
③ 의뢰를 나타내는 Would you …?는 Will you ...?보다 정중한 표현인데 Would you mind[like,prefer] ...?의 경우에는 거기에 대응하는 Will you mind[like, prefer] ...?라는 표현은 없다.

 ━ auxil. V.  《단축형 'd;부정형 would not;부정 단축형 wouldn't》

A(will1의 직설법 과거)

1 [시제의 일치에 따라 종속절 안에 또는 간접화법에 써서]

a [단순미래] …일 것이다.
I knew that he would be in time. 나는 그가 제 시간에 댈 것이라는 것을 알고 있었다.
She asked her brother when he would be back. 그녀는 오빠에게 언제 돌아올 것인가를 물었다.
He said he wouldbe here by seven. 그는 7시까지에는 여기에 올 것이라고 말했다. 《 직접화법에서의 단순미래인 I[we]shall이 간접화법에서 2·3인칭을 주어로 하여 표현되는 경우, 종종 should 대신에 would를 씀;He said, "Ishall be here by seven."》
I thought he would have finished his work by then. 그때까지에는 그는 이미 일을 마쳤겠지 하고 생각했다.'would have+과거분사'는 과거의 시점까지 완료했으리라고 생각한 동작이나 사건을 나타냄.
b [의지미래] …하겠다
I decided I would leave tomorrow. 나는 내일 떠나기로 마음먹었다.
I said I would try it. 해보겠다라고 나는 말했다. ★ 직접화법으로는 I said, "I will try it."
2a [과거의 의지·주장·거절] (기필코) …하려고 하였다
We asked her to help us, but she would not. 우리는 그녀에게 도와줄 것을 청했으나 그녀는 아무리 해도 듣지 않았다.
I tried to dissuade him from his plan, but he wouldn't hear my advice. 나는 그의 계획을 단념시키려 했으나 그는 내 충고를 들으려 하지 않았다.
The door would not open. 문이 도무지 열리지 않았다.
b [말하는 사람의 초조감을 나타내어] <사람이> 상습적으로 …하다;<공교로운 사태 등이> 늘 …하다 《종종 과거의 때와는 관계없이 씀》
He would park his car in front of my house. 그는 늘 내 집 앞에다 주차한단 말이야.
3 [과거의 습관·동작 등의 반복에 관한 회상] …하곤 했다, 흔히 …하였다(cf. WILL1 6 a, USED1;⇒ used1 (USAGE) (3))
After lunch he would take a nap. 점심 식사 후에 그는 흔히 낮잠을 잤다.
4 [말하는 사람의 과거에 관한 추측] …이었을[하였을] 것이다(cf. WILL1 4)
I suppose it would be the first time I saw her. 그것이 내가 그녀를 만난 최초였을 것이다.
5 <물건이> …할 능력이 있었다, …할 수가 있었다(could)(cf. WILL1 7)
The barrel would hold ten gallons. 그 통은 10갤런이 족히 들어 갔었다.

━  B(가정법에서)

1a [「~+동사의 원형」으로, 현재 또는 미래의 사항에 대한 귀결절에서 무의지의 가정을 나타내어] …(할) 것이다
If he saw this, he would be angry. 만약에 그가 이것을 본다면 화를 낼 것이다.
b [「~+동사의 원형」으로 현재 또는 미래의 사항에 관한 귀결절에서 의지의 가정을 나타내어] …할 생각인데
If I were rich enough, I would buy it. 돈이 넉넉하면 그것을 살 텐데.
I wouldn't if I were you. 내가 너라면 그렇게 하지는 않을 텐데. ★ wouldn't의 뒤에 do so 등이 생략된 것.
c [「~+have+과거분사」로 과거의 사항에 관하여 귀결절에서 무의지의 가정을 나타내어] …했을 것이다
I wouldn't have gone to the football game if I had known it was going to be so boring. 만일 그 축구경기가 그토록 지루하게 될 줄 알았더라면 나는 가지 않았을 것이다.
d [「~+have+과거분사」로 과거의 사항에 관하여 귀결절에서 의지의 가정을 나타내어] …했을 텐데, …할 생각이었는데
 If I had been there, I would have told him the truth. 만일 내가 거기 있었더라면 그에게 사실을 알렸을텐데.
e [주어의 의지를 나타내는 조건절에서] (만약) …할 마음만 있다면
I could do so if I would. 하고 싶으면 그렇게 할 수 있는데 (하고 싶지가 않다). 《... If I wanted to.보다 좀 품위 있는 표현》
I should be most obliged if you wouldgrant my request. 부탁을 들어 주시면 참으로 감사하겠습니다. ★ 정중한 의뢰를 나타내는 문장에 씀;《미》에서는 Iwould be (very) grateful if ...의 표현을 많이 쓰며 should를 쓰는 것보다 구어적임.

2a [조건절의 내용을 언외(言外)에 함축시켜 표현을 완곡하게 하여] …일 것이다, …일 것입니다

It would be about a mile from here to town. 여기서 읍까지는 1마일쯤 될 겁니다. 《from here to town에 조건절의 뜻이 포함되어 있음》
Anyone would have thought that. 다들 그렇게 생각했을 겁니다. 《주어 anyone에 조건절의 뜻이 포함되어 있음》
How much would you take for this? 이것은 얼마나 합니까? 《if I bought it from you가 생략되어 있음》
b [1인칭의 주어와 함께, 말하는 사람의 의견·감정을 완곡하게 표현하여] …하고 싶다, …하게 해 주었으면 싶다
I'd prefer to go tomorrow morning. 내일 아침에 가고 싶은데요.
I would like (for) you to check it. 당신이 확인해 주었으면 합니다. 《for를 쓰는 것은 《미》》(cf. I SHOULD like to)
c [Would you ...?로 정중한 의뢰나 권유를 나타내어] …하여 주시겠습니까
Would you please wait a moment? 잠깐 기다려 주시겠습니까? ★ please를 함께 쓰면 더욱 정중한 표현
Would you mind showing me the way to the station? 역으로 가는 길을 가리켜 주시겠습니까?
Would you like another cup of coffee? 커피 한 잔 더 드시겠습니까?
d [강한 희망·선택] 《문어》 …하고자 하다
The membership is composed of those who would prevent unfair elections. 회원은 부정 선거를 방지하고자 하는 사람들로 구성되어 있다.

3 [I[We] wish에 이어지는 명사절에서] …이기를, …하기를
I wish you would send me a copy of the document. 문서의 사본을 한 통 보내 주시기를 바랍니다.
I would fain do ... 《시어·고어》 기꺼이 …하고 싶다(=I would like to do ...)
would like (1) <…을>원하다, 갖고 싶다:I'd like a regular pizza, please. 보통 크기의 피자를 주세요./I'd like aguide to London. 런던의 안내서를 보고 싶습니다만. (2) [Would you like ...?로] ⇒

B2c
I would like to do ⇒ B2b
would best to do ⇒ had BEST
would better do 《미》 ⇒ had BETTER1
wouldn't you know 생각했던 대로, 역시
would rather ⇒ rather

━ vt. 《문어》 …이기를 바라다(wish) 《보통 주어를 생략하고 가정법 과거형을 포함하는 that절이 뒤에 와서》

《would+that 》 Would that I were young again! 다시 한번 젊어졌으면!
Would it were so. 그랬으면 좋으련만. ★ that가 생략되어 있음
Ah, would that it had been true! 아, 그것이 사실이었더라면 좋았을 텐데!

2007/11/07 18:12


happen English

http://www.bbc.co.uk/worldservice/learningenglish/grammar/learnit/learnitv77.shtml

happen
contract

Ruben from Italy asks:

I have this question about the use of the verbhappen. Which of the following are correct:

1. What happens when the contract will be expired? 
2. What will happen when the contract expires? 3. What happens when the contract expires? 
4. What does it happen when the contract expires?

Also, can I use happen like this?

5. I don’t happen to be a teacher.

 

Roger replies:more questions

In your first four listed examples above, Ruben, you are referring to future time, but only 2 and 3 are grammatically correct.

Let’s look at the arrangement of structures in your second sentence.

When behaves like if in subordinate clauses of this kind and remains in the present tense when we are referring to a future condition. Consider the following:
  • 'What will happen when the contract expires?'
  • 'What will happen if I get home late?'
  • 'What will you do if I don’t return till Thursday?'
Let’s look now at the arrangement of structures from your third sentence. If we are discussing a general truth, rather than a specific instance or event, the main clause usually remains in the present tense as well as the tense in the if or when clause. Consider the following:
  • 'If the roads are icy, I stay at home.'

  • 'What sort of clothes do you wear when the temperature falls below -15 C?'

  • 'What happens in this company when male staff request paternity leave?'
However, in your example, Ruben, we can use the present tense in both clauses to refer to a future event. It is clear that you are talking about your specific contract because you refer to it as ‘the contract’. (If you had said: ‘What happens when contracts expire?’ you would be discussing general truths.)

For your fourth sentence, remember:

no does/do/did when what/who question refers to the subject.

When 'wh-' questions, like whatwho or which, refer to the subject of the sentence, we do not use the auxiliary formsdo/does/did. These auxiliaries are used only when the wh-question refers to the object. Compare the following:

  • 'Which animals rear their young in nests?' 'Squirrels rear their young in nests called ‘dreys’.'

  • 'Which animals did you see on safari?' 'We saw lions, leopards and tigers.'
  • 'Who saw the accident?' 'I saw it.'

  • 'What did you see?' 'I saw the car collide with a bus.'
The exception to this rule is if you wish to use do/does/did for emphasis when what/who/etc questions refer to the subject. Thus, normally, we expect to hear:
  • 'Who earns more than a hundred grand a year in this company?' 'The Chairman earns £150,000.'
  • 'What happens when the contract expires?' 'Under normal circumstances, it’s renewed.'
But if the answer is not known and we wish to emphasise the question in a particular way, use of the auxiliary would be appropriate. Thus:
  • 'Well, what does happen when your contract expires? Doesanyone know?'

  • 'Well, who does earn more than a hundred grand in this company? Does anyone?'
Four fifth sentence happen can be used with a following infinitive to suggest that something may happen by chance. Consider the following:
  • 'If you happen to see my father, ask him to ring me at home later this evening.'

  • 'If you happen to need any help with the decorating, don’t hesitate to ask me.'
'In your example, the context for your statement might be the following:
  • 'I don’t happen to be a teacher, though I sometimes give lessons to help out.

shell script1 linux

아키텍쳐 시간에 branch prediction 텀 페이퍼를 쓴다고 simple scalar로 시뮬레이션을 수행하여 결과값들을 얻었다. 그런데 그 많은 bench mark application들에 대한 각각의 파일들에서 miss inst. 개수와 prediction hit rate를 일일이 가져오기란 무척 번거로운 작업이어서 스크립트를 작성해서 해결하였다. 쉘스크립트를 다뤄본지가 까마득해서 잘 기억이 안나 고생했지만, 다음에는 쉽게 쓸수 있으리라 기대하며 다음과 같이 간단히 예제를 남긴다.


find linux

find에다가 -exec 옵션을 붙이면 무엇이든 할 수 있습니다.

확장자 일괄변경
find . -name *.php -exec rename .sas .mtml {} \;

파일내용 찾기
find . -type f -print | xargs egrep -i "expression"

파일내용 바꾸기
find . -name *.* -exec perl -p -i -e 's/old/new/g' {} \;

일괄삭제
find . -name *.bak -exec rm -rf {} \;  

출처: http://unix.co.kr/bbs/board.php?bo_table=03_4&wr_id=854


Linux find 명령어 완전 정복 가이드

저자 - Sheryl Calish

가장 강력하면서도 한편으로는 혼란스러운 유비쿼터스 명령어인 find 명령어에 대한 개요.

게시일 : 2008년 7월

Linux find 명령어는 모든 Linux 명령어 가운데 가장 유용하면서도 혼란스러운 명령어 가운데 하나입니다. 다른 Linux 명령어의 표준 구문과 다른 구문을 가지고 있다는 점에서 어렵습니다. 하지만, 파일명, 파일 유형, 사용자, 더 나아가 타임 스탬프 별로 파일을 찾을 수 있다는 점에서 강력한 명령어이기도 합니다. find 명령어를 사용하면 이러한 속성을 자유롭게 조합해 파일의 위치를 찾을 수 있을 뿐만 아니라, 찾은 파일에 대해 연산을 수행할 수 있습니다.

본 글의 목적은 find 명령어와 그 잠재적 이점을 개략적으로 설명함으로써 find 명령어를 손쉽게 학습 및 사용할 수 있도록 돕는 것입니다. 동시에, find 명령어의 특성 중 가장 강력하면서도 한편으로는 혼란스러운 측면에 대한 개요 및 참조를 제공할 것입니다.

[주: 여기에서 사용된 find 명령어는 GNU 버전이기 때문에 일부 세부 내용은 다른 버전의 find 명령어와 다를 수 있습니다.]

기본 형식

먼저, find 명령어의 기본 구조부터 살펴보겠습니다:

find   start_directory  test  options   criteria_to_matchaction_to_perform_on_results                          
아래 명령어에서 find는 이름에 “java” 확장자를 가지고 있는 모든 파일을 대상으로 “.”가 표시된 현재 디렉토리를 찾기 시작할 것입니다:
find . -name  "*.java"   

아래에는 검색 결과에 대한 간단한 목록이 나열되어 있습니다:

find . -name  "*.java"./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java..

[주: 본 글에서 잘라 붙이기를 해 find 명령어를 실행하는 경우에는 자체 키보드를 사용해 큰따옴표(“”)를 바꿔야 올바른 결과를 얻을 수 있습니다.]

아래 명령어 역시 동일한 연산을 수행할 것입니다. 어떤 경우든, find 명령어에 전달되도록 escape 문을 통해 와일드카드 문자를 일반 문자로 처리해야 하며 쉘에 의해 해석되지 않아야 합니다. 따라서, 검색 문자열에 큰타옴표를 붙이거나 그 앞에 역슬래시(\)를 붙이십시오:

find . -name  \*.java

find에 대한 인수는 옵션이기는 하지만, 검색 시작 위치를 지정하지 않은 경우에는 현재 디렉토리에서 기본적으로 검색이 시작됩니다. 옵션 사항이기는 하지만 테스트 조건을 지정하지 않은 경우에는 불완전하거나 선별되지 않은 결과값이 출력됩니다.
 
아래 3개의 find 명령어를 실행하면 똑같이 현재 디렉토리와 숨겨진 파일을 포함하는 모든 서브디렉토리의 모든 파일 목록이 검색됩니다:

find find .find . -print

이는 –la 옵션을 가진 ls 명령어를 실행하는 것과 비슷합니다. 백업을 위해 위 명령어의 출력물에 전체 경로 이름이 포함되기를 원하는 경우라면 시작 디렉토리에 대한 전체 경로를 지정해야 합니다:

find /home/bluher -name \*.java/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java/...

또한, 검색 문자열에 1개 이상의 시작 디렉토리를 지정할 수도 있습니다. 적정 권한을 가진 사용자로서 실행되는 경우, 아래 명령어는 모든 jar 파일을 찾기 위해 /usr, /home 및 /tmp 디렉토리 순서로 내려갈 것입니다:  

find /usr /home  /tmp -name "*.jar"

적정 권한이 없는 사용자라면 많은 시스템 디렉토리를 검색하기 시작할 때 다음과 같은 오류 메시지가 나올 수 있습니다:

find:  /tmp/orbit-root: Permission denied

다음과 같이 검색 문자열을 추가함으로써 불명확한 결과가 나오는 것을 피할 수 있습니다:

find /usr /home  /tmp -name "*.jar" 2>/dev/null

이렇게 하면 모든 오류 메시지가 널(null) 파일로 전송되기 때문에 보다 정제된 출력물이 제공됩니다.

기본적으로 find 명령어는 대/소문자를 구별합니다. 대/소문자가 구별되는 find에서는 -name 테스트를 대신해 -iname 테스트를 사용하십시오.

find downloads  -iname "*.gif"downloads/.xvpics/Calendar05_enlarged.gifdownloads/lcmgcfexsmall.GIF
또한, 파일명 외에도 유형에 따라 파일을 검색할 수 있습니다. 예를 들어, 아래 명령어를 통해 디렉토리의 모든 서브디렉토리를 찾을 수 있습니다:
find . -type d          

아래 명령어를 사용하면 /usr 디렉토리의 모든 심볼릭 링크(symbolic link)를 찾을 수 있습니다:

find /usr -type l

위 명령어를 실행하면 3,000개 이상의 링크 목록이 나타날 것입니다. 슈퍼유저(root) 권한을 통해 아래 명령어 가운데 하나를 실행하면 /usr 디렉토리의 링크 목록과 이것이 가리키는 파일이 나타납니다:

# find /usr/bin  -type l  -name "z*" -exec ls  -l {} \;lrwxrwxrwx 1 root  root 8 Dec 12 23:17 /usr/bin/zsh -> /bin/zshlrwxrwxrwx 1 root  root 5 Dec 12 23:17 /usr/bin/zless -> zmorelrwxrwxrwx 1 root  root 9 Dec 12 23:17 /usr/bin/zcat -> /bin/zcat
find /usr/bin -type  l  -name "z*" -ls

하지만, 보다 짧은 두 번째 명령어를 실행하면 디렉토리와 inode 정보를 가진 긴 파일 목록이 나올 것입니다. -exec 및 –ls 실행에 대해서는 후반부에서 다룰 것입니다

find가 찾을 수 있는 다른 파일 유형으로는 다음과 같은 것들이 있습니다

• b—block (buffered) special
• c—character (unbuffered) special
• p—named pipe (FIFO)
• s—socket

find 명령어의 시작점으로 루트를 사용하면 시스템 속도가 크게 느려질 수 있습니다. 반드시 명령어를 실행해야 하는 경우에는 사용량이 적은 시간대나 야간에 실행하는 것이 좋습니다. 아래 구문을 사용해 출력물을 파일로 보낼 수 있습니다.:

find  /   -print > masterfilelist.out

원치 않는 출력물을 대량 생산하는 find 명령어를 실수로 입력한 경우에는 CTRL-C를 누르기만 하면 가장 최근에 실행된 명령어가 중단됩니다.

여러 파일 시스템을 갖춘 엔터프라이즈 네트워크에서는 특히 find 명령어가 검색한 파일을 제한하는 것이 좋습니다. 필요한 수 만큼 옵션 및 테스트를 사용함으로써 시스템 상의 로드를 줄일 수 있습니다. 이를 위해 가장 유용하게 사용할 수 있는 옵션은 –xdev와 -mount입니다. 이들 옵션은 find 명령어가 MS-DOS, CD-ROM 또는 AFS와 같은 다른 파일 시스템 상의 디렉토리로 내려가지 않도록 함으로써 검색 범위를 좁혀줍니다. 따라서, 시작 디렉토리와 동일한 유형의 파일 시스템으로 검색을 제한할 수 있습니다.

듀얼 부팅 시스템 사용자는 mount 명령어가 실행되는 경우에 이러한 옵션을 사용할 수 있습니다. Windows 파티션이 관련되어 있다고 가정하면, 아래와 같은 명령어를 통해 마운팅 할 수 있습니다.:

mount -t vfat  /dev/sda1 /mnt/msdos

여러분이 사용하는 실제 명령어는 시스템 설정 방법에 따라 달라집니다. df를 실행하거나 아래 명령어를 수행함으로써 파티션 마운팅 여부를 확인할 수 있습니다:

find /mnt/msdos  -name "*.txt" 2> /dev/null

MS Windows 파티션에서는 파일 목록이 길 수 밖에 없습니다. 이제부터는 -mount 또는 -xdev 옵션을 통해 아래 명령어를 실행하십시오:

find / -name  "*.txt" -mount 2> /dev/null

또는

find / -name  "*.txt" -xdev 2> /dev/null

아래 예에서와 같이 -fstype 테스트를 사용해 find 명령어에 찾고자 하는 파일 시스템을 명확하게 알려줄 수도 있습니다:

find / -name  "*.txt" -fstype vfat 2> /dev/null

시간 찾기

find 명령어는 시스템의 타임 스탬프를 토대로 파일 검색에 사용할 수 있는 여러 개의 옵션을 가지고 있습니다. 이러한 타임 스탬프로는 다음이 포함됩니다

• mtime파일 내용이 마지막으로 수정된 시간 
• atime—파일을 읽기 또는 액세스한 시간
• ctime—파일 상태가 변경된 시간

mtime 및 atime의 의미는 그 자체로 쉽게 알 수 있지만, ctime는 좀 더 설명이 필요합니다. inode는 각 파일에 메타 데이터를 가지고 있기 때문에 파일에 연결된 메타 데이터가 변경되면 inode 데이터도 변경됩니다. 파일에 대한 심볼릭 링크 생성, 파일에 대한 권한 변경, 파일 이동 등과 같은 다양한 작업으로 인해 이러한 메타 데이터 변경이 야기될 수 있습니다. 이러한 경우, 파일 내용에 대한 읽기나 수정은 수행되지 않기 때문에 themtime 및 atime은 변하지 않지만 ctime은 변합니다. 

이러한 시간 옵션은 각기 -n, n 또는 +n로 지정된 n 값을 함께 사용해야 합니다.

• -n은 n 이하를 반환
• +n은 n 이상을 반환 
• n은 정확히 n에 해당되는 값을 반환

보다 명확한 설명을 위해 몇 가지 예를 살펴 보겠습니다. 아래 명령어는 최근 1시간 동안 수정된 모든 파일을 찾아줍니다:

find . -mtime -1./plsql/FORALLSample./plsql/RegExpDNASample/plsql/RegExpSample

-1 대신 1을 가진 동일 명령어를 실행하면 정확하게 1시간 전에 수정된 모든 파일을 찾을 수 있습니다:

find . -mtime 1 

위 명령어는 정확하게 일치하는 값을 요청하기 때문에 모든 결과값이 나오지는 않습니다. 아래 명령어는 1시간 이전에 수정된 파일을 찾아줍니다:

find . -mtime +1 
기본적으로 -mtime, -atime 및 –ctime는 최근 24 시간에 대한 타임 스탬프입니다. 하지만, 뒤에 daystart 옵션을 붙이면 오늘을 시작으로 24시간 주기가 시작됩니다. 또한, mmin, amin 및 cmin을 사용하면 분 단위로 변경된 타임 스탬프를 찾을 수 있습니다.

여러분의 계정으로 로그인한 후 즉시 아래 명령어를 실행하면 최근 1분 내에 읽은 모든 파일을 찾을 수 있습니다:

find . -amin -1./.bashrc/.bash_history./.xauthj5FCx1

find 명령어만으로 파일의 위치를 찾으면 메타 데이터의 일부인 파일의 액세스 시간이 변경된다는 사실에 유의하십시오.

-newer, -anewer 및 –cnewer 옵션을 사용하면 특정 파일과 비교해 수정 또는 액세스된 파일을 찾을 수도 있습니다. 이는 -mtime, -atime 및 –ctime과 비슷합니다.
 
• -newer : 보다 최근에 내용이 수정된 파일
• -anewer : 보다 최근에 읽기가 수행된 파일
• -cnewer : 보다 최근에 상태가 변경된 파일

마지막 tar 파일 이후로 어떤 방법으로든지 수정된 홈 디렉토리의 파일을 모두 찾으려면 아래 명령어를 사용하십시오:

find . -newer  backup.tar.gz

크기에 따른 파일 찾기

-size 옵션은 지정된 크기 기준에 부합하는 파일을 찾아줍니다. 크기가 5MB 이상인 모든 파일을 찾으려면 아래와 같이 하십시오

find / -size  +5000000c 2> /dev/null/var/log/lastlog/var/log/cups/access_log.4/var/spool/mail/bluher

마지막에 “c”를 붙이면 결과가 바이트 단위로 보고됩니다. 기본적으로 find 명령어는 512 바이트 블록의 수로 크기를 보고합니다. 또한, “c”를 “k”로 교체하는 경우에는 킬로바이트 수로, “w”를 사용하는 경우에는 2바이트 워드의 수로 결과를 표시할 수 있습니다.

-size 옵션은 모든 제로 바이트 파일을 찾거나 이들 파일을 /tmp/zerobyte 폴더로 이동하기 위해 자주 사용됩니다. 아래 명령어가 바로 이러한 연산을 수행합니다.

find test -type f  -size 0 -exec mv {} /tmp/zerobyte \;

-exec 옵션은 find 명령어가 만나게 되는 파일의 모든 쉘 명령어를 수행할 수 있도록 해줍니다. 후반부에서 이 옵션의 보다 다양한 사용 예를 확인할 수 있습니다. 중괄호를 사용하면 빈 파일 각각을 이동시킬 수 있습니다

또한, -empty 옵션을 사용하면 빈 파일을 찾을 수 있습니다.

find test -empty        test/footest/test

권한 및 소유권에 따른 파일 찾기

find 명령어는 시스템 보안 모니터링을 위해 없어서는 안될 명령어입니다. 아래와 같이 기호법이나 8진법을 통해 사용 권한이 널리 열려있는 파일을 찾을 수 있습니다.

find . -type f  -perm a=rwx -exec ls -l {} \; 

또는

find . -type f  -perm 777 -exec ls -l {} \;-rwxrwxrwx 1 bluher  users 0 May 24 14:14 ./test.txt

위의 명령어나 아래 명령어의 경우 -exec ls –l을 수행하고 있기 때문에, 반환된 파일의 실제 사용 권한을 확인할 수 있습니다. 이 명령어는 “기타 사용자” 및 그룹이 모두 쓰기를 수행할 수 있는 파일을 찾아줍니다.

find plsql -type f  -perm -ug=rw -exec ls -l {} \; 2>/dev/null

또는

find plsql -type f  -perm -220 -exec ls -l {} \; 2>/dev/null -rw-rw-rw- 1 bluher users 4303  Jun  7   2004 plsql/FORALLSample/doc/otn_new.css-rw-rw-rw- 1 bluher users 10286 Jan  12  2005  plsql/FORALLSample/doc/readme.html-rw-rw-rw- 1 bluher users 22647 Jan  12  2005  plsql/FORALLSample/src/config.sql..
아래 명령어들을 실행하면 사용자, 그룹 또는 둘 모두가 쓰기 작업을 할 수 있는 파일을 찾을 수 있습니다  
find plsql -type f  -perm /ug=rw -exec ls -l {} \; 2>/dev/null, or,find plsql -type f  -perm /220 -exec ls -l {} \; 2>/dev/null -rw-r--r-- 1 bluher users 21473  May  3 16:02 plsql/regexpvalidate.zip-rw-rw-rw- 1 bluher users 4303  Jun  7   2004 plsql/FORALLSample/doc/otn_new.css-rw-rw-rw- 1 bluher users 10286 Jan  12  2005  plsql/FORALLSample/doc/readme.html-rw-rw-rw- 1 bluher users 22647 Jan  12  2005  plsql/FORALLSample/src/config.sql

웹이나 기존 매뉴얼에는 아래 명령어로 나와 있을 것입니다.

find . -perm +220  -exec ls -l {} \; 2> /dev/null 

+ 기호는 / 기호와 동일한 역할을 하지만, 새로운 버전의 GNU findutils에서는 권장되지 않고 있습니다.

시스템에서 쓰기 가능한 모든 파일을 찾으려면 아래 명령어를 사용하십시오

find / -wholename  '/proc' -prune  -o  -type f -perm -0002 -exec ls -l {} \;-rw-rw-rw- 1 bluher users 4303  Jun  7   2004/home/bluher/plsql/FORALLSample/doc/otn_new.css-rw-rw-rw- 1 bluher users 10286 Jan  12  2005  /home/bluher/plsql/FORALLSample/doc/readme.html...

4번째 사용 권한에 대해 앞으로 조금 더 다루겠지만, 마지막 필드의 “2”는 쓰기 비트로도 알려져 있는 파일 사용 권한의 “기타 사용자”에 해당됩니다. 우리는 설정된 다른 사용 권한이 무엇이든 관계 없이 기타 사용자를 위해 설정된 쓰기 권한을 가진 파일을 보고 싶다는 표시로 0002라는 사용 권한 모드 앞에 대시를 사용했습니다.

위의 명령어에서는 3가지 새로운 개념이 도입되었습니다. 패턴이 발견된 경우, – prune은 파일 패턴 “/proc”에서 -wholename 테스트를 사용함으로써 find 명령어가 이 디렉토리로 내려오지 않도록 막아줍니다. 불린 연산자 “-o”를 통해 find 명령어는 다른 디렉토리에서 명령어의 나머지 부분을 처리할 수 있습니다. 각 표현식 간에 가정된 암시적 and 연산자(-a)가 있기 때문에 좌측 표현식이 거짓(false)으로 평가된 경우 and 뒤에 나오는 표현식은 평가되지 않습니다. 따라서, -o 연산자가 필요합니다. 강제 우선 순위 적용을 위해 괄호를 사용하는 것처럼 find 명령어는 불린 연산자 -not, !,도 지원합니다.

시스템 관리자는 자주 find 명령어를 통해 해당 사용자나 그룹의 이름 또는 ID를 사용해 특정 사용자나 그룹의 정규 파일을 검색하고 있습니다:

[root] $  find / -type f -user bluher -exec ls -ls {}  \;

여기, 이러한 명령어의 출력에 대한 간단한 예제가 나와 있습니다:

4 -rw-r--r-- 1 bluher users 48  May  1 03:09  /home/bluher/public_html/.directory4 -rw-r--r-- 1 bluher users 925  May  1 03:09 /home/bluher/.profile

또한, find 명령어를 사용해 그룹 별로 파일을 검색할 수도 있습니다:

[root] $ find /  -type f -group users
find / -type d -gid  100

이 명령어를 실행하면 그룹 ID 100이 소유하고 있는 디렉토리 목록이 나옵니다. 해당되는 uid 또는 gid를 찾기 위해 /etc/passwd 또는 /etc/group 파일에서 more 또는 cat 명령어를 실행할 수 있습니다

이 명령어는 알려진 특정 사용자 및 그룹에 관한 파일을 찾는 것 외에도 사용자나 그룹이 지정되지 않은 파일을 찾는 데도 유용합니다. 아래 명령어는 /etc/passwd 또는 /etc/group 파일에서 리스트를 가지고 있지 않은 파일을 식별합니다.

find / -nouser -o  -nogroup

위 명령어는 실제로 시스템 상에 결과를 제공하는 것은 아니지만, 파일을 이동한 후에 사용자나 그룹이 지정되지 않은 파일을 식별하는 데 사용할 수 있습니다

이제, 본 섹션 초반부에 언급한 별도의 높은 사용 권한 문제를 해결할 수 있게 되었습니다.

SGID 및 SUID는 UNIX 기반 운영 체제 상의 파일 및 디렉토리에 할당할 수 있는 특별 액세스 권한 플래그입니다. 컴퓨터 시스템 액세스에 있어 일반 권한을 가진 사용자가 일시적으로 높아진 권한을 가지고 바이너리 실행 파일을 수행할 수 있습니다.

find /  \( -perm -2000 -o -perm -4000 \) -ls167901   12 -rwsr-xr-x   1 root     root         9340 Jun 16  2006 /usr/bin/rsh167334   12 -rwxr-sr-x   1 root     tty         10532 May  4  2007 /usr/bin/wall

위 명령어에서 괄호가 escape 처리된 것을 볼 수 있습니다. 또한, 권한 간의 차이점을 확인할 수 있습니다. 첫 번째 파일에는 SGID 권한이 설정되어 있으며 두 번째 파일에는 SUID 권한이 설정되어 있습니다. 위 명령어의 마지막 연산은 -exec ls -dils 연산의 find 명령어와 유사합니다

find 명령어 제어

Linux의 많은 명령어와 달리, find 명령어는 -r 또는 -R 옵션이 없이도 서브디렉토리로 내려가지 않습니다. 이는 기본적으로 지원됩니다. 하지만, 때에 따라 이를 제한하고 싶을 수 있습니다. 이럴 경우, -depth, -maxdepth 및 –mindepth 옵션과 –prune 연산이 유용합니다

-prune이 얼마나 유용한지는 이미 확인했기 때문에 이제는 -depth, -maxdepth 및 -mindepth 옵션에 대해 살펴보겠습니다.

-maxdepth 및 -mindepth 옵션을 사용하면 find 명령어를 통해 검색하고자 하는 디렉토리 트리의 수준을 지정할 수 있습니다. find 명령어가 단 한 수준의 디렉토리를 찾도록 하고 싶은 경우에는 maxdepth 옵션을 사용할 수 있습니다.

아래 명령어를 실행해 디렉토리 트리의 상위 3개 수준의 로그 파일을 검색하면 –maxdepth의 효과를 확인할 수 있습니다. 이렇게 하면 –maxdepth 없이 실행할 때 보다는 훨씬 적은 출력 결과가 나옵니다

find / -maxdepth 3  -name "*log"

또한, find 명령어에게 디렉토리 트리에서 최소 3개 수준까지 디렉토리를 검색할 것을 지시할 수 있습니다.

find / -mindepth 3  -name "*log"

-depth 옵션은 내용 평가에 앞서 디렉토리를 평가할 수 있도록 해줍니다. 아래 명령어는 한 예입니다.:

find -name "*test*" -depth./test/test./test./localbin/test./localbin/test_shell_var./localbin/test.txt./test2/test/test./test2/test./test2

find 명령어의 세계

지금까지 find 명령어의 유용하지만 다소 혼란스러운 일부 기능에 대해 알아보았지만, find 명령어가 수행할 수 있는 추가 작업이 있습니다. 예를 들어, find 명령어가 기존 버전의 UNIX 및 기타 운영 체제와 호환 가능하도록 하고 여러 파일로 출력을 인쇄하도록 하는 등 연산을 수행할 수 있도록 하는 옵션이 있습니다. 본 자료를 읽은 다음에는 find 명령어에 대한 맨페이지(man page)를 이해할 수 있는 배경 지식을 갖추었을 것으로 생각하기 때문에 이 강력하면서도 유용한 툴을 직접 경험해 볼 것을 권합니다


Sheryl Calish는 Linux 전문 IT 컨설턴트입니다. Blue Heron Consulting을 거쳐 현재는 EquityBuild에서 IT 디렉터를 맡고 있습니다


[출처:http://www.oracle.com/technology/global/kr/pub/articles/calish-find.html]


SimpleScalar 설치 Processor Architecture

설치 환경
Ubuntu 9.10

1. 압축 풀고 README.txt파일 처럼 alpha 환경에 맞게 설정을 해준다.
make config-alpha
2. make를 실행하여 설치를 시작하는데 에러가 난다면 gcc 3.3 또는 gcc 3.4 버전으로 시도한다.
우분투 기준
sudo apt-get install gcc-3.4
ln -sf /usr/bin/gcc-3.4 /usr/bin/gcc

3. 다음으로 설치가 잘되었는지 테스트를 해볼 수 도 있다.
make sim-tests

1 2 3 4 5 6 7 8 9 10 다음