Linux 명령어 - ynjch97/YNJCH_WIKI GitHub Wiki
- 리눅스 패키지를 관리(설치, 삭제, 업데이트 등)하는 명령어
- 초기 리눅스에서는 패키지를 설치하기 위해 tar, gzip 등의 확장자 사용 > 모든 패키지를 사용자가 직접 컴파일 하여 설치해야 했음
- RPM : 이 불편함을 해소하기 위해 RedHat 사에서 개발한 패키지 관리 프로그램
- RPM 패키지 : 실행파일, 설정파일, 제작자 정보 등을 담고 있음
- 인터넷이 연결되어 있지 않아도 설치가 가능
- *.rpm 확장자로 되어있는 패키지 설치 가능
- 패키지 사이에 의존하고 있는 패키지까지 자동으로 설치되지 않음
- RPM 이후에 등장한 패키지 관리 프로그램
- RPM을 기반으로 설계
- 인터넷을 사용하여 패키지를 설치할 때 필요한 패키지들을 모두 다운로드 받아서 설치할 수 있음 > 패키지간의 의존성 문제를 해결
- 인터넷을 통한 설치가 가능
- 특정한 파일 확장자를 요구하지 않음
- 패키지 사이에 의존하고 있는 패키지까지 자동으로 설치됨
- DNF 패키지 기본 관리 명령
- DNF와 YUM 차이
- YUM 에 비해 성능 효율이 좋아 속도 면에서 우수
- 외부 라이브러리인 libsolv를 이용하여 의존성 문제를 해결
- API 문서가 공식적으로 제공
- C, C++, Python으로 작성되었고 여러 확장 시스템을 지원
- YUM 은 오랜 기간 동안 수정되지 못한 여러 문제점이 존재
- 성능 저하 발생 / 패키지 설치 시 의존성 관련 문제
- Fedora 18에 처음 도입된 후 Fedora 22부터 정식으로 DNF 가 YUM 의 자리를 대신함
- 참고 : NetworkManager 적응하기
- RHEL 7 ~ RHEL 9 : 기본 네트워크 관리 서비스로 NetworkManager 사용
- network 서비스
- RHEL 7 의
initscript
또는 RHEL 8 의network-scripts
패키지에서 제공하는 script 들을 활용 - RHEL 7, RHEL 8 까지는 유지되다가 RHEL 9 부터는 아예 제거됨
- RHEL 7 의
-
/etc/sysconfig/network-scripts/ifcfg-*
(이후 ifcfg-rh 로 지칭) 는 NetworkManager 에서도 호환-
ifcfg-*
: 기존 network 서비스에서 각 네트워크 인터페이스 설정을 위해 관리하던 파일 - RHEL 9 에서도 호환되지만, 기본적으로는
/etc/NetworkManager/system-connections/
디렉토리에<interface>.nmconnection
(이후 keyfile 로 지칭) 이름으로 저장
-
- NetworkManager 에서 네트워크 구성을 위해 사용할 수 있는 도구
이름 | 설명 |
---|---|
nmcli | CLI 도구 GUI 가 없는 환경에서 대부분의 네트워크 설정을 할 수 있음 |
nmtui | TUI(Text User Interface) 로 제공 CLI 환경에서 메뉴방식으로 선택하면서 구성할 수 있는 화면을 제공 curse 기반으로 구성 nmtui 에서 지원하지 않는 일부 설정 존재 |
nm-connection-editor | GUI 도구로 nm-connection-editor 패키지로 제공 |
control-center | GNOME 쉘에서 제공되는 GUI 도구 |
- 이 외에도
nmstatectl
,web console(cockpit)
등이 있음 - 실서버 운영 환경에서는 대부분 GUI 가 구성되어 있지 않음
- GUI 가 없는 서버 환경에서 주로 쓰이는
nmcli
,nmtui
도구를 중심으로 네트워크 인터페이스를 구성
- GUI 가 없는 서버 환경에서 주로 쓰이는
- Connection : 네트워크 연결을 설정하고 관리하는 데 필요한 모든 설정이 포함된 프로필(프로파일)
- 여러 Connection 프로필을 생성, 편집 및 저장, 다양한 네트워크 또는 액세스 포인트 간에 빠르게 전환
- 다양한 네트워크 설정을 구성/관리할 수 있는 프로필을 만들 수 있게 해줌
- Device 를 다양한 type 의 네트워크와 더 간단하게 연관지을 수 있음
- Device : NetworkManager 에서 인식되는 네트워크 인터페이스
-
ip link
명령으로 사용할 수 있는 네트워크 인터페이스를 확인하는 것과 비슷 - nmcli device 의 sub 명령어 ->
connect
,disconnnect
- ip link set dev up 같이 인터페이스를 up/down 하는 것과는 조금 다름 (
connection
과 connect/disconnect 를 수행) -
connection
을 연결/활성화하는 건,nmcli connection
명령에서도 가능
-
- NetworkManager 에서 인식되는 Device 를 확인, 선택한 Device 에 연결할 설정(Connection)을 추가
- 이 때,
nmcli
명령어로 connection 을 생성/수정/삭제/활성화/비활성화 할 수 있음 -
nmcli
명령어를 통한 설정은ifcfg-rh
또는keyfile
에 바로 반영됨
- Daemon 혹은 Application 이 Listen 하고 있는 Port 를 확인하는 방법
- 데몬(Daemon): 사용자가 직접 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램
- Port 의 상태 : Open, Filtered, Closed, Unfiltered
- Linux 네트워킹 시스템에 대한 정보를 확인하는데 사용되는 도구
-
sudo netstat -ltup
: Open 되어있는 모든 Port 를 확인할 수 있음-
-l
: Netstat 에 모든 수신 소켓을 표시 -
-t
: 모든 TCP 연결을 표시 -
-u
: 모든 UDP 연결을 표시 -
-p
: 포트에서 수신하는 어플리케이션/데몬의 이름을 표시 -
-n
: 서비스 이름 대신 Port 번호를 표시
-
- Open 된 소켓에 대한 정보를 표시 (출력은 Netstat 과 비슷)
-
sudo ss -lntu
: TCP 및 UDP 연결에 대한 모든 수신 대기 포트를 숫자로 표시
- 아주 강력하고 인기있는 네트워크 탐색 도구이자 포트 스캐너
- 시스템에 nmap이 없을 경우
apt-get
,yum
,dnf
등을 이용하여 설치 가능 - Port 스캔하는 시간이 수 초 이상 소요
sudo nmap -n -PN -sT -sU -p- localhost
- Linux 에서 open file 을 확인하는데 사용
- Unix/Linux의 모든 것은 파일로 이루어져 있기 때문에 스트림이나 네트워크 파일도 lsof 로 확인 가능
-
sudo lsof -i
:-i
로 모든 네트워크 파일을 볼 수 있음
- CentOS 8 버전부터 Docker 대신 Podman 이 기본 Container API 임
- Centos에 Podman 설치하기 - Podman 컨테이너 기초
- Podman 기본명령어 튜토리얼
- Docker
- Docker 데몬 : 단일 호스트에서 모든 컨테이너를 관리하는 백그라운드 프로세스
- 모든 Docker 이미지, 컨테이너, 네트워크, 스토리지 등을 처리
- 컨테이너를 관리하기 위해 데몬이 필요하므로, 프로세스를 실행하려면 루트 권한이 필요
- Podman
- 컨테이너를 관리하기 위해 데몬이 필요하지 않으므로, 루트 권한이 필요하지 않음
- 이미지 다운로드와 제거
[root@localhost ~]# podman pull docker.io/library/alpine
Trying to pull docker.io/library/alpine:latest...
Getting image source signatures
Copying blob 4abcf2066143 done |
Copying config 05455a0888 done |
Writing manifest to image destination
05455a08881ea9cf0e752bc48e61bbd71a34c029bb13df01e40e3e70e0d007bd
[root@localhost ~]# podman rmi alpine
Untagged: docker.io/library/alpine:latest
Deleted: 05455a08881ea9cf0e752bc48e61bbd71a34c029bb13df01e40e3e70e0d007bd
- 컨테이너 실행 확인과 사용 가능한 모든 컨테이너 출력
[root@localhost system-connections]# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 새 컨테이너 생성
-
-name hakase-nginx
라는 이름으로 만듦 -
-p
: 외부 포트는 8000을 사용 /-d
백그라운드로 실행, 컨테이너 id 를 출력
-
podman run -d -p 8000:80 --name hakase-nginx docker.io/library/nginx
- 실행 중인 컨테이너 관리
명령어 | 설명 |
---|---|
podman top hakase-nginx | 컨테이너 내부의 프로세스를 확인 |
podman exec -it hakase-nginx /bin/bash | 실행 중인 컨테이너로 로그인 |
nginx -V | hakase-nginx 내부에서 nginx 버전 확인 |
podman stop hakase-nginx | hakase-nginx 컨테이너 중지 |
podman rm hakase-nginx | 컨테이너 제거 |
podman rm hakase-nginx -f | 실행 중인 컨테이너 강제 제거 |
touch [옵션] [파일이름]
- 파일의 생성과 파일의 날짜, 시간을 변경하는 명령어
- 파일이 존재하지 않을 경우 크기가 0인 파일을 생성하며, 한 번에 여러 개의 파일을 만들 수 있음
- 옵션 없이 사용할 경우 서버의 현재 시간으로 변경됨
-
-m
: 파일의 생성, 수정 시간을 서버 시간으로 변경할 경우 -
-t
: 파일의 생성, 수정 시간을 사용자가 원하는 시간으로 변경할 경우 (touch -t 202001011230 [file명]
)
-
chmod 755 start.sh
-
vi 파일명
: 특정 파일 열기 및 수정
설명 | 명령어 |
---|---|
수정 | insert |
한 줄 지우기 | d + d |
저장하고 나가기 | esc + :wq! |
그냥 나가기 | esc + :q! |
찾기 | esc + /단어 |
- 실시간 변경되는 로그 파일의 경우
tail
명령어 사용
tail -f 2020-09-15.log
rm -r log/*
find -name '파일명'
-
grep -r "문자열"
: 디렉토리 내 모든 파일에서 특정 단어 찾기
ps -ef | grep tomcat # 톰캣 조회
- sudo 를 붙이면 관리자 권한으로 실행 가능
sudo /usr/share/tomcat8.5/8.5.50/bin/startup.sh
sudo /usr/share/tomcat8.5/8.5.50/bin/shutdown.sh