인프런 '생활코딩-리눅스' 강의를 듣고 함께 스터디했다.
섹션 2. IO Redirection
섹션 3. 쉘과 쉘 스크립트
섹션 4. 디렉토리 구조와 파일찾는 법
섹션 5. 프로세스와 실행
섹션 2. IO Redirection
output
- IO Redirection : 화면에 나온 출력 값을 다른 파일과 같은 곳으로 돌려 저장하는 것
- > 리다이렉션 기호 : 예시로 ls -l > result.txt를 해주면, ls -l의 결과 값이 화면에 출력되지 않고 result.txt에 저장된다.
- 유닉스 계열의 프로그램에서 프로세스가 출력하는 출력 값은 Standard Output과 Standard Error 두 가지로 나뉜다.
- Standard Output의 결과를 리다이렉션 해주고 싶으면 >를 이용해주면 된다. 하지만 Standard Error에서 >를 쓰면 오류가 발생하게 된다.
- 그 이유는 >은 1>을 의미하는 것으로 1이 생략된 상태를 뜻하기 때문이다. 이때 1은 Standard Output을 의미한다. 따라서 Standard Error를 리다이렉션 해주고 싶으면, Standard Error를 의미하는 2를 > 앞에 붙여 2>의 형태로 리다이렉션 시켜주면 된다.
input
- cat : cat 뒤에 있는 파일을 출력해주는 명령어로, 여러 개의 정보를 결합해주는 역할도 갖고 있다.
- cat 뒤에 아무런 파일도 적지 않으면 cat은 대기상태로 들어가게 되고 사용자가 입력하는 값을 똑같이 화면에 출력해준다.
- cat < x.txt 와 cat x.txt 의 차이 : 왼쪽은 x.txt 안에 있는 내용을 입력값으로 받는 Standard Input이다. 오른쪽은 cat이라는 프로그램의 인자로 x.txt를 받은 것이다.
- head : 파일의 앞부분만 출력해준다.
- head -n1 : 파일의 한 줄만 출력해준다.
append
- 원래 있던 파일에 내용을 이어서 적고 싶다면 >> 를 이용해 리다이렉션 시켜주면 된다.
섹션 3. 쉘과 쉘 스크립트
Shell1 - intro
shell과 kernel의 차이
shell : 사용자의 명령을 받아 kernel이 이해할 수 있는 형태로 해석해 kernel에게 전달한다.
kernel : shell이 사용자의 명령을 해석한 데이터를 주면 이를 하드웨어가 알 수 있는 형태로 전달한다.
Shell2 - bash vs zsh
- echo : 명령어 뒤에 들어온 문자를 화면에 출력해주는 역할을 한다.
- echo $0 : 현재 쉘이 bash인지, zsh인지 알려준다.
비교 | bash | zsh |
탑재 | 기본 탑재 | 따로 설치 |
숨긴 디렉토리 확인 여부 | O | X |
다른 디렉토리로 가고 싶을 때 | 절대 경로를 통해 이동 | 경로로 쓰일 디렉토리들의 앞 알파벳만 따와 경로를 작성한 후, tab버튼을 눌러주면 경로가 자동 완성됨. |
현재 a 디렉토리에 있지만, 전에 있던 b 디렉토리로 가고 싶을 때 | 절대 경로를 통해 이동 | cd a b |
Shell3, 4 - Shell Script
Shell script를 이용하면 여러 자동화된 처리를 할 수 있다.
Q. log 파일을 한 파일에 정리하는 것을 자동화 하려면?
A. nano backup //나노 편집기를 열어서 백업이라는 스크립트를 만들 것이다.
나노를 통해 만든 스크립트 |
#! /bin/bash //아래에 적히는 코드들은 /bin/bash를 통해 해석되어야 한다. if ! [ d bak ] then; //현재 디렉토리 안에 bak이라는 디렉토리가 없다면 mkdir bak //bak 디렉토리를 만들어라 fi //if를 거꾸로 쓰며, if문이 끝났음을 의미 cp *.log bak //모든 이름의 로그 파일을 bak에 저장해라 |
섹션 4. 디렉토리 구조와 파일 찾는 법
디렉토리 구조
https://www.thegeekstuff.com/2010/09/linux-file-system-structure/
위의 링크를 통해 디렉토리 구조와 각 디렉토리들이 무엇을 의미하는지 알 수 있다.
파일 찾는 법 - locate와 find
파일은 데이터를 보관하는 것과 명령어를 보관하는 (실행)파일, 두 가지로 나뉜다.
locate :
어떤 파일의 위치를 찾는 명령어로, mlocate라는 자신이 사용하는 데이터베이스가 있어, 그곳에서 파일을 찾아준다.
파일을 찾는 속도가 빠르며, mlocate 데이터베이스에서 주기적으로 파일을 저장하기 때문에, 저장된 형태의 파일을 출력하는 특징을 갖고 있다.
find :
어떤 파일의 위치를 찾는 명령어로, 디렉토리에서 파일을 찾아낸다.
locate 비해 속도가 느리지만, 파일의 현재 상태를 갖고 올 수 있다는 특징이 있다.
find 명령어 예문 | |
find / -name *.log | 상위 디렉토리부터 log라는 확장자의 파일을 찾아라 |
find . -name *.log | 하위 디렉토리부터 log라는 확장자의 파일을 찾아라 |
find ~ -name *.log | 홈 디렉토리부터 log라는 확장자의 파일을 찾아라 |
find -type f -exec rm -f {} | 검색한 파일을 삭제해라 |
파일 찾는 법 - whereis와 $PATH
- whereis : 실행파일, 소스, 메뉴얼 파일을 $PATH와 $MANPATH에서 찾아준다.
- $PATH : PATH에 담겨진 디렉토리를 검색해 명령어가 담긴 실행 파일이 존재하는지 찾고 있다면, 다른 디렉토리에 있어도 실행하고자 하는 명령어를 실행할 수 있게 도와준다.
- $PATH는 사용자가 만든 변수가 아닌 환경 변수이다.
- $PATH는 수정가능 하다.
섹션 5. 프로세스와 실행
컴퓨터와 구조
- SSD, HDD = Storage, 저장공간 : 가격이 낮고, 용량이 크며, 속도가 느리다.
- RAM = Memory : 가격이 높고, 용량이 작다.
- CPU = Processor : 속도가 빠르다.
프로세스와 프로세서는 다르다.
- Storage 안에 존재하는 프로그램이 실행되어 Memory에 올라가게 되면 CPU가 이를 읽으며 동작한다. 이때 CPU에 의해 처리되고 있는, 즉 프로그램이 실행될 때, 이를 프로세스라고 한다.
- 프로세스를 처리하는 것을 프로세서라고 한다.
프로세스와 모니터링
- ps, sudo top, sudo htop : 프로세스 리스트를 보여준다.
- ps aux : 백그라운드에서 현재 실행되고 있는 프로세스를 다 보여준다.
Q. apache 라는 이름을 가진 프로세스를 찾고 싶다.
A. ps aux | grep apache //ps aux의 결과 중 apache라는 이름을 가진 것만 출력해라.
백그라운드 실행
- jobs : 작업이 중지된 상태, 백그라운드로 진행 중인 작업 상태, 변경되었지만 보고되지 않은 상태 등을 표시한다.
- nano를 실행하고 종료하면, nano는 백그라운드로 들어간다. 이후 vim을 열어 종료하면 vim도 백그라운드에 들어가게 된다. 이 상황에서 jobs를 입력하면 아래의 결과가 나오게 된다.
[1] - Stopped nano
[2] + Stopped vim
- 이 상황에서 fg를 치게 되면 +기호가 있는 vim이 먼저 포그라운드에 올라오게 된다. -는 두 번째로 포그라운드에 올라갈 수 있음을 의미한다.
Q. 위의 결과에서 [2] 말고 바로 [1]을 포그라운드에 올리려면?
A. fg %1 를 입력해주면 된다. fg %(실행시키고 싶은 프로그램의 jobs 번호)를 입력해주면 되는 것이다.
Q. 실행이 긴 명령어를 입력했는데, 실행 시간이 너무 길어 백그라운드에 보내놓고 싶다면?
A. 실행한 명령어 뒤에 & 를 입력해 주면 된다. 그러면 실행 중이던 명령어가 백그라운드에 들어가 실행되게 된다.
- 백그라운드에서 실행되고 있는 명령은 jobs를 쳤을 때 Running의 상태를 띠게 된다.
- 백그라운드로 옮겨진 명령어가 실행을 마치게 되면 사용자의 화면에 Exit1을 출력해 실행이 끝났음을 알린다.
Daemon
- 데몬은 항상 실행되는 특징을 갖고 있다.
- 소위 서버라고 불리는 프로그램들이 데몬에 해당한다.
- 데몬 프로그램들은 /etc/init.d/ 디렉토리에 위치하게 된다.
- 데몬을 끄거나 키고 싶을 때는 service를 이용하면 된다.
sudo service 데몬 프로그램 stop
sudo service 데몬 프로그램 start
Cron
- 정기적으로 명령을 실행시켜주는 도구(소프트웨어)이다.
- crontab -e : 정기적으로 하고자 하는 일을 정의할 수 있게 도와준다.
- 정의할 때 m h dom mon dow command의 형식으로 한다.
- m은 '몇 분마다 실행할 것이냐', h는 '몇 시간마다 실행할 것이냐', dom은 며칠, mon은 몇 달, dow는 요일에 대해 작성하고, 정기적으로 실행할 명령을 command 영역에 적으면 된다.
- 만든 파일이 정기적으로 잘 실행되고 있나 확인하고 싶다면, tail을 이용하면 된다.
- tail 파일이름 : 파일에 제일 뒤쪽에 있는 텍스트를 출력해준다.
- tail -f 파일이름 : 파일을 tail이 감시하고 있다가 파일 뒤에 새로운 텍스트가 추가되면 그것을 화면에 출력해준다.
- cron은 메일 서버(시스템)과 같은 곳에서 쓰이고 있다.
쉘을 시작할 때 실행
- 만약 쉘이 bash라면...
- bashrc 라는 파일은 bash를 실행시켰을 때 자동으로 실행되는 파일이다.
- 쉘을 시작했을 때 같이 시작했으면 좋겠는 명령어가 있다면 bashrc 파일에 넣으면 된다.
참고.
alias : 별명을 설정해주는 명령어
alias l = ‘ls -al’ 를 입력하면, l을 입력했을 때 ls -al이 실행된다.
alias .. = ‘cd..’ 를 입력하면, ..을 입력했을 때 cd..이 실행다.
'3. Pwnable (포너블) > 2) 개념 정리' 카테고리의 다른 글
[24.05.04] 4주차 활동 - 리눅스 기초, 포너블 기초 (0) | 2024.05.05 |
---|---|
[24.03.30] 3주차 활동 - 리눅스 기초 (0) | 2024.04.02 |
[2024.03.16] 1주차 활동 - 리눅스 기초 (1) | 2024.03.17 |
[2023.05.20] '드림핵-시스템 해킹' 강의 수강 (0) | 2023.05.26 |
[2023.05.06] ‘생활코딩-Linux’ 강의 수강 (0) | 2023.05.10 |