3장은 CentOS 설치하는 과정이기 때문에 생략
terminal 의 프롬프트가 # 면 root 사용자, $ 면 일반 사용자
CentOS 의 경우 linux 하나에 여러 가상 콘솔들이 붙어있음.
GUI 를 제공해주는 XWindow 를 포함하여
CLI 를 제공해주는 콘솔까지
Ctrl + Alt + Fn~ Fm 키를 눌러 바꿀 수 있음.
이 n과 m은 CentOS 버전 등에 따라 달라진다고 함
가상 콘솔들을 번호를 붙여 tty1, tty2, ,,, 라고 부르나 봄.
위의 Runlevel 에 따라서 종료나 재부팅 등을 할 수 있음.
종료하고 싶다면 terminal 에서 init 0
재부팅하고 싶다면 terminal 에서 init 6
주로 사용하는 Runlevel 은 3번 혹은 5번이라고 함.
3번은 Xwindow(GUI) 없이 실행
5번은 Xwindow 와 함께 실행.
2, 4번은 없다고 생각한다고 함(....)
/etc/systemd/system/ 위치에 있는 default.target 이 바로 현재 사용중인 Runlevel 을 의미함.
RunLevel 3 에서 Xwindow 를 띄우고싶다면 startx 명령어를 실행하면 됨.
자주 사용하는 vi 명령어 모음
문자열 치환 기능이 있는 줄 몰랐다...!!
마운트란?
물리적인 장치(DISK, CD, DVD, USB 등) 를 특정 디렉터리에 연결하는 것.
window 는 물리 장치를 drive 로 만들어주지만,
linux 는 내가 직접 물리 장치를 특정 디렉터리에 연결시켜야 한다고 함.
mount 명령어를 사용하여 물리적인 장치들을 / 밑에 연결시킬 수 있음.
mount [연결할 장치] [연결할 위치]
disk /dev/sdb1 을 /mydisk/ 위치에 mount 하고 싶다면 아래 명령어로 mount 가능하다.
mount /dev/sdb1 /mydisk/
cd 를 /media/cd/ 위치에 mount 하고 싶다면 아래 명령어로 mount 가능하다.
mount /dev/chrom /media/cd/
여기서 /dev/chrom 은 CD 를 나타냄
cd 를 빼고 싶다면 umount 를 하면 된다.
umount /dev/chrom
usb 를 /media/usb/ 위치에 mount 하고 싶다면 아래 명령어로 mount 가능하다.
mount /dev/sdb1 /media/usb
여기서 sdb1 은 "b번째 드라이브 1번째 파티션" (즉 usb) 이라는 의미
a번째가 하드디스크임.
만약 하드디스크가 2개라서 이미 a, b 가 존재한다면
usb 는 sdc1 이 됨.
만약 하드디스크가 3개라서 이미 a,b,c 가 존재한다면
usb 는 sdd1 이 됨.
usb 를 빼고 싶다면 umount 를 하면 된다.
umount /dev/sdb1
mount 정보는 linux 가 부팅되면 사라진다.
fstab 에 등록해야 boot 할 때 자동으로 mount 가 됨.
fstab 에 등록하는 방법은 아래 링크 동영상의 마지막 부분 보면 됨.
linux 는 서버용이기 때문에 다중 사용자가 하나의 linux 에 접속하여 사용함.
따라서 root 사용자(superuser)와 일반 사용자 등으로 사용자가 나뉨.
/etc/passwd 에 보면 여러 사용자들을 볼 수 있다.
행의 의미는 다음과 같음
사용자 이름 : 암호 : 사용자ID : 사용자가 소속된 그룹ID : 전체 이름(별명) : 홈 디렉터리 : 기본 셸
암호가 x 라고 되어있는데, 이건 다른 곳에서 암호를 관리한다는 의미.
비밀번호는 /etc/shadow 에 암호화되어 저장되어있음.
참고로 별명은 없어도 무방.
그룹은 /etc/group 에 정의되어 있고 의미는 다음과 같음
그룹명 : 비밀번호 : 그룹ID : 그룹에 속한 사용자명
비밀번호는 역시 x 라고 되어있음.
change 명령어 : 사용자의 암호를 주기적으로 변경하도록 설정
예) change -m 2 myuser
사용자를 관리(삭제, 생성 등)하거나 그룹을 관리할 수 있음.
사용자를 새로 생성해주면 생기는 홈 디렉터리는
/etc/skel 내부의 파일들을 복사해주는 것임.
파일 허가권에 대해 3개씩 끊어서 읽을 수 있음
예를 들어 rw- r-- r-- 라면
앞에서부터 3개씩 "파일의 소유자"(rw-), "그룹"(r--), "그 외 사용자"(r--) 로 파일 허가권이 주어진다.
해석은 다음과 같음
r : read 읽기 권한
w : write 쓰기 권한
x : excute 실행 권한
파일 소유자는 읽고 쓸 수 있고, 그룹은 읽을 수 있고, 그 외 사용자는 읽을 수 있음.
파일의 권한을 바꾸려면
chmod 777 sample.txt
chmod u+x sample.txt (user(소유자)에게 x 권한을 추가해라)
chmod g+w sample.txt (group 에게 w 권한을 추가해라)
chmod o-r sample.txt (other 의 r 권한을 삭제해라)
chmod ugo-w sample.txt (user, group, other 의 w 권한을 삭제해라)
chmod uo+rx sample.txt (user, other 에게 r 과 x 권한을 추가해라)
파일의 소유자를 바꾸려면
chown myuser sample.txt
파일의 그룹을 바꾸려면
chgrp mygroup sample.txt
파일의 소유자와 그룹을 한 번에 바꾸려면
chown myuser.mygroup sample.txt
참고로 chown 은 root 사용자만 가능
사용자 계정을 바꿔서 사용하려면 su - 명령을 사용한다.
예를 들어 myuser 로 계정을 바꾸려면
su - myuser
혹은
su myuser
root 가 su - 명령어를 사용하여 다른 계정으로 바꾸면 비밀번호 없이 접근이 가능하다.
일반 사용자가 su - 명령어를 사용하여 다른 계정으로 바꾸면 비밀번호를 물어본다.
중간에 - 를 넣으면 홈 디렉터리까지 같이 바뀐다.
특정 계정의 홈 디렉터리로 바로 이동하는 방법은 다음과 같다.
만약 내 계정이 myuser 라면
~myuser
혹은
~
하드링크는 inode(실제 디스크의 파일을 가리키는 주소같은 거라고 생각) 를 가리킨다.
심볼릭 링크는 inode 를 새로 만들고, 원본 파일을 가리키는 포인터를 디스크에 만든다.
만약 원본 파일이 삭제되거나 해당 위치에서 벗아나게 되면
심볼릭 링크는 포인터의 목적지가 사라지거나 이동했기 때문에 깨지게되지만
하드링크는 원본파일과 상관 없이 유지되어있다.
하드링크는 ln [링크대상파일이름] [링크파일이름]
심볼릭링크는 ln -s [링크대상파일이름] [링크파일이름]
명령어로 만들 수 있다.
window 의 setup.exe 로 프로그램을 간단하게 설치할 수 있듯이,
Redhat 에서 제공하는 RPM(Redhat Package Manager) 을 이용하면
프로그램 설치를 쉽게 할 수 있음.
예를 들어 telegraf 를 설치한다고 해보자. [설치 링크]
다음과 같은 이름의 rpm 을 받을 수 있다.
이름의 의미는 다음과 같다.
x86_64 : 64비트 CPU
i386, i486, ,,, i686 : 32비트 CPU
src : 소스 코드
noarch : 모든 CPU
위의 telegraf 는 64비트 CPU 에 설치하는 rpm 인 것이다!
rpm 을 설치할 땐 아래 명령어로 설치
rpm -Uvh 패키지파일이름.rpm
rpm 을 삭제할 땐 아래 명령어로 삭제
rpm -e 패키지이름
해당 rpm 이 이미 설치되어있는지 확인할 땐 아래 명령어로 확인
rpm -qa 패키지이름
하지만 rpm 을 직접 사용하지는 않는다고 함.
대신 rpm 의 의존성 문제 등을 대신 다뤄주는 DNF 명령어를 사용한다고 함.
centos 의 경우 기존 7이하 버전에서는 yum 을 사용했지만
yum 을 포장하는 것이 바로 DNF 이므로 앞으로는
DNF 를 사용하자.
DNF 를 사용하면 rpm 의 의존성 문제를 완전히 해결.
알아서 파일 저장소를 통해 의존성 패키지 모두 다운받고 설치한다고 함.
기본적으로 아래 명령어로 사용 가능. 마치 yum 사용하듯이.
설치 : dnf install 패키지이름
rpm 파일 설치 : dnf install rpm파일이름.rpm
업데이트 가능한 목록 보기 : dnf check-update
업데이트 : dnf update 패키지이름
삭제 : dnf remove 패키지이름
정보 확인 : dnf info 패키지이름
dnf 는 어디서 패키지들을 다운로드할까?
패키지들을 가리키는 url을 모아둔 곳이 있다. 바로 "/etc/yum.repos.d/" 여기.
이곳에 각종 패키지의 url 들이 저장되어 있어서, 사용자가 yum install -y mysql 하면
mysql url 을 이용해서 바로 다운로드 받을 수 있다.
dnf install 과정
- install 명령어를 넣음
- /etc/yum.repos.d/ 에서 url 을 확인
- 인터넷을 통해 centos 8 패키지 저장소로 가서 전체 패키지 목록 파일을 요청
- centos 8 패키지 저장소로부터 인터넷을 통해 전체 패키지 목록 파일을 받아온 후
사용자에게 "네가 요구한 패키지는 이런 것들이 있어. 설치할꺼야?" 라고 물음
- 설치한다고 하면, 다시 centos 8 패키지 저장소로 가서 필요한 패키지 파일들을 요청
- 설치할 패키지 파일들을 다운로드 한 후 설치 시작.
패키지 그룹을 통해 대량/다수의 패키지들을 설치할 수 있다.
dnf grouplist hidden
명령어로 group list 를 뽑아보고 거기서 내가 설치할 것을
dnf -y groupinstall "패키지그룹명"
이 명령어로 설치하면 됨.
폴더 내의 여러 파일들을 하나의 tar 파일로 묶을 수 있음.
가령 내가 /home/eyeballs/files/ 내의 모든 파일을 bundle.tar 로 묶고싶다면 아래 명령을 사용
tar cvf bundle.tar /home/eyeballs/file/
그럼 bundle.tar 파일로 묶인다.
푸는 명령어는
tar xvf bundle.tar
find 명령어는 다음과 같이 사용할 수 있음.
find [경로] [옵션] [조건] [action]
여기서 옵션은
-name : 파일 이름
-user : 소유자
-newer : 전,후 (?)
-perm : 허가권
-size : 크기
action 은
-print : default 로 붙는 action
-exec : 외부 명령어 실행(아래 예제)
아래 예를 들어본다.
/etc 밑에 "*.conf" 를 찾고싶다면
find /etc -name "*.conf"
/bin 밑에 10k 보다 크고 100k 보다 작은 크기의 파일들만 찾고싶다면
find /bin -size +10k -size -100k
찾은 파일들을 대상으로 어떤 명령어를 실행시키고 싶다면(가령 rm 이라면)
find /home -name "*.gz" -exec rm {} \;
파일 찾기 결과가 { } 내부에 들어간다.
{ } 내부는 rm 의 대상이 되므로 모두 지워진다.
cron : 주기적으로 반복되는 일을 자동적으로 실행될 수 있도록 설정
관련된 데몬(서비스)은 "crond",
관련 파일은 "/etc/crontab"
crond 가 백그라운드에서 동작하고 있다는 전제 하에,
내가 주기적으로 반복 실행하고 싶은 명령어/스크립트들을
/etc/cron.hourly (시간별)
/etc/cron.daily (일별)
/etc/cron.weekly (주별)
/etc/cron.monthly (월별)
각각 위와 같은 디렉터리 안에 넣어주면 시간별, 일별, 주별, 월별로 실행함.
앞에서부터 총 다섯개의 숫자가 들어가는 contab 실행문을 작성할 수 있다.
* | * | * | * | * |
분(0-59) | 시(0-23) | 일(1-31) | 월(1-12) | 요일(0-7) 0, 7은 일요일 1은 월요일 2는 화요일 3은 수요일 4는 목요일 5는 금요일 6은 토요일 |
예를 들어서 다음과 같이 설정해두었다고 하자.
01 * * * * root run-parts /etc/cron.hourly
: 매 01분마다 root 권한으로 /etc/cron.hourly 밑의 모든 스크립트를 실행(결과적으로 한 시간마다 실행)
02 4 * * * root run-parts /etc/cron.daily
: 매 04시 02분마다 root 권한으로 /etc/cron.daily 밑의 모든 스크립트를 실행(결과적으로 하루마다 실행)
03 4 * * 0 root run-parts /etc/cron.weekly
: 매 일요일 04시 03분마다 root 권한으로 /etc/cron.weekly 밑의 모든 스크립트를 실행(결과적으로 일주일마다 실행)
42 4 1 * * root run-parts /etc/cron.monthly
: 매 1일 4시 42분마다 root 권한으로 /etc/cron.monthly 밑의 모든 스크립트를 실행(결과적으로 월마다 실행)
그 외에 실행 주기로 정하여 실행하게 할 수 있음.
*/1 * * * * : 1분마다 수행
*/5 * * * * : 5분마다 수행
0 */3 * * * : 3시간마다 수행
crontab 의 결과 로그를 저장하는 방법은 다음과 같다.
0 1 * * * /home/eye/test.sh > /home/eye/test.out 2>&1
: 매일 1시 마다 test.sh 를 실행시키되 생산되는 모든 로그들은 test.out 에 저장
0 1 * * * /home/eye/test.sh > /home/eye/test_`date +\%Y\%m\%d\%H\%M\%S`.out 2>&1
: 매일 1시 마다 test.sh 를 실행시키되 생산되는 모든 로그들은 test_YmdHMS.out 에 저장
systemctl start crond 로 crontab 을 백그라운드에서 실행할 수 있다.
systemctl status crond 명령어로 crontab 이 백그라운드에서 잘 작동중인지 확인 가능하다.
vi /et/crontab 을 열어 다음과 같이 넣으면 된다.
/etc/cron.monthly 로 가서 (#!/bin/sh 로 시작하는)스크립트를 만들어서 저장한다.
그럼 끝. 이제 (crond 가 동작하고 있다는 전제 하에) 알아서 주기적으로 실행이 된다.
cron 처럼 주기적인 반복을 예약하는 기능 말고
한 번만 실행되도록 예약할 수 있다.
at 을 사용하면 됨.
다음과 같이 사용한다.
at [시간]
예를들면
at 3:00am tomorrow : 내일 새벽 3시에 예약
at 11:00pm January 30 : 1월 30일 오후 11시에 예약
at now + 1hours : 1시간 후 예약
위의 명령어를 넣으면 at> 이라는 프롬프트가 뜨고 실행될 명령어들을 넣으면 된다.
다 넣었으면 Ctrl+D 로 끝냄.
내가 예약한 목록을 보고 싶다면 at -l 명령어를 사용.
at -l 로 나온 리스트의 가장 앞에는 고유 번호가 붙는데
이 번호를 이용하여 삭제가 가능하다. 예를들어 리스트에 1번 예약을 지우고 싶다면
atrm 1
Linux 의 호스트 이름은 각 컴퓨터에 지정된 이름
예를 들면 eye, muzse 같은.
네트워크 주소란, 같은 네트워크에 속해있는 공통된 주소.
예를 들어 컴퓨터 3대가 192.168.111.3, 192.168.111.4, 192.168.111.5의 ip주소를 갖고있다면
끝자리가 0 인 주소.
네트워크 주소는 192.168.111.0 임.
브로드캐스트 주소는 네트워크 주소에 속해있는 모든 컴퓨터에게 뿌리는 주소.
끝자리가 255 인 주소.
예를 들어 바로 위의 예제에서 브로드캐스트 주소는 192.168.111.255
DHCP 서버는 컴퓨터에 자동으로 IP 를 할당해주는 역할을 함.
마치 Docker Container 를 network 에 묶으면 ip 가 자동으로 할당되는 것 처럼.
위에 있는 nmtui 명령어가 굉장히 중요한 명령어라고 함.
nmtui 로 설정을 변경한 후에 systemctl restart NetworkManager 명령어로 변경 내용을 시스템에 적용!
네트워크 설정하는 것은 아래 동영상에서 함.
DNS 서버 바꾸고 내 ip 주소 바꾸는 등의 실습을 진행.
youtu.be/9XF88RS9VmU?list=PLVsNizTWUw7EJ9z-LW3lv3VC-6HI9I3hN
아래 명령어로 dns 서버에 접속하여 ip 를 받아올 수 있다.
# nslookup
> server 8.8.8.8
Default server : 8.8.8.8
Address : 8.8.8.8:53
> eyeballs.tistory.com
....
Name : eyeballs.tistory.com
Address : xxx.xxx.xxx.xxx
more 명령어를 통해 여러 줄로 생성되는 결과를 페이지 단위로 볼 수 있음.
예를 들어
cat eyeballs.log | more
space 누르면 다음페이지,
q 누르면 끝내기
내가 모르는 리눅스 도구들은 다음과 같음.
wc, sort, awk, sed, cut, uniq
이걸 쓸 줄 알면 리눅스 사용하기 편함.
wc : word count. 사용자가 지정한 파일의 행, 단어, 문자수를 세는 프로그램 README.md 가 있다. 행의 개수는 wc -l README.md 단어의 개수 wc -w README.md 문자의 개수는 wc -c README.md cat README.md | wc -l README.md 등으로도 사용 가능 한 번에 다 같이 쓸 수 있음. 다 같이 쓰면 행, 단어, 문자 순서대로 결과가 나옴 각각 l : line w : word c : character 를 의미하는 듯 함. 참고 : www.incodom.kr/Linux/%EA%B8%B0%EB%B3%B8%EB%AA%85%EB%A0%B9%EC%96%B4/wc |
sort : 파일을 행 단위로 정렬하는 명령어 아래와 같은 내용의 text 파일이 있다고 하자. 1 2 2 3 3 1 1 2 아래 명령어로 정렬 가능하다. 오름차순 정렬 sort text 1 2 1 2 2 3 3 1 내림차순 정렬 sort -r text 3 1 2 3 1 2 1 2 중복된 값 제거하고 정렬 sort -u text 1 2 2 3 3 1 두번째 값으로 정렬 sort -k 2 text 3 1 1 2 1 2 2 3 참고 : webdir.tistory.com/153 |
cut : 파일의 각 행을 구분자로 자르고, 잘린 요소들을 뽑거나 필터링해줌 data.csv 가 다음과 같다고 하자. a, 1, https://www.google.com, 2020-09-18 b, 2, https://eyeballs.tistroy.com, 2020-06-25 c, 3, https://eyeballs.blog.me, 2020-10-10 cut 을 사용하여 다음과 같이 index 혹은 범위로 값을 추출해낼 수 있다. -d 는 구분자, -f 는 index 혹은 범위를 넣으면 된다. $ cat data.csv | cut -d "," -f 1 a b c $ cat data.csv | cut -d "," -f 2 1 2 3 $ cat data.csv | cut -d "," -f 3 https://www.google.com https://eyeballs.tistroy.com https://eyeballs.blog.me $ cat data.csv | cut -d "," -f 4 2020-09-18 2020-06-25 2020-10-10 $ cat data.csv | cut -d "," -f 2-3 1, https://www.google.com 2, https://eyeballs.tistroy.com 3, https://eyeballs.blog.me $ cat data.csv | cut -d "," -f 1,4 a, 2020-09-18 b, 2020-06-25 c, 2020-10-10 #아래는 년,월만 뽑아내는 것을 보여줌 $ cat data.csv | cut -d "," -f 4 | cut -d "-" -f 1,2 2020-09 2020-06 2020-10 #아래는 메인 도메인만 뽑아내는 것을 보여줌 $ cat data.csv | cut -d "," -f 3 | cut -d "/" -f 3 www.google.com eyeballs.tistroy.com eyeballs.blog.me 참고 : jupiny.com/2017/07/09/linux-command-4-cut-sort-uniq-wc/ |
awk : 다음과 같은 작업들이 가능한다.
참고 : https://recipes4dev.tistory.com/171 |
xargx 는 다른 명령어의 출력 결과들을 모아 인자값으로 만들어주어, 또 다른 명령어에서 사용할 수 있도록 만들어준다. 예를 들어보자. # find /etc -name "*.conf" | xargs ls –l 이름이 *.conf 인 파일의 리스트를 출력하고, 그 출력된 리스트들을 ls -l 의 인자값으로 넘겨준다. 결과적으로 이름이 *.conf 인 파일들을 대상으로 ls -l 명령을 수행하게 해준다. # cat url-list.txt | xargs wget –c url-list.txt 의 파일 내용을 출력하고, 그 출력된 결과를 wget -c 의 인자값으로 넘겨준다. 결과적으로 url-list.txt 내의 있는 url 을 대상으로 wget -c 를 통해 다운받게 된다. 뭘 기준으로 파일 내용을 인자값으로 나누는지는 모르겠음... 아마 \n 이지 않을까? # find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz 이름이 *.jpg 인 파일들을 찾아 인자값으로 만들고, 그 인자값들을 대상으로 tar -cvzf 명령어를 통해 압축하는 명령어이다. 출처 https://linux.101hacks.com/linux-commands/xargs-command-examples/ |
표준 입력 : shell 에서 키보드로 명령을 입력받는 것
표준 출력 : 표준 입력으로 받은 명령의 표준 결과를 모니터로 출력하는 것
오류 출력 : 표준 입력으로 받은 명령의 오류 결과를 출력하는 것(옵션을 통해 모니터 등에서 출력 가능)
꺽쇠(>) 를 이용하여 명령의 결과를 표준 출력 외에 다른 곳으로 redirect 가능함.
만약 내가 ls -al 명령어를 사용하면 결과는 표준 출력인 모니터로 나오지만
아래 꺽쇠 명령어를 사용하면 모니터가 아니라 파일로 저장됨
예를 들어
ls -al > list.txt : 명령의 결과를 list.txt 파일에 override 하여 저장
ls -al >> list.txt : 명령의 결과를 list.txt 파일에 append 하여 저장
반대의 경우도 있음.
head 나 cat 등의 명령어에 파일(list.txt)의 내용을 넣는 것임
예를 들어
head < list.txt : list.txt 의 첫 열 줄(default)을 표준 출력함
사실 head 나 cat 은 < 없이도 사용 가능하잖아
꺽쇠 다음에 & 을 사용하면 오류까지 같이 출력함
예를 들어
ls -al >& list.txt : 명령의 결과를 오류까지 포함하여 list.txt 파일에 override 하여 저장
Program : 디스크에 저장된 실행 코드
Process : 프로그램이 램에 올라가서 활성화 된 것
Foreground Process : 화면에 나타나서 사용자와 상호작용하는 process
Background Process : 화면에 나타나지 않고 실행되는 process
Process number : 각 process 가 갖는 고유 번호. kill 을 할 때 이걸 이용함 ps -ef 로 볼 수 있음
작업 번호 : 현재 실행되는 background process 의 순차번호
process 는 부모 자식 관계를 갖을 수 있음
예를 들어 os 라는 부모 process 위에 power point 라는 자식 process 가 올라가 있는 격
부모 process 를 kill 하면 자식 process 역시 kill 됨 (os 가 꺼지면 power point 역시 꺼짐)
pstree 명령어를 통해 부모 process와 자식 process의 관계를 tree 형태로 보여준다고 함
/dev/null 이라는 곳은 리눅스의 쓰레기통이라고 생각하면 됨.
yes > /dev/null 명령어는 무한히 출력되는 y 를 쓰레기통에 버리는 것(....)
A process를 background 에서 돌리고 싶다면 아래 두 가지 방법으로 실행 가능
- 실행되고 있는 도중에 Ctrl+Z 를 누름
그럼 (일단은) stopped 가 되고, bg 명령어를 실행하면
A process 가 background 에서 동작하기 시작함.
- 명령어 뒤에 &을 붙이면 됨
예를 들어 run.sh &
service : 시스템과 독자적으로 구동되어 제공하는 process
예를 들면 httpd, mysqld, influxd...
데몬(daemon)이라고도 함
실행 : systemctl start [서비스이름]
종료 : systemctl stop [서비스이름]
재시작 : systemctl restart [서비스이름]
상시 가동 : systemctl enable [서비스이름]
service의 실행 스크립트 파일은 /usr/lib/systemd/system/ 디렉터리에
'서비스이름.service' 라는 이름으로 확인 가능.
예를 들어 Cron 서비스는 crond.service 라는 이름의 파일로 존재
그 이후에 강의는 실전에서 사용하지 않는 응급복구, GRUB2, 커널 컴파일이므로 생략
'Linux' 카테고리의 다른 글
운영체제, 네트워크 공부 자료 (0) | 2020.09.16 |
---|---|
[Linux] lsof 사용법 링크 (0) | 2020.09.11 |
[Linux] 방화벽 설정 방법 링크 (0) | 2020.09.09 |
[Linux] 시스템 모니터링 및 분석 방법 링크 (0) | 2020.09.09 |
[Linux] 이것이 리눅스다 강의 정리 2장 (0) | 2020.09.05 |