개별 find or grep으로 검색으을 하면, 어느정도의 한계를 느낄 것이며, 이를 확장해주는 것이 xargs의 기능이라고 생각한다.
이를 pipe라는 기능을 사용하여, '|' 조합으로 기본 구성을 하여 사용해보고, 단순 검색인
find와 grep을 이용을 해보자.
1.1 find 이용한 기본 검색
- find name 검색
$ find . -name board // kernel 에서 board filename 검색 ./Documentation/devicetree/bindings/board ./drivers/staging/board $ find . -name '*.c' // *.c file 파일 검색 .....
- find로 변경시간 검색
head or tail 이용하자
-cmim : File의 status가 변경된 시간 (기준 n minute)
-ctime : File의 status가 변경된 시간 (기준 n*24 hours, 1 day)
-mmin: File의 data가 변경된 시간 (기준 n minute)
-mtime: File의 data가 변경된 시간 (기준 n*24 hours , 1 day )
$ find . -cmin -5 // -5 분이하, 즉 5분전 파일 변경된 것 검색 ./.config $ find . -cmin 5 // 정확히 5 분 전 것만 검색 , 별로 검색에 필요 없음 $ find . -cmin +5 | head // +5 분이상, 즉 5분 후 파일 변경된 것 검색 , 파일이 너무 많아 head 사용 ./.tmp_kallsyms2.o ./mm ./mm/.filemap.o.cmd ./mm/.mincore.o.cmd ./mm/mremap.o ./mm/.compaction.o.cmd ./mm/page_isolation.o ./mm/.msync.o.cmd ./mm/modules.builtin ./mm/zsmalloc.c $ find . -ctime -5 // 파일 변경된 것 -5 *24 시간 이하 , 즉 5일 이전것 . ./init ./include/linux ./kernel/sched ./arch/arm/boot/compressed ./arch/arm/kernel ./.config.old $ find . -ctime 5 // 파일 변경된 것 5*24 hours 시간된 것 , $ find . -ctime +5 // 파일 변경된 것 +5 *24 hours 시간이상, 즉 5일 이후것
atime /amin : 즉 access time 도 존재하지만 , debugging 할 경우에나 필요할 것 같다.
- find로 size 기준으로 검색
$ find -size -512c // 512 byte 이하 검색 $ find -size -4k // 4k byte 이하 검색 $ find -size -4M // 4M byte 이하 검색 $ find -size -4G // 4G byte 이하 검색
- grep을 이용한 검색
가끔 시스템이 죽을 경우도 존재한다.
$ grep -n _board_ ./System.map // System.map 파일 안에서 _board_ 검색하고 line을 출력 $ grep -n _board_ ./System.map 678:c001ff70 t omap_mux_dbg_board_open 680:c001ffc0 t omap_mux_dbg_board_show 18680:c043faf0 T spi_register_board_info 28085:c0679ecc r omap_mux_dbg_board_fops 37105:c088aeb8 R __ksymtab___i2c_board_list 37106:c088aec0 R __ksymtab___i2c_board_lock 45157:c08964c8 r __kcrctab___i2c_board_list 45158:c08964cc r __kcrctab___i2c_board_lock $ grep -r _board_ . // 현재 directory부터 모든 파일 안의 _board_ 검색을 한다 ./System.map:c001ff70 t omap_mux_dbg_board_open ./System.map:c001ffc0 t omap_mux_dbg_board_show ./System.map:c043faf0 T spi_register_board_info ./System.map:c0679ecc r omap_mux_dbg_board_fops ./System.map:c088aeb8 R __ksymtab___i2c_board_list ./System.map:c088aec0 R __ksymtab___i2c_board_lock ./System.map:c08964c8 r __kcrctab___i2c_board_list ./System.map:c08964cc r __kcrctab___i2c_board_lock ./System.map:c08b2e64 r __kstrtab___i2c_board_list ./System.map:c08b2e75 r __kstrtab___i2c_board_lock ./System.map:c08cc7d4 T omap_serial_board_init ./System.map:c08e73c4 T i2c_register_board_info ./System.map:c08fc398 t pmic_i2c_board_info ./System.map:c0911390 d musb_default_board_data ./System.map:c0945560 D __i2c_board_lock ./System.map:c094556c D __i2c_board_list .....
1.2. 기본조합 (find와 grep)
find만 이용할 경우 file list 만을 검색을 하지만, 여기서 grep을 이용하여 file list를
find에서 검색한 list 에서만, grep을 이용하여 find의 검색 정보의 정확성을 높힌다.
사실 그리 좋은 조합은 아닌 것 같다.
1. find 로 *.c 파일 file list을 생성
2. *.c file list 입력을 받아 이를 grep 으로 board관련된 내용 file list 줄임
1.3 find 와 xargs 와 greps 조합 검색
xargs는 stdin으로 부터 들어온 command lines을 실행하거나 빌드하는 기능이다.
쉽게 말하면
xargs를 이용하여, grep으로 검색을 하되 find에서 검색한 내용안 에서만 검색을 한다.
위의 검색과 차이가 있다.
1.4. xargs 확장 사용
xargs: 파이프 이전의 명령의 결과 값들을 인자로 보내어 주어 실행시킴.
이름도 xargs , 현재 여러 인자를 TEST 못해봄. 주로, 인자 하나만 사용해봄.
사실 그리 좋은 조합은 아닌 것 같다.
1. find 로 *.c 파일 file list을 생성
2. *.c file list 입력을 받아 이를 grep 으로 board관련된 내용 file list 줄임
$ find . -name '*.c' | grep board // find 로 전체 *.c 파일 list 생성 ./sound/soc/intel/boards/haswell.c ./sound/soc/intel/boards/skl_rt286.c ./sound/soc/intel/boards/bytcr_rt5640.c ./sound/soc/intel/boards/byt-max98090.c ./sound/soc/intel/boards/broadwell.c ./sound/soc/intel/boards/cht_bsw_rt5645.c ./sound/soc/intel/boards/cht_bsw_max98090_ti.c ./sound/soc/intel/boards/mfld_machine.c ./sound/soc/intel/boards/cht_bsw_rt5672.c ./sound/soc/intel/boards/byt-rt5640.c ./kernel/debug/kdb/kdb_keyboard.c ./arch/arm/mach-tegra/board-paz00.c ./arch/arm/mach-omap2/board-generic.c ./arch/arm/mach-omap2/board-ldp.c ./arch/arm/mach-omap2/board-rx51-peripherals.c ./arch/arm/mach-omap2/common-board-devices.c ./arch/arm/mach-omap2/board-n8x0.c ./arch/arm/mach-omap2/board-rx51.c ./arch/arm/mach-omap2/board-rx51-video.c ./arch/arm/mach-omap2/board-flash.c ./arch/arm/mach-ux500/board-mop500-audio.c ./arch/arm/mach-ux500/board-mop500-regulators.c ./arch/arm/mach-omap1/board-h2-mmc.c ./arch/arm/mach-omap1/board-perseus2.c ./arch/arm/mach-omap1/board-osk.c
1.3 find 와 xargs 와 greps 조합 검색
- xargs 와 pipe의 조합기능
xargs는 stdin으로 부터 들어온 command lines을 실행하거나 빌드하는 기능이다.
쉽게 말하면
- find *.c | xargs grep xx // c파일을 찾아 list 만들고 이를 grep에게 argument로 전달
- find *.h | xargs rm xx // h파일을 찾아 list 만들고 이를 rm에게 argument로 전달
xargs를 이용하여, grep으로 검색을 하되 find에서 검색한 내용안 에서만 검색을 한다.
위의 검색과 차이가 있다.
$ find . -name '*.c' | xargs grep dram_init // *.c 검색해서 grep으로 *.c파일만 dram_init 내용을 검색
1.4. xargs 확장 사용
xargs: 파이프 이전의 명령의 결과 값들을 인자로 보내어 주어 실행시킴.
이름도 xargs , 현재 여러 인자를 TEST 못해봄. 주로, 인자 하나만 사용해봄.
$ find . -name '*.o' | xargs grep 찾고자 하는 file $ find . -name '*.mk' -o -name 'Makefile' | xargs grep odroid $ find . -name '*.mk' | xargs rm
Ref.
http://stackoverflow.com/questions/7339253/find-and-number-of-days-range
http://qdata.co.kr/bo/bbs/board.php?bo_table=ltip&wr_id=210
2. 소스내 패턴검색 (sed,xarg 응용)
sed를 알고나서, xarg에 적용을 하고 난뒤 아래와 같은 조합으로 만들어봤는데,
소스검색방법으로 정말 최적인것 같다.
SSD가 아닌곳에서도 소스검색용으로는 최적인것 같다.
sed 및 xargs와 grep를 이용하여, 빌드만 된 소스에서 원하는 패턴을 검색
1. find로 obejct 검색한다.
2. sed 로 *.o 에서 *.c로 변경한다. (검색결과 파이프로 받는다)
3. xargs를 이용하여 grep 명령을 실행한다. (-r 재귀명령어, -s no-messages )
http://stackoverflow.com/questions/7339253/find-and-number-of-days-range
http://qdata.co.kr/bo/bbs/board.php?bo_table=ltip&wr_id=210
2. 소스내 패턴검색 (sed,xarg 응용)
sed를 알고나서, xarg에 적용을 하고 난뒤 아래와 같은 조합으로 만들어봤는데,
소스검색방법으로 정말 최적인것 같다.
SSD가 아닌곳에서도 소스검색용으로는 최적인것 같다.
sed 및 xargs와 grep를 이용하여, 빌드만 된 소스에서 원하는 패턴을 검색
1. find로 obejct 검색한다.
2. sed 로 *.o 에서 *.c로 변경한다. (검색결과 파이프로 받는다)
3. xargs를 이용하여 grep 명령을 실행한다. (-r 재귀명령어, -s no-messages )
$ find . -name '*.o' | sed -e 's/o$/c/g' | xargs grep -rs 'stmmac'
3. Find 기타사용
Find 사용하여, 소스 File 추출
ex) 특정 파일 추출
하나 추가할때마다 -o -name 사용
ls 하여 파일을 다시 grep으로 avc포함된 파일만 ./avc 폴더로 이동
https://kldp.org/node/35902
- 소스 파일 추출 (cscope 파일 사용)
Find 사용하여, 소스 File 추출
$ find . \( -name '*.c' -o -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.s' -o -name '*.S' -o -name '*.asm' \) -print > cscope.files
ex) 특정 파일 추출
하나 추가할때마다 -o -name 사용
$ find . -name '*.c' -o -name '*.h'
ls 하여 파일을 다시 grep으로 avc포함된 파일만 ./avc 폴더로 이동
$ ls | grep avc | xargs -i mv {} ./avc
https://kldp.org/node/35902