1. 검색 명령어
# grep
: 파일 내에서 특정 패턴을 검색
# grep -i [패턴] [파일]
: 대소문자 구분 없이 검색
# grep -E `(패턴1|패턴2|...)`
: 동시에 여러개의 패턴을 검색
# grep -F [패턴] [파일]
: 특수문자를 포함한 검색
# grep -v [패턴]
: 패턴에 해당하는 줄은 제외하고 검색
# find
: inode의 속성 정보를 기반으로 현재 디렉토리 기준 모든 하위 디렉토리에서 검색
검색된 정보를 기반으로 2차 실행을 하는 데 주로 쓰인다.
# find . -mtime 3 -type f
: 수정한 날짜가 3일 전인 파일 검색
💡 50만개의 파일을 지우는 경우
# find [디렉토리] -type f -exec rm -fv {} \; 로 find에서 출력된 내용을 바탕으로 rm 명령어를 수행한다.
-exec 옵션에서 {}(중괄호)는 버퍼의 역할을 하며 find 명령어의 수행 결과를 순차적으로 입력으로 받는 역할을 한다.
정확히 -exec rm -rf {} ; 까지가 문법인데 ;(세미콜론)은 CMD 구분자라 역슬래시(\)로 무시하겠다고 지정해줘야 정상적으로 동작한다.
2. 파일의 시간 정보
1) Access
- 접근 시간
- 파일 Read시 업데이트
- mount 옵션으로 noatime을 설정해주면 고정됨
2) Modify
- 수정 시간
- # ls -l 에서 보는 정보로 데이터의 변경이 일어났을 때 업데이트
3) Change
- 변경 시간
- inode를 변경했을 때 업데이트
- ex) 내용이 바뀌었을 때나 권한이 바뀌었을 때 등
4) Birth
- 파일의 최초 생성 시간
2. Bash Shell
쉘은 사용자와 커널 사이에서 명령어를 해석하고 실행하는 인터페이스이다. 단순한 명령어 입력 도구를 넘어서 프로그래밍 언어처럼 조건문, 반복문, 함수, 변수 등을 사용할 수 있는 환경을 제공한다.
Bash는 리눅스에서 가장 널리 쓰이는 Shell로 다양한 기능과 확장성을 제공한다.
즉 Shell은 개념이고, Bash는 Shell의 한 종류이다.
1) 리다이렉션
입력과 출력을 원하는 곳으로 방향을 바꾸는 기능이다.
💡 파일 디스크립터프로세스가 파일을 열면 커널은 해당 파일에 대한 ID를 할당해주는데 이것을 파일 디스크립터(FD)라고 한다.
기본 파일 디스크립터 3가지
0 : 표준 입력, 지정하지 않으면 키보드 입력
1 : 표준 출력, 지정하지 않으면 터미널 출력
2 : 표준 에러, 지정하지 않으면 터미널 에러 출력
💡 에러는 버퍼가 없고, 출력은 라인 버퍼를 사용하기 때문에 같이 사용했을 경우 표준 에러가 먼저 나온다.
라인버퍼는 출력 버퍼링 방식 중 하나로 출력을 할 때 개행 문자(\n)가 나오면 버퍼를 비워서 출력하는 방식이다.
# wall < [파일]
: 표준입력으로 파일 내용을 전체 메시지로 보내기
# ls -l > list
: 표준 출력 리다이렉션을 먼저 수행하여 list 파일을 만든 다음에 ls 출력 내용을 list에 덮어씌움
# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] > [파일]
: 에러만 터미널에 출력되고, 정상 결과는 파일에 저장
# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] 2> [파일]
: 정상 결과만 터미널에 출력되고, 에러만 파일에 저장
# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] > [파일1] 2> [파일2]
: 정상 결과는 파일1에, 에러는 파일2에 저장
# ls -l [존재하는 디렉토리] [존재하지 않는 디렉토리] > [파일] 2>&1
: 표준 에러를 표준 출력 스트림으로 변경하여 한 파일에 정상 결과와 에러 둘다 저장
# ./script.sh > file.log 2>&1
: (실무)script.sh 로그 파일 생성
2) 파이프
파이프(|)는 앞에서 실행된 명령어의 표준 출력을 뒤의 명령어의 표준 입력으로 전달하는 기능이다. 명령어를 연결해서 마치 데이터를 흐렬 보내듯 처리할 수 있게 해준다.
❗️파이프 사용시 주의할 점
오직 표준 출력만 다음 명령어로 전달되며, 표준 에러는 파이프를 통해 전달되지 않는다.
# script -a /dev/null | tee /dev/pts/1 | tee /dev/pts/2
: 현재 터미널에서 입력한 내용과 출력 결과를 여러개의 터미널(pts)에 동시에 출력
3) 쉘 옵션/설정 변수
쉘의 동작을 제어하거나 사용자 환경을 설정하는 데 사용되는 변수를 의미한다. 대부분 Bash 내부에 미리 정의되어 있고 사용자가 직접 값을 변경하거나 읽어서 쉘의 동작이나 환경을 설정할 수 있다.
# set -o ignoreeof
: 로그아웃 방지 기능(ignoreeof)을 켜면 Ctrl+D 키로 쉘 프롬프트가 바로 종료되지 않도록 막아줌
10번 정도 Ctrl+D를 연속 입력하면 쉘이 종료되긴 한다.
# set -o noclobber
: 덮어쓰기 방지 기능(noclobber)을 켜면 리다이렉션(>)을 사용할 때 기존 파일이 실수로 덮어써지는 것을 방지
4) 변수
4-1) 지역 변수
현재 사용중인 쉘에만 적용되는 변수이다. 서브 쉘에서 지역 변수 값을 확인하려 할 경우 값이 나타나지 않는다.
# VAR=5
: 지역변수에 5를 저장
4-2) 환경 변수
현재 쉘과 서브 쉘에 모두 적용되는 변수이다. 상위의 쉘에는 적용되지 않는다.
# export VAR
: 환경 변수로 설정
💡 env와 set의 차이점
- env : 환경 변수만 출력
- set : 모든 변수(지역 + 환경)에 대해 출력
4-3) 특수 변수
# echo $$
: 현재 쉘의 PID 출력
# echo $?
: 가장 최근에 실행한 명령어의 종료 상태 코드(return code)를 출력
# echo $!
: 가장 최근에 백그라운드로 실행한 프로세스의 PID 출력
# echo $n
: 쉘 스크립트나 함수에서 전달받은 인자 중 n번째에 위치한 인자의 값 출력
✍️ 하루 회고
리눅스 명령어를 단순히 쓰는 데 그치지 않고, 실무에서 어떻게 응용되는지까지 함께 배울 수 있어서 더욱 유익했다.
주말 동안 그동안 배운 내용을 복습하며 뒤늦게 TIL을 정리하게 되었다.
내일부터는 수업이 끝난 당일에 바로 TIL을 작성해서 기억이 생생할 때 기록을 남기는 습관을 들이고자 한다.
배운 모든 내용을 TIL에 적기보다는 수업을 들으면서 기록해두고 싶은 부분만 키워드로 메모해놓고 그걸 바탕으로 정리하는 방식이 좀 더 효율적일 것 같다.
'TIL' 카테고리의 다른 글
[에스넷시스템 부트캠프] TIL Day7 - 네트워크 2 (1) | 2025.05.28 |
---|---|
[에스넷시스템 부트캠프] TIL Day6 - 메타캐릭터, 히스토리, 환경파일, 네트워크 1 (0) | 2025.05.27 |
[에스넷시스템 부트캠프] TIL Day4 - 파일 퍼미션, vi 편집기 (0) | 2025.05.25 |
[에스넷시스템 부트캠프] TIL Day3 - 디렉토리와 파일 관리 2, 파일 (0) | 2025.05.25 |
[에스넷시스템 부트캠프] TIL Day2 - 리눅스 명령어 실행의 3대 요소, 디렉토리와 파일 관리 1 (0) | 2025.05.25 |