개발도구/기타

[리눅스] 명령어 정리 - LFS

쓴웃음 2021. 4. 28. 10:50

개요

리눅스 시스템에 대한 이해를 높일 수 있는 프로젝트인 Linux From Scratch - Version 10.1에서 사용된 많은 리눅스 명령어 및 프로그램을 정리하였습니다.

※ 특정 명령어들은 아직 이해되지 않아 정리 못하였습니다.

명령어 및 프로그램

blkid

블록디바이스의 속성을 획득하는 데 사용합니다.

특정 장치의 UUID (universally unique identifier)를 획득할 경우 다음과 같은 옵션을 사용할 수 있습니다.

# blkid -s <tag> -o <format> <dev>
$ sudo blkid -s UUID -o value /dev/sdb3

-s <tag> : show specified tags(s)
-o <foramt> : 출력형식을 지정하는 데 사용합니다.

tee

표준 입력을 받아들여, 표준출력과 파일 양측으로 동시에 출력하는 데 사용하는 명령어입니다.

# tee [OPTION] ... [FILE]
$ echo `hello` | tee -a temp.txt

-a : 파일을 덮어쓰지 않고, 덧붙입니다.

wget

웹서버에서 콘텐츠를 가져오는 리눅스 명령어입니다.

# wget [OPTIONS] ... [URL] ...
$ wget --input-file=wget-list --continue --directory-prefix=$LFS/sources

-i <FILE> : <FILE>에 기술되어 있는 URL에서 다운로드합니다.
-c : resume getting a partially-downloaded file
-P <PREFIX> : <PREFIX> 폴더에 파일을 저장합니다.

참고

grep

텍스트를 검색하여 정규표현식과 일치하는 라인을 출력하는 명령어입니다.

$ grep -oP "([^\/]+$)" wget-list | sort -f > manifest

-o :
-P : Perl 호환 정규식(PCRE)을 사용한다.
-nrI :

wget-list 파일에서 패턴()과 일치하는 라인을 검색, 해당 검색 결과를 sort 한 후 manifest 파일로 저장

참고 : 특정 텍스트가 포함된 모든 파일 출력하기

$ grep -rnw '/path/to/somewhere/' -e 'pattern'

-r : Recursive
-n : 라인 번호
-w : 전체 단어
-l : (소문자 L) 파일 이름만 필요한 경우 사용
-e : 검색할 패턴

효율적인 검색을 위해 다음과 같이 --exclude, --include , --excluede-dir 플래그를 사용할 수도 있습니다.

  • .c.h 확장자의 파일만 검색합니다.
$ grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
  • .o 확장자의 파일은 검색에서 제외합니다.
$ grep --exclude=\*.o -rnw '/path/to/somewhere/' -e "pattern"

더 상세한 내용은 man grep을 참고합니다.

출처 : How do I find all files containing specific text on Linux? - Stackoverflow.com

sort

입력을 옵션에 따라 텍스트 파일에 줄단위로 정렬하는 명령어입니다.

# sort [OPTION] ... [FILE]
$ ls /mnt/lfs/sources | sort -f > downloaded

-f : 대소문자 구별 없이 정렬합니다.

diff

줄 단위로 두 개의 파일을 비교하는 명령어입니다.

# diff [OPTION] ... FILES
$ diff manifest downloaded

ln

파일의 링크를 생성하는 명령어입니다.

# ln [OPTION] ... TARGET ... DIRECTORY
$ sudo ln -sv $LFS/tools /

-s : 심볼릭 링크를 생성합니다.
-v : 상세(verbose)

심볼릭링크 : 윈도우의 바로가기와 같은 개념
하드 링크 : 원본의 복제본 (mirror backup)

groupadd

그룹을 생성합니다.

# groupadd [options] group

useradd

신규 사용자를 생성하거나, 신규 사용자의 기본정보를 갱신합니다.

# useradd [OPTIONS] LOGIN
$ sudo useradd -s /bin/bash -g lfs -m -k /dev/null lfs

-s <shell> : 사용자가 사용할 쉘을 지정합니다.
-g <group> : 신규 사용자의 초기 그룹을 지정합니다.
-m : 홈 디렉터리를 /home/username으로 생성합니다.
-k <SKEL_DIR> : -m 옵션과 함께 사용합니다. 홈 디렉터리에 복사할 파일 및 디렉터리를 지정합니다.

passwd

사용자의 암호를 변경합니다.

# passwd [OPTION] [USER]
$ sudo passwd lfs # set password

chown

파일의 소유자와 그룹을 변경합니다.

$ sudo chown -v lfs $LFS/tools
$ sudo chown -v lfs $LFS/sources

su

명령어를 다른 사용자 및 그룹의 권한으로 실행합니다.

# su [OPTIONS] [-] [USER [ARGMENT...]]
$ su - lfs #switch to lfs login shellstac

- : 로그인 쉘을 시작합니다.

cat

tar

압축 유틸리티입니다.

# tar [OPTIONS] [ARCHIVE]
$ tar -xf binutils-2.36.1.tar.xz && cd binutils-2.36.1

-x : 아카이브에서 파일을 추출 (extract) 합니다.
-f : 아카이브 파일의 이름을 지정합니다.

time

프로그램을 실행하고 시스템 자원 사용을 측정합니다.

time { ../configure --prefix=$LFS/tools \  
             --with-sysroot=$LFS \  
             --target=$LFS_TGT \  
             --disable-nls \  
             --disable-werror && \  
             make -j$(nproc) && \  
             case $(uname -m) in  
              x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;  
esac && \  
make install; }

configure

여러분의 시스템에서 소프트웨어를 빌드하는데 필요한 것(컴파일러, 라이브러리 등)들을 확인하여 makefile을 만들어주는 스크립트입니다. 많은 응용프로그램 소스코드에 함께 포함되어 있습니다.

../configure

make

makefile 에 기술되어 있는 절차에 따라 소프트웨어를 빌드하는 프로그램입니다.

$ make
$ make DESTDIR=$LFS install

-j : 빌드 작성 시 사용할 cpu core의 개수입니다.

DESTDIR

sed

에디터

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
 ;;
esac

-e <script> :
-i.orig :

pushd

디렉터리경로를 스택에 보관(pushd)하고 인출(popd)하는 리눅스 명령어입니다.

patch

$ patch -Np1 -i

-Np1 :
-i :

install

파일을 복사하고 속성(attirbutes)을 설정합니다.

# install [OPTION] ... 
install -dv -m 0750 /root

-d : 모든 인자를 디렉토리 명으로 취급합니다.
-m : 권한을 설정합니다.
-v : 상세 모드(verbose)

cut

touch

파일의 접근, 수정 타임스탬프를 현재로 변경합니다. (빈 파일을 만드는데 주로 사용됩니다.)

touch /var/log/{btmp,lastlog,faillog,wtmp}

strip

expect

install

이상 LFS 프로젝트 수행 시 사용했던 명령어였습니다.

추가

소프트웨어 개발 중 필요에 의해 학습하게 된 명령에 대한 메모입니다.

history

$ history | grep ''

ps

실행 중인 프로세스의 thread 정보를 확인하려면 ps -T를 사용합니다.