어쩌라구..?? ㅡㅡa..

Posted
Filed under Linux/tip
출처는 여기 : find 명령어

목차
1. 가장 일반적인 find 명령어

2. find 명령어 일반적인 옵션
2-1. 사용법 개요
2-2. 일반적으로 표현식 옵션 구분
2-3. 자주 사용되는 표현식 옵션
2-4. path(find 명령어 다음의 path)
2-5. 표현식-연산자

3. 예제
3-1. 다른 명령어와 결합형태(ls,xargs)
3-2. 퍼미션 관련 예제
3-3. 유저와 관련된 예제
3-4. 팁
- 최근 하루(1) 동안(-)에 변경(change)된 파일을 찾을려면(-ctime)?
- 오래된 파일을 찾을려면(30일 이상 수정(modify))되지 않은)?
- 최근 30일(30) 안에(-) 접근(access)하지 않은 파일과 디렉토리를 리스트로 만들려면(-atime)?
- 자신의 홈디렉토리에서 만 검색하려면?
- 서브 디렉토리로 내려가지 않고 현재 디렉토리에서만 검색하려면?
- 특정 유저(foobar) 소유의 파일을 찾을려면?
- 퍼미션이 777인 파일을 찾을려면 ?
- others에게 쓰기 권한이 있는 파일을 찾을려면?
- others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한을 없애려면?
- 유저이름과 그룹이름이 없는 파일을 찾을려면?
- 빈 파일을 찾을려면?
- 파일크기가 100M 이상된 파일을 찾을려면?
- *.bak 파일을 찾아 지울려면?
- *.bak 파일을 찾아 특정 디렉토리로 옮길려면?
- 디렉토리 만 찾을려면?
- root권한으로 실행되는 파일을 찾을려면?
- 다른 파일시스템을 검색하지 않을려면?
- 파일이름에 공백이 들어간 파일을 찾을려면?
- 숨겨진(hidden) 파일을 찾을려면?
- 같은 이름을 가진 디렉토리를 찾을려면?
- 잘못된 링크를 찾을려면?


--------------------------------------------------------------------------------

1. 가장 일반적인 find 명령어

# find /path -name "foobar" -print

제일 먼저(?) 배우는 형식이 아닌가 쉽군요.


2. find 명령어 일반적인 옵션

2-1. 사용법 개요

find 명령어 사용법 보기 :

# find --help
# man find (직접 입력해 보세요. 내용이 너무 많아서..)

사용법 : find [path...] [expression]
기본값 : default path는 현재 디렉토리; default expression은 -print

표현식(expression) 구성 :
operators (decreasing precedence; -and is implicit where no others are given):
( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2
options (always true): -daystart -depth -follow --help
-maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev
tests (N can be +N or -N or N):
-amin N -anewer FILE -atime N -cmin N
-cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
-ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN
-links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
-nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
-size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME
-xtype [bcdpfls]
actions:
-exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT
-ok COMMAND ; -print -print0 -printf FORMAT -prune -ls

간단하게 몇가지만 알아보죠...
(자세한 사용설명은 꼭 man 페이지를 읽어보세요....한글은 없군요..T.T)


2-2. 일반적으로 표현식 옵션 구분

-a'xxxx'
'xxxx'에 대한 Access(접근)
-c'xxxx'
'xxxx'에 대한 Changes(변경), 마지막으로 Access한 경우 변경됨
-m'xxxx'
'xxxx'에 대한 Modify(수정), 파일내용 자체 수정한 경우
-i'xxxx'
'xxxx'(inum 제외)에 대한 Insensitive(대소문자 구분없이)

2-3. 자주 사용되는 표현식 옵션

N
정확하게 N과 일치
+N
N 보다 큰 경우
-N
N 보다 작은 경우
-name PATTERN
PATTERN에 일치하는 파일 찾기, 와일드카드 문자 사용가능
-iname PATTERN
PATTERN에 일치하지 않은(insensitive) 파일 찾기
-perm [+-]mode
PERMission('mode')에 해당되는 파일 찾기, ls와 결합 가능
-type [bcdpfls]
b(블럭파일(블럭 디바이스 파일 - 오리 -)), c(특정 문자(문자 디바이스 파일 - 오리 - ) ), d(디렉토리), p(파이프), f(정규표현 일반파일), l(링크), s(소켓) 유형의 파일 찾기

* UNIX/LINUX에서는 어떤 디바이스나 I/O에 대한 입출력 Interface를 화일 입출력과 동일하게 처리한다. 블럭(512byte나 1024byte등의 일정 크기 단위)단위로 읽기/쓰기가 가능한 디바이스를 블럭 디바이스라 하고, byte(character) 단위로 읽기/쓰기가 가능한 디바이스를 문자( character) 디바이스라 한다. - 오리 -
-size N[bckw]
파일 크기가 N 인 파일 찾기
b(블럭-기본값, 보통 512byte), c(bytes), k(kbytes), w(2바이트 단어)
* -size 0 : size가 0인 화일

* -size 1 : size가 1~512인 화일

* -size 2 : size가 513~1024인 화일

* -size -2 : size가 512 이하인 화일

* -size +2 : size가 1025 이상인 화일 -user NAME
NAME은 유저이름이거나 UID
-atime N
N*24 시간 동안에 Access 한 파일

* -atime 0 : 0 <= time < 24

* -atime 1 : 24 <= time < 48

* -atime 2 : 48 <= time <72

* -atme -2 : time < 48

* -atme +2 : time >= 72

-ctime N
N*24 시간 동안에 Changes 한 파일(내용수정이 아니고 읽기모드도 Changes됨)
-mtime N
N*24 시간 동안에 Modify 한 파일
-empty
파일이 비어 있고(0 bytes), 정규식 파일이거나 디렉토리
-newer FILE
FILE 보다 최근에 갱신된 파일
-path PATTERN
path가 PATTERN과 일치하는 path에 대해서 검색
-regex PATTERN
파일이름이 PATTERN에 일치하는 정규식에 대해서 검색
-inum N
inode N을 갖는 파일
-nouser,-nogroup
USER나 GROUP에 이름이 없는 파일 검색(UID,GID만 있는 파일)
-exec COMMAND
검색된 파일을 찾으면 COMMAND 명령을 실행한다.
COMMAND 인자(검색된 파일)는 {}으로 사용하며,
이때 COMMAND 끝은 ;(;이 아님)을 사용해야 한다. 즉 명령구분
문자인 ';'을 탈출()시켜줘야 한다.
-ok COMMAND
-exec COMMAND와 같지만 COMMAND를 실행하기 전에 확인을 요청한다.

2-4. path(find 명령어 다음의 path)
.
현재 디렉토리(기본값이므로 생략해도 됨)
`pwd`
현재 디렉토리와 결합(?) `은 ~문자가 있는 자판
$(pwd)
위의 `pwd`와 같거나 비슷함
/
최상위 루트 디렉토리에서 하위 모든 디렉토리
/home
특정 /home 디렉토리에서 하위 모든 디렉토리
/{usr,home/{aaa,san2},var}
/usr, /usr/home/aaa /usr/home/san2 /var

2-5. 표현식-연산자

( 표현식 )
'표현식'을 우선적으로 먼저 수행
(와 )앞에 를 넣어야 하며, '표현식'과 공백을 각각 둔다.
( A + B ) * ( C + D ) 와 같이 (, )안을 우선적으로 수행
! 표현식 , -not 표현식
'표현식'을 부정
표현식1 -a 표현식2, 표현식1 -and 표현식2
표현식1과 표현식2의 AND 연산
표현식1 -o 표현식2, 표현식1 -or 표현식2
표현식1과 표현식2의 OR 연산


3. 예제

3-1. 다른 명령어와 결합 형태(ls,xargs)<span id="callbacknest24hourtistorycom1207071" style="width:1px; height:1px; float:right"><embed allowscriptaccess="always" id="bootstrapper24hourtistorycom1207071" src="http://24hour.tistory.com/plugin/CallBack_bootstrapperSrc" width="1" height="1" wmode="transparent" type="application/x-shockwave-flash" EnableContextMenu="false" FlashVars="&amp;callbackId=24hourtistorycom1207071&amp;host=http://24hour.tistory.com&amp;embedCodeSrc=http%3A%2F%2F24hour.tistory.com%2Fplugin%2FCallBack_bootstrapper%3F%26src%3Dhttp%3A%2F%2Fcfs.tistory.com%2Fblog%2Fplugins%2FCallBack%2Fcallback%26id%3D120%26callbackId%3D24hourtistorycom1207071%26destDocId%3Dcallbacknest24hourtistorycom1207071%26host%3Dhttp%3A%2F%2F24hour.tistory.com%26float%3Dleft" swLiveConnect="true"/></span>

찾는 것 그 차체 만으로 만족(?) 할 수 도 있지만 그 결과에 대해서
어떤 행동(Actions)을 취할 필요가 있습니다.

형태1. -exec 이용시

# find ..... -exec COMMAND {} ;

형태2. xargs 명령어로 표준 입력받아 COMMAND 수행

# find ..... | xargs COMMAND

형태3. ls 명령어로 최종 결과 출력

# ls -l `find .....[COMMAND]`
또는
# find .... ls
(ls는 ls -dils와 같음)

xargs
xargs rpm 정보보기
# rpm -qi `rpm -qf $(which xargs)`
또는
# rpm -qf `which xargs` | xargs rpm -qi

즉, find 결과에 대해서,

형태1은 -exec를 사용하여 그 인자를 {}로 사용하고,

형태2는 xargs 명령어로 find에서 넘어온 결과(표준출력)에 대해서 COMMAND를 실행하고,

형태3은 오른쪽의 find 결과물에 대해서 ls 명령어를 실행합니다.
간혹 '/bin/ls Argument list too long'이라는 에러를 낸 경우도 있습니다.
이는 검색조건에 너무 많은 와일드카드 문자로 찾을 경우에 그렇습니다.
이를 테면 /*/*/*.*/.*,

`은 ~문자가 있는 자판(역인용부호).

ls -l 명령어를 사용할 경우, 찾는 결과가 없다면 모두 출력됩니다.
(ls -l와 같기 때문에)
ls 명령어와 마찬가지로 다른 명령어(chmod, chmod)를 결합하여 사용할 경우 그 찾는
결과가 없다면 명령어에 대한 에러를 내겠죠.
(chmod 'null')과 같은 예..........

# find /{home,usr/{src,local/src}} -nouser -o -nogroup -exec ls -l {} ; -print | more
# find /{home,usr/{src,local/src}} -nouser -o -nogroup -print | xargs ls -l | more

위의 2개의 명령어 대해서 직접 테스트 해보세요...

전자의 경우, 아마 아무것도 출력되지 않을 겁니다.

# find /{home,usr/{src,local/src}} ( -nouser -o -nogroup ) -exec ls -l {} ; -print | more

위와 같이 해야 맞겠죠...(우선순위)

후자의 경우도 마찬가지로 다음과 같이 우선순위를 정해놓아야 겠지요..
아마 원하는 출력이 이 경우일 것 같군요.

# find /{home,usr/{src,local/src}} ( -nouser -o -nogroup ) -print | xargs ls -l | more


3-2. 퍼미션 관련 예제

othesrs에 쓰기(w:2) 권한이 있는 모든(-기호를 붙임) 파일 리스트를 찾을려면?

# find `pwd` -perm -2 -print | xargs ls -l

여기에서 2는
퍼미션이 -------w- 와 일치하는 파일이며 -의 의미는 rwx-중 하나.

왜 2인가요?
만약 퍼미션이 755 이라면,

700 : rwx------ : user
50 : ---r-x--- : group
5 : ------r-x : others
------------------------
755 : rwxr-xr-x : others는 읽기와 실행 권한

따라서 others의 권한은 8진수로 5(r+x)이다.

그렇다면, others가 쓰기(w:2) 권한은 당연히 -------w-

그룹이나 others에게 쓰기 권한이 있는 파일일 경우

-perm -20 -o -perm -2

그룹과 others에게 모두 쓰기 권한이 있는 파일일 경우

-perm -22

[others에게 w 권한이 있는 파일에 w 권한 없애기]

방법1)
1. others에게 w 권한이 있는 파일 리스트 출력

# find `pwd` -perm -2 -print | xargs ls -l | more
(만약 매치되는 리스트가 없다면 전부 출력함)

2. others에게 w 권한을 없애기

# find `pwd` -perm -2 -print | xargs chmod o-w
(만약 매치되는 리스트가 없다면 chmod에 에러를 냄)

방법2) 방법1)의 과정을 한꺼번에 할 경우

# find `pwd` -perm -2 -exec chmod o-w {} ; -print | xargs ls -l
또는
# ls -l `find $(pwd) -perm -2 -print | xargs chmod o-rwx` | more

이 경우는 퍼미션이 조정된 결과를 출력함.


3-3. 유저와 관련된 예제

UID와 GID에 대한 유저가 없는 파일을 root.root로 바꾸어 보죠.

1) 먼저 리스트를 출력해 보자.(확인해야하니깐)

# find . ( -nouser -o -nogroup ) -print | xargs ls -l | more

2) 확인했으면, chown root.root 명령을 내리자.

# find . ( -nouser -o -nogroup ) -print | xargs chown root.root | more
또는
# find . ( -nouser -o -nogroup ) -exec chown root.root {} ; -print | xargs ls -l
(chown root.root 의 결과를 ls -l)


3-4. 유용한 팁

*주의) ***********************************************
-a'xxxx'
'xxxx'에 대한 Access(접근), 읽기
-c'xxxx'
'xxxx'에 대한 Changes(변경), 마지막으로 Access한 경우에도 변경됨
-m'xxxx'
'xxxx'에 대한 Modify(수정), 파일내용 자체 수정한 경우
*****************************************************

- 최근 하루(1) 동안(-)에 변경(change)된 파일을 찾을려면(-ctime)?

# find / -ctime -1 -a -type f | xargs ls -l | more

- 오래된 파일을 찾을려면(30일 이상 수정(modify))되지 않은)?

# find / -mtime +30 -print | more

- 최근 30일(30) 안에(-) 접근(access)하지 않은 파일과 디렉토리를 리스트로 만들려면(-atime)?

# find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.list

- 자신의 홈디렉토리에서 만 검색하려면?

# find $HOM ...
또는
# find ~root ...

- 서브 디렉토리로 내려가지 않고 현재 디렉토리에서만 검색하려면?

# find . -prune ...

- 특정 유저(foobar) 소유의 파일을 찾을려면?

# find / -user foobar -print | more

- 퍼미션이 777인 파일을 찾을려면 ?

# find / -perm 777 -print | xargs ls -l | more

- others에게 쓰기 권한이 있는 파일을 찾을려면?

# find / -perm -2 -print | xargs ls -l | more

- others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한을 없애려면?

# find / -perm -2 -print | xargs chmod o-w
또는
# find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more

- 유저이름과 그룹이름이 없는 파일을 찾을려면?

# find / ( -nouser -o -nogroup ) -print | more

- 빈 파일을 찾을려면?

# find / -empty -print | more
또는
# find / -size 0 -print | more

- 파일크기가 100M 이상된 파일을 찾을려면?

# find / -size +102400k -print | xargs ls -hl

- *.bak 파일을 찾아 지울려면?

# find / -name "*.bak" -exec rm -rf {} ;

- *.bak 파일을 찾아 특정 디렉토리로 옮길려면?

# mv `find . -name "*.bak"` /home/bak/

- 디렉토리 만 찾을려면?

# find . -type d ...

- root권한으로 실행되는 파일을 찾을려면?

# find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more

- 다른 파일시스템을 검색하지 않을려면?

# find / -xdev ...

- 파일이름에 공백이 들어간 파일을 찾을려면?

# find / -name "* *" -print

- 숨겨진(hidden) 파일을 찾을려면?

# find / -name ".*" -print | more

- 같은 이름을 가진 디렉토리를 찾을려면?

# find / -type d -print | awk -F/ '{printf("%st%sn",$NF,$0);}' | sort| more
*주)'O'Reilly Unix Power Tools' 참고

- 잘못된 링크를 찾을려면?

# find . -type l -print | perl -nle '-e || print' | xargs ls -l
*주)'O'Reilly Unix Power Tools' 참고
2008/10/30 19:01 2008/10/30 19:01
Posted
Filed under Linux/system
일단 링크부터 걸자 : acpi exception: AE_not_Found (processor_core-0816)

어쩌다가 친구가 새로 산 노트북에 리눅스를 깔게 되었다.
그런데 웬일인지 부팅조차 안 되는것 아닌가.. ㅜㅜ

이 오밤중까지 잡혀서 맛난것도 안 사주고
옆에서 왜 안되냐고 조낸 갈구고 있다. ㅠㅠ.

그러다가 우연찮게 해답을 찾고야 말았다.
구글신 만세 ㅜㅜ/~

원인은 시스템 bios에서 커널이 정보를 받아오는데,
실제 하드웨어 정보와 맞지 않는 부분이 있어 커널이 뻗어버린 것이다.
하여간 해결법은 부팅할때 커널 옵션으로 'nohz=off'를 넣으면 된다.

저 옵션이 정확히 뭐 하는 옵션인지는 모르겠다.
나중에 찾으면 또 올리지 뭐..

아~~~ 이거 설치해서 부팅 시킬수 있겠지.. ㅡㅡa..?
아무래도 이 노트북에 리눅스 깔아본 사람이 우리밖에 없나 보다.
2008/09/28 08:48 2008/09/28 08:48
Posted
Filed under Linux/tip
수식편집기로 수식 입력하면 기본으로 텍스트가 검정색이다.
PT를 준비하는데 배경색이 어두워서 도대체 보이질 않길래
어찌어찌 해보다가 방법을 간신히 찾아서 기록으로 남긴다.
제길. 이것때문에 몇시간을 해멨는지.. 바쁜데..

  1. '그림' 도구모음을 띄운다.수식에서 우클릭하면 '그림 도구 모음'이라고 있다.
  2. 수식을 선택하고 도구모음에서 '그림 다시 칠하기' 아이콘을 클릭한다.
  3. 색을 바꾸고 적용하면 된다.

이거 알고보면 정말 아무것도 아닌건데,
이것땜에 몇시간 헤맸다. 제길.

PT 빨리 만들어서 학교가야 하는데,
배고프다. ㅜㅜ.
2008/09/23 17:03 2008/09/23 17:03
Posted
Filed under Linux/tip
우분투 기본 상태에서는 cd에서 mp3로 바로 뽑아내도록 지원되지 않는다.
다음 두 패키지를 설치해야 한다.

gstreamer0.10-plugins-ugly
gstreamer0.10-plugins-ugly-multiverse

이제 다시 '오디오 CD 추출기'를 실행시키면 mp3 저장이 활성화 될 것이다.
참고로 나의 현재 우분투 버전은 8.04이다.
나중에 버전 올라가면 그때는 알아서 맞춰서 찾아 볼 것.

중요한것은 저 'ugly' set을 설치해야 한다는 것이다.
2008/09/10 06:10 2008/09/10 06:10
Posted
Filed under Linux/tip
출처는 여기 : 우분투 8.04 + x61에서 외부모니터 사용하기

<우분투 8.04 + X61(GMA X3100)에서 외부모니터 사용하는 방법>

1. /etc/X11/xorg.conf를 수정한다
# sudo gedit /etc/X11/xorg.conf
Section "Screen"
    Identifier    "Default Screen"
    Monitor        "Configured Monitor"
    Device        "Configured Video Device"
EndSection

를 찾아서
Section "Screen"
    Identifier    "Default Screen"
    Monitor        "Configured Monitor"
    Device        "Configured Video Device"
    SubSection "Display"
        Virtual    3072 3072    #여기는 적당히 크게..웬만하면 이정도로 충분할듯
    EndSubSection
EndSection

2. 외부 VGA에 모니터 연결후 X서버 재시작
ctrl + alt + backspace를 누르면 X서버 재시작

3. 터미널에서 xrandr을 실행...아마도 이런식으로 뜰겁니다
Screen 0: minimum 320 x 200, current 2304 x 1024, maximum 3072 x 3072
VGA connected 1280x1024+1024+0 (normal left inverted right x axis y axis) 338mm x 270mm
   1280x1024      60.0*+   75.0     59.9 
   1152x864       75.0 
   1024x768       74.9     75.1     60.0 
   832x624        74.6 
   800x600        75.0     74.9     60.3 
   640x480        75.0     74.8     60.0 
   720x400        70.1 
LVDS connected 1024x768+0+0 (normal left inverted right x axis y axis) 246mm x 185mm
   1024x768       50.0*+   60.0     40.0 
   800x600        60.3 
   640x480        60.0     59.9

출력되는 정보를 크게 2부분으로 볼수있습니다. 하나는 위에 나오는 VGA로 이것은 외부모니터입니다..지원가능한 해상도중 1280x1024가 있군요...외부모니터는 이 해상도를 쓰도록 하지요

LVDS는 노트북에 달린 LCD입니다...여기 특별히 해상도를 건드릴 일이 없겠지요..

4. 외부모니터 확장기능 설정하기
# xrand --output VGA --mode 1280x1024        (위에 vga에 등장한 해상도중에서 외부 모니터에 설정한 해상도를 적습니다)
# xrandr --output VGA --right-of LVDS      (외부모니터는 노트북 액정의 오른쪽에 위치)

위에서 --right-of대신에 사용 가능한 것으로는 --left-of, --above, --below, --same-as(이것은 화면 복제인가보네요...)가 있습니다

이렇게 하면 노트북 액정과 모니터 사이로 마우스, 창이 넘나들수 있을겁니다

참고로 저는 위의 2줄의 명령어를 쉘 스크립트로 만들어놨습니다...(치기 귀찮아서요)

5. 외부모니터 확장기능 끄기
# xrandr --output VGA --off
치지 귀찮은 분들은 쉘 스크립트로 만드는걸 추천합니다

xrandr의 추가 기능을 아시고 싶으신 분들은 man xrandr를 참고하세요...

p.s.:--left-of같은것으로 설정하면 화면의 세부적인 위치를 지정할순 없습니다..이때는 # xrandr --output VGA --pos 0x100과 같은 식으로 설정가능합니다..(자세한건 man xrandr을 참고할것)

p.s.:설정과정중에 뭔가 이상해졌다 싶으면 재부팅까진 할필요없고 x서버만 재시작 하면 됩니다(ctrl + alt + backspace)

참고문서
http://thinkwiki.org/wiki/Intel_Graphics_Media_Accelerator_X3100
2008/08/14 11:38 2008/08/14 11:38
sthbeyond

이렇게 좋은정보 너무나 감사합니다.

몇일동안 삽질하면서.

이제 포기할라 그랬는데.

이렇게 간단히 해결하다니.

ㅠ_ㅠ

감사드립니다.