상세 컨텐츠

본문 제목

리눅스 명령어와 쉘스크립트

개발 공부 (시니어코딩)/리눅스

by letprogramming 2021. 10. 11. 21:37

본문

반응형

디렉토리

/bin : 기본 명령어

/home : user home dir

/dev : 각종 디바이스 파일

/etc : config, passwd, rc.d 등

        - /etc/shadow : 실제 패스워드 저장 장소

/proc : 프로세스 정보

        - /proc/cpuinfo

/sbin : 관리자용

/tmp : temporary dir

/usr : source or programs

/var : 로그, ftp, spool, mail

반응형

포트

20 : FTP

21 : FTP

22 : SSH / rsync / rcp

25 : SMTP - 메일 발송

110 : POP3 - 메일 수신

80 : HTTP

443 : HTTPS

 

명령어 팁

tab : 자동완성

화살표 위, 아래 : 명령어 히스토리

! + 알파벳 : 알파벳이 들어간 가장 가까운 명령어 수행

!! : 바로 이전 명령어 수행

Ctrl + A, Ctrl + E : 맨 앞, 맨 뒤로 이동

 

한글 적용

리눅스에서 한글 사용을 위해 설치

dnf install glibc-langpack-ko -y

 

localedef -f UTF-8 -i ko_KR ko_KR.utf8

 

euc-kr로 되어있을 경우

iconv -c -f euc-kr -t utf-8 a.js > a1.js

 

리눅스 명령어

touch : 수정없이 수정일 갱신

head / tail : 일부분만 출력

tail -f : 지켜보면서 출력

more / less : 페이지 업 다운 키로 불가능 / 가능

clear : 화면 비우기

echo : 출력

cd : 디렉토리 변경

mkdir / rmdir : 폴더 생성 / 삭제 (비어있을 때만)

cp / mv / rm : 복사 / 이동 / 삭제

find : 파일 찾기

whoami : user 이름

passwd 유저명 : 패스워드 변경

df : 디바이스 정보 (-h : 단위 정리)

du -sh * : 파일들이 사용하고 있는 메모리 사용량

free (-h) : 메모리 사용량

vmstat 1 : 1초에 한번씩 시스템 자원 정보 출력 (-a : active / inactive 정보 출력)

top : 작업관리자 (space bar 누르면 갱신, 숫자 1을 누르면 CPU 1, 2번으로 나누어서 보여줌) -h : 스레드 단위

ps : 현재 프로세스

ps -ef | grep nginx : nginx 프로세스

chmod : 파일 권한 변경

chown : 파일의 소유자 변경

ln -s : 목적지 링크명

su

groupadd 그룹명 : 그룹 생성

useradd (-g 그룹명) 유저명 : 유저 생성

userdel 유저명 : 유저 삭제

chage -l 유저명 : 유저의 암호 정보

chage -d 0 유저명 : 유저의 암호의 남은 날을 0으로 변경하여 변경하도록 요구 (짧거나 아이디를 포함하거나 기존 암호와 비슷하면 X)

grep : 특정 단어 찾기

egrep 단어 *.gz : 압축 파일 중에 단어 포함 파일 찾기

Vi 에디터

vi .vimrc : vi 에디터의 런타임 환경설정

set tabstop=4 # 탭 간격

set shiftwidth=4

set expandtab

set smartindent

set autoindent # 자동 들여쓰기

set number # 행 번호

set showmatch

 

쉘 스크립트

env 환경 선언 - ex ) bash 환경으로 선언

#!/bin/bash

반복문

# 1 ~ 5 LOOP
for i in 1 2 3 4 5; do echo $i; done

# 1 ~ 100 LOOP
for i in {1..100}; do echo $i; done
# 무한루프, 1초에 한 번 ll 명령어 수행
while true; do ll; sleep1; done
# ls -f로 나온 파일명들을 하나씩 출력
for i in `ls -f`; do echo $i; done

Argument

#!/bin/bash

echo "t.sh>>>>>>>> $0 $1 $2 $#"

# $0 : 명령어 
# $1 : 파라미터1
# $2 : 파라미터2
# $3 : 파라미터3
# $# : 파라미터 개수

IF

문자: ==, !=

숫자: -gt(greater than), -eq(equal), -lt(less than), -ne (not equal), -le (less equal), -ge (greater equal)

파일: -f(파일), -d(디렉토리), -r(읽기 가능), -w(쓰기 가능), -x(실행 가능)

# $#이 1보다 작다면 파라미터가 없다는 뜻 => 파일 이름을 입력하라는 출력
# $#이 1보다 크거나 같다면 파라미터가 있으므로 해당 파일로 cat 수행
# 파일 이름이 디렉토리라면 경고 문구 출력

#!/bin/bash

if [ $# -lt 1 ]; then
	echo "Usage : ./t.sh <file>"
    exit 0
elif [ -d $1 ]; then
	echo "Input filename only!!"
    exit 0
fi;

cat $1

date

DATE = `date +%Y-%m-%d`
echo $DATE
# 2021-10-11

DATE = `date +%Y-%m-%d --date=yesterday` #하루 전
DATE = `date +%Y-%m-%d --date='1 day ago'` #하루 전
DATE = `date +%Y-%m-%d --date='2 day ago'` #이틀 전
DATE = `date +%Y-%m-%d --date='2 day'` #이틀 후

DT = `date +%Y-%m-%d --date='1 week ago'` #일주일 전
DT = `date +%Y-%m-%d --date='1 month ago'` #한 달 전

DT = `date +%Y-%m-%d --date='1 month'` #한 달 후

Array

#!/bin/bash

declare -a arr # 배열 선언
arr=("aaa" "bbb" "ccc" 123)

echo $arr
echo ${arr[0]}
arr[4]="666"

echo ${arr[@]}
echo "${#arr} : ${#arr[@]}"

for i in ${arr[@]}; do echo $i; done

Function

#!/bin/bash

echo "$0 $@ $#"

say_hello(){
	echo "Hello $0 $@ by $2!!($#)"
}

say_hello "Kim" "Lee"

IFS & AWK

IFS : 필드 구분값

default 값은 공백

#!/bin/bash

for i in `ls -al`
do
	echo $i
done

# IFS의 default 값이 공백이기 때문에 공백으로 구분되어 있는 모든 필드가 하나씩 따로 출력
#!/bin/bash

PRE_IFS=$IFS #기존 IFS 저장
IFS = (개행) #IFS를 개행으로 변경

for i in `ls -al`
do
	echo $i
done

IFS=$PRE_IFS #기존 IFS로 다시 변경

# 개행을 기준으로 필드를 구분하기 때문에 하나의 파일, 디렉토리가 한줄로 출력

AWK : 특정 필드만 출력

#!/bin/bash

PRE_IFS=$IFS #기존 IFS 저장
IFS = (개행) #IFS를 개행으로 변경

for i in `ls -al`
do
	echo $i | awk '{print $5" "$9}'
done

IFS=$PRE_IFS #기존 IFS로 다시 변경

# 개행을 기준으로 필드를 구분하기 때문에 하나의 파일, 디렉토리가 한줄로 출력

#5번째와 9번째 필드만 출력
#$5와 $9사이에 " "는 공백을 주기 위해 삽입

cron

dnf or yum install cronie

 

 

반응형

관련글 더보기