===== 설치중에 유용하게 사용한 명령 ===== ==== 1. $LFS/sources에서 디렉토리 검색 ==== alias dirfind="find -mindepth 1 -maxdepth 1 -type d | sed 's@^./@@'" dirfind | wc -l ## 디렉토리 갯수 확인 rm -rf $(dirfind) ## 설치 완료된 소스 디렉토리 삭제 ## 설치 완료된 패키지 디렉토리만 삭제할거면 다음과 같이 alias SearchAndDestroy='find -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} \;' \\ ==== 2. SBU 측정 ==== ## 현재 디렉토리+생성시간을 추가해서 로그파일 작성 alias lfslog='tee ~/lfs-log/$(case $(basename $(pwd)) in build) echo $(basename $(dirname $(pwd))); ;; *) echo $(basename $(pwd)); ;; esac).$(date "+%Y%m%d_%H%M%S").log' time { ./configure .... && make && make install; } | lfslog \\ ==== 3. 짜투리 ==== ## 현재 창 또는 탭에서 링크 열기 ## 새로운 창 또는 탭에서 링크 열기 ./configure --prefix=/usr \ --bindir=/usr/bin \ --localstatedir=/var \ --disable-logger \ --disable-whois \ --disable-rcp \ --disable-rexec \ --disable-rlogin \ --disable-rsh \ --disable-servers ## Same Command ./configure --prefix=/usr --bindir=/usr/bin --localstatedir=/var \ --disable-{logger,whois,r{cp,exec,login,sh},servers}\\ ==== tar를 이용한 복사 ==== tar -cf - . | tar -xvf - -C /target_directory\\ ==== find example ==== ## 크기가 50M 이상이면서 .deb, .vmdk 확장자가 아닌 파일 ## Operator AND = -and,-a, OR= -or = -o, NOT = ! find /media/d/ -type f -size +50M -and ! -name "*deb" -and ! -name "*vmdk"\\ ==== grep example ==== ## 일반적인 grep 으로 다음과 같은 결과가 나왔다. $ grep 'printf' fileio.c printf("FILE open Error\n"); printf("chi = %c\n", chi); printf("cho = %c\n", cho); printf("FILE open Error\n"); printf("chi = %c\n", chi); printf("cho = %c\n", cho); ## -n 옵션을 통해 line 을 볼수 있다. $ grep -n 'printf' fileio.c 11: printf("FILE open Error\n"); 18: printf("chi = %c\n", chi); 19: printf("cho = %c\n", cho); 25: printf("FILE open Error\n"); 31: printf("chi = %c\n", chi); 32: printf("cho = %c\n", cho); ## -v 옵션을 통해 'chi' 문자열이 들어간걸 제외하고 print 했다. $ grep -n 'printf' fileio.c | grep -v 'chi' 11: printf("FILE open Error\n"); 19: printf("cho = %c\n", cho); 25: printf("FILE open Error\n"); 32: printf("cho = %c\n", cho); ## grep 을 두번 사용해서 보고싶은것만 print 했다. $ grep -n 'printf' fileio.c | grep -v 'chi' | grep -v 'cho' 11: printf("FILE open Error\n"); 25: printf("FILE open Error\n"); ## -Ev 옵션을 통해 여러번 grep 하는것을 파이프(|)로 작성할 수 있다. $ grep -n 'printf' fileio.c | grep -Ev 'chi|cho' 11: printf("FILE open Error\n"); 25: printf("FILE open Error\n");\\ grep -rl '#!.*python' | xargs sed -i '1s/python$/python3/' // 하위 디렉토리의 모든 파일에서 1행이 #!로 시작해서 python을 끝나는 파일을 찾아서 python을 python3로 변경 #!/usr/bin/env python # 원본 #!/usr/bin/env python3 # 변경 \\ ==== Gawk ==== df -ht ext4 Filesystem Size Used Avail Use% Mounted on /dev/root 40G 11G 27G 29% / /dev/sde1 173M 95M 65M 60% /boot /dev/sde2 19G 1.5G 16G 9% /mnt/debian /dev/sda1 1.8T 9.7G 1.7T 1% /mnt/1st-bay /dev/sdb1 1.8T 1.1G 1.7T 1% /mnt/2nd-bay /dev/sdc1 1.8T 28K 1.7T 1% /mnt/3rd-bay /dev/sdd1 1.8T 32K 1.7T 1% /mnt/4th-bay\\ # 읽어들인 NR 레코드(여기서는 Filesystem과 Size) 갯수가 2 이하일때는 awk에서 바로 출력하고 # 이후에는 출력결과를 sort를 거쳐서 출력 df -ht ext4 | awk 'NR<2{print $0;next}{print $0| "sort"}' Filesystem Size Used Avail Use% Mounted on /dev/root 40G 11G 27G 29% / /dev/sda1 1.8T 9.7G 1.7T 1% /mnt/1st-bay /dev/sdb1 1.8T 1.1G 1.7T 1% /mnt/2nd-bay /dev/sdc1 1.8T 28K 1.7T 1% /mnt/3rd-bay /dev/sdd1 1.8T 32K 1.7T 1% /mnt/4th-bay /dev/sde1 173M 95M 65M 60% /boot /dev/sde2 19G 1.5G 16G 9% /mnt/debian\\ 참고 # 1q로 한줄만 sed에서 처리하고 종료 나머지는 sort가 처리 df -ht ext4 | { sed -u 1q; sort; } Filesystem Size Used Avail Use% Mounted on /dev/root 40G 11G 27G 29% / /dev/sda1 1.8T 9.7G 1.7T 1% /mnt/1st-bay /dev/sdb1 1.8T 1.1G 1.7T 1% /mnt/2nd-bay /dev/sdc1 1.8T 28K 1.7T 1% /mnt/3rd-bay /dev/sdd1 1.8T 32K 1.7T 1% /mnt/4th-bay /dev/sde1 173M 95M 65M 60% /boot /dev/sde2 19G 1.5G 16G 9% /mnt/debian\\ ==== wget ==== # -r / --recursive : 디렉토리 대상 # -np / --no-parent : 상위 제외 # -R / --reject : 해당 파일 제외 # -P / --directory-prefix=PREFIX : PREFIX/.. 에 파일 저장 wget -r -np -R "index.html*" -P lfs/ https://ftp.osuosl.org/pub/lfs/lfs-packages/12.1/\\ ==== Firmware Blob Kernel config ==== echo CONFIG_EXTRA_FIRMWARE='" '$({ cd /lib/firmware; echo amd-ucode/*; echo amdgpu/re*; echo rtl_nic/*; echo regulatory*; })'"' >> .config make oldconfig