Linux Commands
대문자 소문자 차이
curl -v https://google.com: 로그 상세히curl -X POST https://api.com: HTTP 메소드 지정
- 소문자 옵션: 대부분의 Unix/Linux 명령어에서 소문자 옵션은 일반적으로 기능이나 동작을 지정하는 데 사용됩니다. 예를 들어:
d(데이터 전송)v(verbose 모드)h(도움말)
- 대문자 옵션: 대문자 옵션은 특정한 기능이나 구체적인 동작을 지정하는 데 사용됩니다. 예를 들어:
X(HTTP 요청 메서드 지정)H(HTTP 헤더 지정)A(User-Agent 설정)
Redirection 명령어
기본 리다이렉션#
<: 파일 내용을 stdin으로 입력.wc -l < file.txt: file.txt 줄 수 계산
>: stdout을 파일로 덮어쓰기 저장.ls > files.txt: 파일 목록 저장
>>: stdout을 파일 끝에 append 저장.echo hello >> log.txt: 로그 뒤에 추가
|: stdout을 다른 프로세스 stdin으로 전달.ls | grep txt: txt 파일만 필터링
문자열 / 블록 입력#
<<<: 문자열 자체를 stdin으로 전달.wc -w <<< "hello world": 단어 수 계산
<<: 여러 줄 문자열을 stdin으로 전달.cat << EOF: 여러 줄 입력 전달
stderr 리다이렉션#
2>: stderr를 파일로 저장. 덮어씌우기(overwrite)python app.py 2> error.log: 에러 로그 저장
2>>: stderr append 저장. 뒤에 추가(append)python app.py 2>> error.log: 에러 로그 뒤에 추가
2>&1: stderr를 stdout 방향으로 합치기.python app.py > all.log 2>&1: 일반 출력 + 에러 같이 저장
stdout + stderr 동시 처리#
&>: stdout + stderr 둘 다 파일 저장.python app.py &> all.log: 전체 로그 저장
|&: stdout + stderr 둘 다 pipe 전달.python app.py |& grep ERROR: 출력/에러 모두 grep 처리
출력 버리기#
/dev/null: 출력 버리는 특수 파일.ls > /dev/null: 출력 숨김
/dev/null + stderr: 출력 + 에러 둘 다 버리기.command > /dev/null 2>&1: 모든 출력 숨김
파일 디스크립터(fd)#
<는 0이고, >는 1인데 대부분 사실상 생략, 2는 에러만 따로 뽑는 용도
0: stdin fd.0< file.txt: stdin 입력 지정
1: stdout fd.1> out.txt: stdout 저장> out.txt: 위아래 동일함. 사실 1이 생략된거임.
2: stderr fd.2> err.txt: stderr 저장
텍스트 파일 생성 :
touch,echo,vitouch: 파일 생성touch test.txttouch a.txt b.txt c.txt
echo: 내용 작성echo "hello" > test.txt
vi: 편집기 생성vi test.txt
cd [destination]: 디렉토리 이동cd ~: 홈 디렉토리cd ..: 상위 디렉토리cd -: 이전 디렉토리rm [파일명]: 파일 하나 삭제rmdir [폴더명]: 빈 폴더 삭제rm -r [파일명]: 파일 안의 내용물도 삭제cp [원본] [대상경로]: 복사cp -r project backup: 디렉토리 및 내용 복사
ss -tplan: -t, TCP 소켓만, -p, 프로세스 정보 표시, -l, LISTEN 상태만, -a, 전체 소켓 표시, -n, 이름 해석 없이 숫자로 출력systemctl start/stop: 서비스 시작/중지. systemd에서 서비스 생명주기 + 부팅 설정 관리하는 도구- systemd = 리눅스 부팅 이후 “모든 서비스 관리하는 관리자 프로그램”
journalctl: 위는 제어, 이건 로그 확인용. systemd 시스템에서 로그를 조회하고 관리하기 위한 도구top: 시스템 프로세스 정보free: 시스템 메모리 사용량 확인dmesg: Linux 커널 메시지 버퍼에 저장된 메시지를 확인할 수 있는 명령어. 커널 확인용.dmesg | grep -i error: HW 에러 확인
echo [내용] > [파일명]: 파일에 텍스트 작성(덮어쓰기)echo [내용] >> [파일명]: 파일에 텍스트 작성(이어붙이기)
cat [파일명]: 파일 내용 출력less [파일명]: 파일 내용을 페이지 단위로 보기head [파일명]: 파일의 시작 부분 보기tail [파일명]: 파일의 끝 부분 보기rsync: 두 디렉토리/서버 간 파일 차이만 효율적으로 동기화하는 파일 복사 도구- A파일을 B폴더에 rsync → 처음에는 A그대로 복사됨. =C파일
- A파일 살짝 수정후, B폴더에 rsync → C파일에서, 바뀐 부분만 수정됨.
신입 or Jr 엔지니어 면접을 위한 리눅스 명령어 top 10
1. Server를 어떻게 접속하는가? 사용하는 도구나 방법은?#
ssh : 서버에 연결하는 명령어. 원리와 key를 확인하는 것 등 알아보기
sudo -i : root 사용자로 로그인하는 명령어
2,3. IP를 확인하는 명령어는? 자신의 Public IP는 어떻게 확인하는가? 웹사이트가 잘 동작하는지 check할 때 사용하는 명령어는? Curl은 언제 사용하는가?#
curl [OPTIONS] [URL] : Client Url. 클라에서 url을 사용해서 서버와 데이터를 송수신하는 명령어 툴
curl ifconfig.co: 자신의 Public IP를 확인하는 명령어결국 데이터는 최종적으로 내 private IP에 도착하지만, 들어오거나 나갈 때 Public IP(ISP)를 경유하게 되어있다.
cafe같은 데서 접속시, iptime과 같은 공유기의 웹페이지로 이동된다.
curl -v: verbose mode. 요청 및 응답의 상세한 정보를 터미널에 출력.curl -X: HTTP 요청 메서드를 명시적으로 지정하는 옵션. defaultcurlGET,-X으로 변경 可# 기본 GET 요청 curl -X GET https://jsonplaceholder.typicode.com/posts/1# POST 요청 - JSON 데이터 전송 curl -X POST https://jsonplaceholder.typicode.com/posts \ -H "Content-Type: application/json" \ -d '{"title": "foo", "body": "bar", "userId": 1}'# POST 요청 - JSON 데이터 전송, -d option curl -X POST https://example.com -d "name=John&age=30"
4. Domain의 IP를 조회하는 명령어는?#
nslookup : domain의 ip를 조회하는 명령어
+root folder에 위치한, vim /etc/host → hosts 파일에서 ip주소와 호스트 이름의 매핑 정보 확인 可
5. 웹서버 혹은 DB 같은 서버들을 확인하는 방법은? ping, telnet, nc 차이는?#
ping : ICMP Protocol로 동작. 서버가 살아있는지만 확인 可
ping 8.8.8.8 or 1.1.1.1 : 인터넷 연결 확인 목적. 구글의 DNS 서버(8.8.8.8). ping을 날리면 ICMP 요청 패킷이 전달되고 구글 DNS 서버로부터 ICMP 응답 패킷을 받게 된다.
telnet : 로컬 영역이나 인터넷에 있는 원격 시스템의 가상 터미널(의 텍스트 기반 연결)을 제공하는 프로토콜. 주로 원격 로그인 및 원격 명령 실행에 사용. 보안상의 이유로 HTTPS, SSH 등으로 대체되는 경우가 多. TCP를 씀.
telnet [호스트명] [포트] ex) telnet example.com 80
yum install telnet: 기본적으로 없는 경우가 많음. 설치후 사용가능.
nc : 네트워크 관련 작업을 수행할 수 있는 다목적 도구입니다. 포트 스캐닝, 데이터 전송, 원격 쉘 생성 등 다양한 용도로 사용. TCP 또는 UDP 프로토콜을 사용하여 연결을 설정
- 지정된 포트에서 데이터를 수신하고, 이를 클라이언트에게 전달.
- 기본적으로 데이터 스트림을 읽고 쓰는 데 사용할 수 있어, 파일 전송이나 원격 커맨드 실행에도 유용.
- 다양한 네트워크 작업을 스크립트에 통합하기 쉬운 유틸리티.
6. 내 서버가 잘 떠있는지, 현재 DB Connection 등을 확인하는 명령어는?#
netstat : netstat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구 → ip addr
ex) Tomcat webserver를 download해 띄운 후, 확인하면 8080 port에서 확인 가능.
- netstat options
- l (listen) : 연결 가능한 상태
- n (number port) : 포트 넘버
- t (tcp) : tcp
- u (udp) : udp
- p : 프로그램 이름 / PID
- a : 모두
- i : 이더넷 카드별 정상/에러/드랍 송수신 패킷 수 확인
- r : 라우팅 테이블
- s : 네트워크 통계
netstat -lntp : 간략화된 열람
netstat -an | grep [port 번호] : 특정 port로 연결된 connection 확인
7. 특정 프로세스를 확인하는 명령어는? PID 등 확인#
ps -ef, ps aux : 어떠한 프로그램이 잘 떠있는지 확인하는 용도. tomcat이 잘 떠있나.
ex) ps -ef | grep “tomcat”
8. CPU, Memory, Disk 등 시스템 정보 등을 확인하는 명령어는?#
top
sar 1 : 1초마다 조회
free -m : 메모리 사용중인 공간, 여유 공간 확인
df -h : GB 형태로 메모리 확인 가능
9. 서비스들은 어떻게 관리되고, 그와 관련된 명령어는?#
systemd : 일부 리눅스 배포판에서 유닉스 시스템 V나 BSD init 시스템 대신 사용자 공간을 부트스트래핑하고 최종적으로 모든 프로세스들을 관리하는 init 시스템이다. systemd라는 이름 뒤에 추가된 d는 유닉스에서의 데몬(daemon)을 나타낸다.
systemd의 내용은 yum, apt-get install을 사용하면 자동으로 작성된다. custom하려면 알아야함.
- init.d : 시스템 부팅시 실행할 데몬을 설정
- upstart : 시스템에서 발생하는 이벤트에 반응하여 서비스를 시작하거나 중지
⇒ 현대의 Linux에서는 systemd로 통합되었다.
service : 서비스(데몬)를 관리하는 데 사용되는 명령
service tomcat status, start, kill
10. Linux 파일 권한 체계를 이해하는가? chmod, chown#
chmod, chown : 파일의 권한, 소유자 변경 명령어
ex) yum으로 자동 설치한 tomcat만 봐도, default 사용자가 root가 아닌 tomcat으로 되어 있다.
11. 그 외에도 많은 명령어가 존재한다.#
리눅스 부팅 프로세스(리눅스 로그인 쉘 초기화 순서)
리눅스에서 사용자가 로그인할 때 실행되는 쉘 초기화 파일의 실행 순서는 기본적으로 다음과 같습니다. 각 파일은 로그인 쉘과 비로그인 쉘에 따라 다르게 실행된다.
- 로그인 쉘: 사용자가 시스템에 로그인할 때 시작되는 쉘
- 환경 변수와 사용자 설정을 초기화하는 과정이 포함된다.
- ex)
ssh로 원격 서버에 접속하거나, tty(텍스트 모드 터미널)에서 로그인하는 경우
- 비로그인 쉘 : 사용자가 터미널을 열거나, 스크립트를 실행할 때 시작되는 쉘
- 로그인 과정 없이 바로 사용자가 설정한 환경을 사용합니다.
- ex) GUI에서 터미널을 열 때.
- /etc/profile
- 모든 사용자가 로그인할 때 실행되는 전역 설정 파일입니다.
- 시스템 전반에 걸쳐 기본 환경 변수를 설정하며, 모든 사용자의 초기 환경을 구성합니다.
- 이 파일은 기본적으로 모든 사용자에게 적용되며, 개인 사용자의 설정 파일이 존재하면 해당 파일로 제어를 넘깁니다.
- ~/.bash_profile
- 사용자의 홈 디렉토리에 있는 개인 설정 파일입니다. 주로 bash 로그인 쉘에서 사용됨.
- 일반적으로 사용자가 자신의 환경 변수를 설정하고, 시작할 프로그램이나 스크립트를 실행하기 위해 사용합니다.
- 우선 순위:
~/.bash_profile이 존재하지 않으면~/.bash_login파일이 실행되고, 이 또한 존재하지 않으면~/.profile이 실행됩니다.
- ~/.bash_login
~/.bash_profile이 없을 경우 실행되는 파일로, 사용자별 환경 설정을 포함할 수 있다.- 이 파일이 실행되면,
~/.bash_profile과 마찬가지로 사용자의 환경을 설정하는 데 사용됩니다.
- ~/.profile
- 사용자의 홈 디렉토리에 있는 또 다른 개인 설정 파일입니다.
~/.bash_profile및~/.bash_login이 없을 때 실행됩니다. - sh 또는 bash와 같은 POSIX 호환 쉘에서 사용되며, 환경 변수를 설정하거나 프로그램을 시작하는 데 사용됩니다.
- 사용자의 홈 디렉토리에 있는 또 다른 개인 설정 파일입니다.
- ~/.bashrc
- 비로그인 쉘에서 실행되는 설정 파일입니다. 일반적으로 터미널 세션을 시작할 때마다 실행됩니다.
- 주로 별칭, 함수, 프롬프트 설정과 같은 사용자 정의 쉘 환경을 설정합니다.
- 로그인 쉘에서
~/.bash_profile이나~/.profile에서~/.bashrc를 호출하는 것이 일반적입니다. 예를 들어,~/.bash_profile에if [ -f ~/.bashrc ]; then . ~/.bashrc; fi와 같은 코드가 포함되어 있을 수 있습니다.
- /etc/bashrc
- 모든 사용자의 비로그인 쉘에서 실행되는 전역 설정 파일입니다.
- 사용자 정의 설정을 포함할 수 있으며, 일반적으로 시스템 전반에 걸쳐 기본 환경 변수를 설정합니다.
- 각 사용자의
~/.bashrc에서 호출되므로, 로그인 쉘과 비로그인 쉘 모두에 적용됩니다.
- 로그인 쉘: 사용자가 시스템에 로그인할 때 시작되는 쉘
cron : 리눅스에서 정기적인 작업을 예약 실행하는 데 사용하는 스케줄러입니다.
crontab파일에 작업과 실행 주기를 설정하여, 특정 시간마다 스크립트나 명령을 실행할 수 있습니다.fdisk: 디스크 파티션을 관리하는 명령어입니다. 파티션을 생성, 삭제, 변경하는 데 사용되며, MBR 파티션 테이블을 다룹니다. GPT(GUID Partition Table)는 다른 도구(gdisk등)로 처리된다.- 주로 파티션을 나눌 때 사용한다.
mkfs: 리눅스에서 파일 시스템을 생성하는 명령어입니다. 파티션에 파일 시스템을 적용하기 위해 사용되며,mkfs.ext4,mkfs.xfs등 다양한 파일 시스템 포맷을 지원합니다.- partition한 HDD를 포맷하기 위해 사용한다.
lvm(Logical Volume Manager) : 리눅스에서 디스크 관리를 보다 유연하게 할 수 있게 해주는 시스템입니다. 여러 디스크 파티션을 하나의 논리 볼륨으로 묶어, 파일 시스템 크기 조정이나 디스크 확장을 쉽게 할 수 있습니다.- lvm vs. partition : partition은 저장 크기가 고정되지만 lvm은 volume이라는 단위로 저장 장치를 다룸. 스토리지의 확장,변경에 유연하며, 크기 변경시 기존 데이터의 이전이 필요 X.
cloud-init : 클라우드 환경에서 가상 머신(VM)이나 인스턴스의 초기 설정을 자동화하는 도구입니다. 네트워크 설정, 패키지 설치, SSH 키 설정 등을 처리
리얼리눅스 레벨업 챌린지 - 간단실습#
iproute2 vs net-tools Comparison : net-tools(ifconfig / route / netstat) → iproute2(ip addr / ip route / ss) - 성능 더 좋아짐.
알아둘 명령어(what they can do) : iptables, nc/nmap
- whatis vs. man : 명령어 한 줄 간단 설명 / 메뉴얼 길게
- 포트번호 80번 충돌문제 어떻게 해결하죠? : netstat로 확인 → netstat systemctl stop nginx → start, status
- 8080 포트번호 어떻게 차단하나요 ? : 레벨업 챌린지(웹기반 리눅스 실습) → iptables(Linux 기본 방화벽) / nc
nc→ 특정 포트에 “직접 연결”nc -l 8080 &: 스트용으로 포트 8080 리스너 실행 가능 → 실제 연결 :sudo ss -tplan | grep 8080- iptables :
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP: 특정 포트(8080) 차단 규칙 추가, reject 메시지 줄 수도 있음. = AWS Security Group에 상응. - nc로 연결 테스트 :
nc -vz 127.0.0.1 8080
nmap→ 여러 포트를 “탐색/정찰”
There are no articles to list here yet.