표준 스트림은 프로그램과 외부 환경 사이에서 데이터를 전송하는 통로입니다. 이 통로는 주로 키보드, 모니터, 파일 등을 통해 데이터를 입력받거나 출력합니다.
stdin, stdout, stderr는 표준 스트림 중에서 가장 많이 사용되는 세 가지입니다.
이러한 표준 스트림은 운영체제에서 제공하는 기능이며, 프로그래밍 언어에서도 지원하고 있습니다. 프로그래머는 이러한 표준 스트림을 이용하여 키보드나 파일로부터 입력을 받고, 모니터나 파일에 출력하는 등의 작업을 수행할 수 있습니다.
리눅스 리다이렉션(Redirection)은 표준 입출력을 다른 곳으로 보내거나 받아오는 방법입니다. 표준 입출력은 보통 터미널(콘솔)과 관련되어 있습니다. 즉, 터미널에서 입력한 명령어의 결과가 터미널로 출력되는 것입니다.
리다이렉션을 사용하면 표준 입출력을 다른 파일이나 프로세스로 보낼 수 있습니다. 이를 통해 파일의 내용을 다른 파일에 복사하거나, 명령어의 결과를 파일에 저장하거나, 다른 명령어에 입력으로 전달하는 등의 작업을 수행할 수 있습니다.
리다이렉션은 다음과 같은 기호를 사용합니다.
예를 들어, 다음과 같은 명령어를 실행하면 현재 디렉토리의 파일 목록을 파일에 저장합니다.
ls > file.txt
위 명령어에서 >
는 출력을 파일에 덮어쓰기하는 리다이렉션 기호입니다. ls
는 현재 디렉토리의 파일 목록을 출력하는 명령어이며, file.txt
는 출력을 저장할 파일 이름입니다.
만약 파일에 이어쓰기하고 싶다면 >>
를 사용합니다.
ls >> file.txt
위 명령어에서 >>
는 출력을 파일에 이어쓰기하는 리다이렉션 기호입니다.
입력을 파일에서 읽을 때는 <
를 사용합니다.
sort < file.txt
위 명령어에서 <
는 입력을 파일에서 읽는 리다이렉션 기호입니다. sort
는 파일의 내용을 정렬하는 명령어입니다.
출력을 다른 명령어의 입력으로 전달할 때는 |
를 사용합니다.
리눅스 파이프는 리눅스 명령어에서 사용되는 기호로, "|"로 표시됩니다. 파이프 기호는 두 개의 명령어를 연결하여 하나의 명령어의 출력을 다른 명령어의 입력으로 사용할 수 있도록 합니다.
파이프를 사용하여 명령어의 출력을 다른 명령어의 입력으로 보내면, 명령어를 연결하여 복잡한 작업을 수행할 수 있습니다. 예를 들어, 파일에서 문자열을 찾아서 출력하는 grep 명령어와 출력 결과를 한 줄씩 보여주는 less 명령어를 연결하여 파일 내용을 검색하면서 페이지 단위로 출력할 수 있습니다.
다음은 파이프를 사용하여 명령어를 연결하는 예시입니다.
ls | grep file
위 명령어에서 |
는 출력을 다른 명령어의 입력으로 전달하는 리다이렉션 기호입니다. ls
는 현재 디렉토리의 파일 목록을 출력하는 명령어이고, grep file
은 file
이라는 문자열이 포함된 파일 이름만 출력하는 명령어입니다.
ls -l | grep "file" | sort | less
위 명령어는 현재 디렉토리의 파일 목록(ls -l)에서 "file"이라는 문자열을 포함하는 파일을 찾아서(grep "file") 파일 이름을 알파벳 순서대로 정렬(sort)하고, 페이지 단위로 출력(less)합니다.
man ls
cat -n gatsby.txt
more (옵션) (파일이름)
less (옵션) (파일이름)
head (옵션) (파일이름)
tail (옵션) (파일이름)
예를 들어, example.log
파일의 마지막 20줄을 출력하려면 다음과 같이 입력합니다:
tail -n 20 example.log
f
옵션을 사용하여 파일의 변화를 실시간으로 볼 수 있습니다. 예를 들어, 다음 명령어는 example.log
파일의 변화를 실시간으로 출력합니다:tail -f example.log
이 명령어를 실행한 후, example.log
파일에 추가되는 새로운 로그가 실시간으로 출력됩니다. 종료하려면 Ctrl+C
를 누릅니다.
find (위치) (옵션) (검색할 내용)
find . -name "example.txt"
여기서 "."은 현재 위치를 나타내고, "-name"은 검색 기준으로 파일 이름을 사용하겠다는 것을 나타냅니다. "example.txt"는 검색할 파일 이름입니다.
또 다른 예로, 1일 전에 수정된 모든 파일을 찾으려면 다음과 같이 입력합니다:
find . -mtime -1
여기서 "-mtime"는 파일 수정 시간을 기준으로 검색하겠다는 것을 나타내며, "-1"은 현재 시간으로부터 1일 전에 수정된 파일을 찾겠다는 것을 의미합니다.
locate (옵션) (검색어)
$ sudo apt-get install mlocate
$ sudo updatedb
$ locate gatsby.txt # 파일 이름으로 검색하기
$ locate -n 10 *.txt # 검색할 파일 수 지정하여 찾기
$PATH
환경 변수에 등록된 디렉토리를 검색하여 해당 명령어가 위치한 경로를 찾습니다. 따라서, which
명령어는 $PATH
환경 변수에 등록된 경로에서만 실행 가능합니다.$ which python
/usr/bin/python
위 예시에서 /usr/bin/python
은 시스템에서 사용되는 파이썬 인터프리터가 설치된 경로입니다.
grep (옵션) (패턴) (파일이름)
예시 1: 현재 디렉토리에서 파일 내용 검색
grep "Hello" *
현재 디렉토리에서 모든 파일의 내용을 검색하여 "Hello"라는 문자열을 찾습니다.
예시 2: 특정 파일에서 문자열 검색
grep "world" myfile.txt
myfile.txt 파일에서 "world"라는 문자열을 찾습니다.
예시 3: 대소문자 구분 없이 문자열 검색
grep -i "apple" myfile.txt
myfile.txt 파일에서 "apple"이라는 문자열을 찾을 때 대소문자를 구분하지 않습니다.
예시 4: 정규 표현식을 사용한 문자열 검색
grep "^[0-9]" myfile.txt
myfile.txt 파일에서 숫자로 시작하는 문자열을 찾습니다.
예시 5: 검색 결과에 파일 이름 표시
grep -H "linux" *
현재 디렉토리에서 "linux"라는 문자열을 찾을 때 파일 이름을 함께 표시합니다.