리눅스 명령어
리눅스 명령어 정리
리눅스 세팅
apt update & apt full-upgrade
SSH
apt install openssh-server
service ssh start
VI
apt install vim
NETSTAT
apt install net-tools
GCC
apt install gcc make build-essential curl
방화벽
centos 방화벽 설정
포트 열때
sudo firewall-cmd --permanent --add-port=[$portNUM]/tcp
포트 삭제
sudo firewall-cmd --permanent --remove-port=[$portNUM]/tcp
적용
firewall-cmd --reload
리스트 확인
firewall-cmd --list-all
ubuntu 방화벽 설정
상태 확인
sudo ufw status verbose
룰 확인
sudo ufw show raw
룰 허용
sudo ufw allow 22/tcp
룰 삭제
sudo ufw delete allow 22/tcp
적용
sudo ufw reload
원격 데스크탑 설정
xrdp 설치
sudo apt-get install -y xserver-xorg-core xorgxrdp xserver-xorg-input-all
sudo vi /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
sudo vi /etc/xrdp/xrdp.ini
ls_top_window_bg_color=000000
sudo reboot
하드웨어 스펙 확인
lspci
- 하드 확인
lspci | grep RAID
- 그래픽 확인
lspci | grep VGA
- 인터넷 확인
lspci | grep Ethernet
back ground 실행
. {실행 파일} &
python 인경우
nohup python {실행.py} &
- <log 안남기고 실행>
nohup python {실행.py} 1>/dev/null 2>&1 &
고정 아이피 설정
ubuntu 20.04
sudo vi /etc/netplan/01-netcfg.yaml
network: version: 2
ethernets: enp0s3:
dhcp4: no
addresses: - 192.168.219.12/24
gateway4: 192.168.219.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
파일 공유
sudo apt install -y nfs-common nfs-kernel-server
sudo vi /etc/exports
/{공유폴더 장소} {공유호스트} (rw)
/sh_data 192.168.1.* (rw)
mount
mkdir /{공유폴더 장소}
mount {호스트}:/{공유폴더 장소}
vi /etc/fstab
멘 아래 줄에 추가
{호스트}:/{공유폴더 장소} nfs
scp 데이터 전송
scp [options ...] [source] [target]
Local -> Remote
scp -P {port} 목적파일명(경로) 유저명@IP주소:목적디렉토리
Remote -> Local
scp 유저명@IP주소:파일디렉토리 목적파일명(경로)
options
-r: 재귀적으로 모든 폴더들을 복사합니다. 폴더를 복사할 때 사용하는 옵션으로 이때 전송하고자 하는 대상은 폴더로 지정하면 됩니다. 아래에 예제를 참고하시면 됩니다. symbolic link가 있는 경우에는 target에 symbolic link를 생성하지 않고 symbolic link가 가리키는 파일 혹은 폴더를 복사합니다.
-P: ssh 포트를 지정하는 옵션
-i: ssh 키파일과 같은 identity file의 경로를 지정하는 옵션
-v: verbose 모드로 상세내용을 보며 디버깅을 할 때 사용합니다.
-p: 파일의 수정 시간과 권한을 유지합니다.
tar 압축, 압축해제
압축
tar -cvf {압축이름.tar} {압축폴더}
압축 해제
tar -xvf {압축이름.tar}
options
-c: tar단위로 묶음
-p: 파일권한을 저장
-v: 과정을 프린트 출력해줌
-f: 파일 이름을 지정
-C: 경로를 지정
-x: tar압축을 품
-z: gzip으로 압축하거나 품
grep의 패턴 정규 표현식 (Regular Expression)
grep '^a' 파일명 : ^는 파일의 시작을 나타냄. 파일에서 a로 시작하는 행을 찾는다.
grep 'apple$' 파일명 : $는 파일의 끝을 나타냄. 파일에서 e로 끝나는 행을 찾는다.
grep 'app*' 파일명 : 파일에서 app로 시작하는 모든 단어를 찾는다.
grep 'a.....e' 파일명 : 파일에서 a로 시작하고 e로 끝나는 7자리 단어를 찾는다.
grep [a-d] 파일명 : 파일에서 a,b,c,d 로 시작하는 단어를 모두 찾는다.
grep [aA]pple 파일명 : 파일에서 apple 또는 Apple로 시작하는 단어를 모두 찾는다.
grep 'apple' d* : d로 시작하는 모든 파일에서 apple 를 포함하는 모든 행을 찾는다.
grep 'apple' 파일명1 파일명2 : 지정된 두개의 파일에서 apple 를 포함하는 모든 행을 찾는다.
grep '^[ab]' 파일명 : 파일에서 a나 b로 시작되는 모든 행을 찾는다.
옵션
-b 검색 결과의 각 행 앞에 검색된 위치의 블록 번호를 표시한다. 검색 내용이 디스크 어느 곳에 위치했는 지를 알아내는데 유용하다.
-c 검색 결과를 출력하는 대신에 찾아낸 행의 총 개수를 출력한다.
-h 파일 이름을 출력하지 않는다.
-i 대소문자를 구분하지 않는다. (대소문자 같은 취급)
-I 대소문자를 구분한다.
-l 패턴이 존재하는 파일의 이름만 출력한다.
-n 파일 내에서 행 번호를 함께 출력한다.
-s 에러 메시지 외에는 출력하지 않는다.
-v 패턴이 존재하지 않는 행만 출력한다.
-w 패턴 표현식을 하나의 단어로 취급하여 검색한다.
-C {n} 검색된 내용에 아래{-A}, 위(-B)로 n 값 만큼 출력
버전 정보 확인
unmae -a
centos
cat /etc/release
ubuntu
cat /etc/issue
디스크 마운트 < 디스크 추가 >
disk mount
fdisk -l
파티션 설정
fdisk /dev/sdb
n, p, 1, enter enter p, w
포멧
mkfs -t ext4 /dev/sdb1
mount /dev/sdb1 /{filePath}
mount
df -h
__ 영구적인 마운트__
ls -l /dev/disk/by-uuid enter
uuid 구하여
sudo vi /etc/fstab
(index)
파일 시스템장치명, 마운트 포인트, 파일시스템 타입, dump, file sequence check option
UUID={} /data /ext4 defaults 0 1
nvidia 설치 ubuntu ver
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y build-essential
드라이버 설치 -> nvidia 사이트에서 ~~~.run 그래픽 드라이버에 버전으로 다운
설치시 nouveau 블랙리스트 걸고 리부팅 후
sudo vi /etc/modprobe.d/blacklist.conf
blacklist nouveau
sudo reboot
실행 권한 주고
chmod +x Nvidia~~.run
ERROR X윈도우가 실행 중이라는 에러가 발생 할 수 있어 cli환경으로 만든다.
ctrl + alt + F1
display 금지
sudo service lightdm stop
./Nvidia~~.run
ERROR 엔비디아 설치시 커널버전을 인식 못할경우 에러 kernel 인식을 못할 경우 커널 지정
sh NVIDIA-Linux-x86_64-450.80.02.run --kernel-source-path=/usr/src/kernels/3.10.0-1127.19.1.el7.x86_64
sudo service lightdm start
curl https://nvidia.github.io/nvidia-docker/centos7/nvidia-docker.repo > /etc/yum.repos.d/nvidia-docker.repo
yum -y install nvidia-container-toolkit
systemctl stop docker
systemctl start docker
계정 만들기
기본 사용자 정보를 입력하는 과정과 함께 진행 [recommend]
adduser
환경변수를 통한 옵션으로 커스터마이징 유저 생성
useradd
파일 용량
df (disk free, 디스크 여유공간 확인)
-h 옵션을 사용하면 M,G 단위로 디스크 공간을 확인 할 수 있음
du (disk usage, 디렉토리 디스크 사용량 확인)
du /home
특정 디렉토리를 지정할 수 있음
du -sh /home
요약된 정보를 출력
du -h --max-depth 1
깊이를 정할 수 있음
파일 검색
find [OPTION...] [PATH] [EXPRESSION...]
ex) find / -name "*.log"
OPTION
-P : 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
-L : 심볼릭 링크에 연결된 파일 정보 사용.
-H : 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
-D : 디버그 메시지 출력.
EXPRESSION
-name : 지정된 문자열 패턴에 해당하는 파일 검색.
-empty : 빈 디렉토리 또는 크기가 0인 파일 검색.
-delete : 검색된 파일 또는 디렉토리 삭제.
-exec : 검색된 파일에 대해 지정된 명령 실행.
-path : 지정된 문자열 패턴에 해당하는 경로에서 검색.
-print : 검색 결과를 출력. 검색 항목은 newline으로 구분. (기본 값)
-print0 : 검색 결과를 출력. 검색 항목은 null로 구분.
-size : 파일 크기를 사용하여 파일 검색.
-type : 지정된 파일 타입에 해당하는 파일 검색.
-mindepth : 검색을 시작할 하위 디렉토리 최소 깊이 지정.
-maxdepth : 검색할 하위 디렉토리의 최대 깊이 지정.
-atime : 파일 접근(access) 시각을 기준으로 파일 검색.
-ctime : 파일 내용 및 속성 변경(change) 시각을 기준으로 파일 검색.
-mtime : 파일의 데이터 수정(modify) 시각을 기준으로 파일 검색.
시간 7일 경과된 파일 및 디렉토리 찾기
find . -mindepth 1 -maxdepth 1 -mtime +7
시간 7일 경과된 파일 및 디렉토리 삭제
find . -mindepth 1 -maxdepth 1 -mtime +7 -exec rm -rf {} ;
locale 설정 및 시간 변경
sudo apt install language-pack-ko
sudo apt install tzdata
sudo locale-gen ko_KR.UTF-8
locale 수정
sudo vi /etc/default/locale
LANG=ko_KR.UTF-8
source /etc/default/locale
vi ~/.bashrc
export LANG=ko_KR.UTF-8
export LANGUAGE=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
sudo tzselect
timedatectl list-timezones | grep Seoul
sudo timedatectl set-timezone 'Asia/Seoul'
시스템 가동시간 및 부팅시간 확인
리눅스 시스템이 실행되고 난 후부터 지금까지의 시간과 시스템에 로그인 된 사용자수, 시스템 부하율을 표시
update
각 사용자의 로그인 정보 및 시스템의 부팅시간을 표시하는 last 명령어에서 부팅시간만 표시
last reboot
sudo 권한 부여
관리자로 들어가서 강제 저장 진행
vi /etc/sudoers
추가
USER ALL=(ALL:ALL) ALL
adduser USER sudo
group 관리 그룹
group 확인
groups
group 만들기
groupadd [groupName]
group 삭제
groupdel [groupName]
group 사용자 추가
gpasswd -a [user] [groupName]
group 사용자 제거
gpasswd -d [user] [groupName]
awk (오크)
유닉스에서 개발된 스크립트 언어
원하는대로 필터링하거나 추가해주거나 기타 가공을 통해서 나온 결과를 행과 열로 출력
라인은 레코드, 각 단어들이 필드($n)
내장 함수
sub : 특정 문자열 치환 - sub(regular expression, sub stitution string, [target string])
gsub : 치환 - gsub(" ", "")
index : substring과 일치하는 부분의 index 위치를 출력 - index(string, substring)
lenght : 문자열 길이를 출력 - length(string)
substr : 시작 위치에서 길이만큼 문자열 출력 - substr(string, starting position, [length])
match : 패턴 검색 - match(string, regular expression)
split : string을 지정한 구분자로 분리하여 array에 저장 - split(string array, [field separator])
printf : 표준 출력 함수 - printf(string, ...)
systime : 현재 시간의 unix format - systime()
mktime : 특정 시간의 unix format - mktime("YYYY MM DD HH MM SS [KST]")
기본 사용법은 pattern, action
awk pattern {action}
awk '{ print $1 }' ./file.txt #특정 필드 값 출력
awk 'NR == 1{ print $1 }' ./file.tet # 특정 레코드 특정 필드값 출력
awk '{ print ("name : " $1, ", " "phone : " $2) }' ./awk_test_file.txt # 출력의 내용 첨가
awk '{ if ( $5 >= 80 ) print ($0) }' ./awk_test_file.txt # if 구문
awk '{
for(i=0;i<2;i++)
print( "for loop :" i "\t" $1, $2, $3)
}' ./awk_test_file.txt # 반복문
BEGIN, END pattern
BEGIN은 awk가 모든 레코드를 돌기 전에 한번 action을 수행하고 END는 모든 레코드를 다 돈 후에 마지막으로 정의한 action이 실행됩니다.
awk '
BEGIN
{
sum = 0
cnt = -1
}
{
sum += $5
cnt++
}
END
{
avg = sum/cnt
print ("sum :" sum ", average :" avg)
}' ./awk_test_file.txt
쉘 스크립트
#!/bin/bash
최상단에 구문이 적혀 있어야함
변수
변수명 = 값 으로 선언하고, 사용할때는 ${변수}로 사용
예약변수 = HOME, PATH, LANG, UID, SHELL, USER, FUNCNAME, TERM
Array => arr =("12", "34", 1, 2, 3, 4) -> ${arr[@]}, ${arr[1]}, unset arr[5] {원소 해제} # @ 전체 , #arr[@] 배열 갯수
Function => function func(){ echo "fun()} # 함수 호출 func
비교문 if [ 조건 ]; then {작업 } fi
파일 관련 조건
-d 디렉토리 존재여부
-e 파일 존재여부
-L symbolic link 확인
-s 파일의 크기가 0보다 크면 참
-S 파일 타입이 소켓 확인
-r 파일을 읽을 수 있는지 확인
-w 파일을 쓸수 있는지 확인
-x 파일을 실행 할수 있는지 확인
-f 파일이 정규파일이면 참
-c 파일이 문자 장치이면 참
-a AND
-o OR
반복문
for i in 1 2 3 4 , for in ${list}, for in {1..5}, for in {1..5..2}, for in ${arr[@]}, for ((i=0; i<5; i++))
do
{작업}
done
free 메모리
[total] : 설치된 총 메모리 크기 / 설정된 스왑 총 크기
[used] : total에서 free, buff/cache를 뺀 사용중인 메모리. / 사용중인 스왑 크기
[free] : total에서 used와 buff/cahce를 뺀 실제 사용 가능한 여유 있는 메모리량 / 사용되지 않은 스왑 크기
[shared] : tmpfs(메모리 파일 시스템), ramfs 등으로 사용되는 메모리. 여러 프로세스에서 사용할 수 있는 공유 메모리
[buffers] : 커널 버퍼로 사용중인 메모리
[cache] : 페이지 캐시와 slab으로 사용중인 메모리
[buff/cache] : 버퍼와 캐시를 더한 사용중인 메모리
[available] : swapping 없이 새로운 프로세스에서 할당 가능한 메모리의 예상 크기. (예전의 -/+ buffers/cache이 사라지고 새로 생긴 컬럼)
[-h] : 사람이 읽기 쉬운 단위로 출력한다.
[-b | -k | -m | -g] : 바이트, 키비바이트, 메비바이트, 기비바이트 단위로 출력한다.
[--tebi | --pebi] : 테비바이트, 페비바이트 단위로 출력한다.
[--kilo | --mega | --giga | --tera | --peta] : 킬로바이트, 메가바이트, 기기바이트, 페타바이트 단위로 출력한다.
[-w] : 와이드 모드로 cache와 buffers를 따로 출력한다.
[-c '반복'] : 지정한 반복 횟수 만큼 free를 연속해서 실행한다.
[-s '초'] : 지정한 초 만큼 딜레이를 두고 지속적으로 실행한다.
[-t] : 합계가 계산된 total 컬럼 <-> 줄을 추가로 출력한다.
crontab 작업 예약 스케줄러
-e : 등록 및 수정
-l : 내용
vim 명령어
:set nu 넘버 추가
:set paste 들여쓰기 해제
화면 분할
:sp {FileName} 상하
:vs {FileName} 좌우
문자열 바꾸기
:%s/{타겟_변경_문자열}/{결과_변경_문자열}[/g] #/g는 전체 변경 여부
터미널 단축키
Shift + pageUp: 상위 페이지 이동
Shift + pageDown: 하위 페이지 이동
<BASH 상 입력 모드>
Ctrl + D 로그아웃
Ctrl + R 히스토리 찾기
Ctrl + S 키보드 장금 Ctrl + Q 장금 해제
Ctrl + M 엔터
Ctrl + P 이전 명령어
Ctrl + N 다음 명령어
Ctrl + L 화면지우기
Ctrl + Y 버퍼의 내용 붙여넣기
Ctrl + U 커서 왼쪽 문자열 버퍼에 저장 후 삭제
Ctrl + K 커서 오른쪽 ;;
Ctrl + A 입력 라인의 처음으로 이동
Ctrl + E 입력 라인의 끝으로 이동
우분투 화면 rgb색상 변경하기
gsettings set org.gnome.desktop.background picture-uri ''
gsettings set org.gnome.desktop.background primary-color 'rgb(0, 0, 0)'