리눅스 명령어

리눅스 명령어 정리

리눅스 명령어

리눅스 세팅

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)'