쉘,, 이란 뭘까 ,,,
시간 설정
표준 입력 출력 오류
쉘 종료 상태 코드
쉘 인수 세기
awk
SHELL
리눅스 쉘(Shell)은 사용자와 리눅스 커널 간의 인터페이스를 제공하는 프로그램으로, 터미널을 통해 입력한 명령어를 해석하여 커널에 전달하고, 커널이 처리한 결과를 다시 터미널로 출력해줍니다.
현재 쉘 보기
root@psh:~# echo $SHELL
/bin/bash
root@psh:~# nl /etc/shells // 현재 사용할 수 있는 쉘 종류
1 # /etc/shells: valid login shells
2 /bin/sh
3 /bin/bash
4 /usr/bin/bash
5 /bin/rbash
6 /usr/bin/rbash
7 /usr/bin/sh
8 /bin/dash
9 /usr/bin/dash
10 /usr/bin/tmux
11 /usr/bin/screen
콘쉘 사용
ai ksh // 콘쉘
root@psh:~/d8# vi a1.sh
1 #!/bin/bash // 아래 글은 bin 밑에 bash로 해석하세요 .. 다른 유닉스에서도 해석하려면 bash 대신 sh 들어가야됨
2
3 echo "오늘은 수요일"
4 d=`date`
5 d1=$(date)
6 now=`date +%Y년%m월%d일:%H시:%M분`
7 echo "오늘은 $d, $d1"
8 echo " 지금 시간은 : $now "
9 echo
root@psh:~/d8# a1.sh
a1.sh: 명령을 찾을 수 없습니다
root@psh:~/d8# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
root@psh:~/d8# chmod +x a1.sh //권한주기 chmod u=x, g=r, o=w
root@psh:~/d8# ll
합계 16
-rw------- 1 root root 12288 5월 3 10:07 .a1.sh.swp
-rwxr-xr-x 1 root root 95 5월 3 10:07 a1.sh*
root@psh:~/d8# ./a1.sh
오늘은 수요일
오늘은 2023. 05. 03. (수) 10:19:57 KST, 2023. 05. 03. (수) 10:19:57 KST
지금 시간은 : 2023년05월03일:10시:19분
root@psh:~/d8# PATH=$PATH:. //path에 현재 경로 추가 ./ 안 넣어도 됨
root@psh:~/d8# a.sh
오늘은 수요일
오늘은 2023. 05. 03. (수) 10:14:13 KST, 2023. 05. 03. (수) 10:14:13 KST
달력 & 시간 alias 설정
root@psh:~/d8# date
2023. 05. 03. (수) 10:16:31 KST
root@psh:~/d8# date +%Y년%m월%d일::%H시:%M분
2023년05월03일::10시:17분
root@psh:~/d8# alias date='date +%Y년%m월%d일:%H시:%M분'
root@psh:~/d8# date
2023년05월03일:10시:18분
//시간 셋팅
root@psh:~# timedatectl set-timezone 'Asia/Seoul'
표준 입력, 출력, 에러
stdin 0 표준입력 키보드
stdout 1 표준출력 모니터
stderr 2 표준 오류출력 모니터
표준 입력: cat < a1 = cat 0 < a1
cat 명령어가 a1 파일을 직접 읽어들이지 않고, 파일에서 데이터를 읽어서 출력합니다.
표준 출력: cal > a2 = cat 1 > a2
표준 오류 출력: dfdfd 2 > dafd a12 : 에러를 a12에 저장하겠다
(( 2>/dev/null : 에러를 dev/null 에 갖다 버리겠다 .. !! ))
종료 상태 코드
root@psh:~# fdafd
fdafd: 명령을 찾을 수 없습니다
root@psh:~# echo $? //이전 명령의 상태 값 보기
127 // 명령어를 찾을 수 없음
root@psh:~# date
2023. 05. 03. (수) 11:30:39 KST
root@psh:~# echo $?
0 // 성공
root@psh:~# cd /etdfdafs f
-bash: cd: 인자가 너무 많음
root@psh:~# echo $?
1 // 알수없는 오류 ,일반 오류
명령어 read : 사용자로부터 입력을 받는 명령어/ 사용자가 입력한 값을 변수에 저장하거나, 여러 개의 변수에 동시에 값을 저장 가능
root@psh:~# read a b c
afdaf 40 5.6
root@psh:~# echo $a $b $c
afdaf 40 5.6
root@psh:~# read a b c
fdf adfdf fdfd fdf fdf dfdf
root@psh:~# echo $a $b $c
fdf adfdf fdfd fdf fdf dfdf
root@psh:~# echo $c // a b 에 값 하나씩 주고 나머지 다 c에 감
fdfd fdf fdf dfdf
//read와 echo,,
root@psh:~/d8/d80# read -p "사는 곳은 : " town; echo "우리집은 $town"
사는 곳은 : 인천시
우리집은 인천시
**-p 옵션 - "사는 곳은 : "이라는 메시지를 출력하고, 사용자로부터 입력받을 값을 변수 town에 저장
SEHLL과 C언어에서 파일 이름이 인수로 세어지는가 !?
root@psh:~/d8/d80# vi b.sh
1 #!/bin/bash
2
3 echo " script 이름 : $0 " //b.sh 스크립트 이름이 $0 변수에 저장됨, 인수로 전달 x
4 echo " \$1 : $1 " // \이 뒤를 문자 자체로 해석해라 \n : 줄 바꾸기 , 만약 저 자체를 띄우고싶음 \\n
5 echo " \$2 : $2 "
6 echo " \$3 : $3 "
7 echo " \$4 : $4 "
8 echo " argument 개수 : $# " //#갯수 세기
9 echo " 모든 값 출력 : $* "
root@psh:~/d8/d80# b.sh 3 4 55 jk
script 이름 : ./b.sh
$1 : 3
$2 : 4
$3 : 55
$4 : jk
argument 개수 : 4
모든 값 출력 : 3 4 55 jk
vi a.c
1 #include <stdio.h>
2 int main(int a,char* b[])
3 {
4 int i=0;
5 printf("인수의 개수 = %d \n", a);
6
7 for (i=0; i<a; i++)
8 printf(" \b[%d] ==> %s \n", i, b[i]);
9 return 0;
10 }
root@psh:~/d8/d80# a1 aa bb 30 50
인수의 개수 = 5
[0] ==> a1
[1] ==> aa
[2] ==> bb
[3] ==> 30
[4] ==> 50
##리눅스 bash shell과 C 언어에서 스크립트 이름이 전달되는 방식에는 차이가 있습니다.
Bash shell에서는 스크립트 이름이 $0 변수에 저장됩니다. 이 변수를 통해 스크립트 내에서 스크립트 이름을 사용할 수 있습니다. 그러나 스크립트 이름은 명시적으로 인수로 전달되지 않습니다.
반면에 C 언어에서는 프로그램의 이름은 argv[0]에 저장됩니다. C 언어의 main 함수는 프로그램의 시작 지점으로 사용되며, 프로그램이 실행될 때 명령줄에서 전달된 인수들은 argv 배열에 저장됩니다. argv[0]에는 프로그램 이름이 저장되며, argv[1]부터는 명령줄 인수가 차례대로 저장됩니다.
따라서 C 언어에서는 프로그램 이름이 인수로 세어지는 것입니다. 이것은 프로그램이 다른 이름으로 실행되는 경우를 대비하여 유용합니다.
**ssh root login 허용
/etc/ssh #vi sshd_config
33 PermitRootLogin yes
root@psh:/etc/ssh# systemctl restart sshd
==> 루트로 로긴 가능 !
지역변수를 환경변수에 이사시키기
a=300
그냥 만들면 지역변수 set에 있지만
export aa //환경변수에 이사시키기
env | grep aa
set | grep aa
awk
- 텍스트 데이터를 처리하기 위한 유틸리티 프로그램
- 컬럼과 로우로 이루어진 데이터를 가지고 작업할 때 유용
- 기본적으로 파일로부터 데이터를 읽어와서 분석, 이때 분석하고 싶은 부분을 기준으로 필드를 지정해줄 수 있습니다. (기본적으로 공백을 기준으로 필드를 분리)
<공백으로 구분>
root@psh:~/d8# nl k1 k2 k3
1 이순실
2 강감찬
3 장영실
4 500
5 300
6 700
7 34
8 23
9 47
root@psh:~/d8# paste k1 k2 k3
이순실 500 34
강감찬 300 23
장영실 700 47
root@psh:~/d8# paste k1 k2 k3 > kk
root@psh:~/d8# nl kk
1 이순실 500 34
2 강감찬 300 23
3 장영실 700 47
root@psh:~/d8# awk '{print $1, $2, $3}' kk
이순실 500 34
강감찬 300 23
장영실 700 47
<<갑분 db>>
root@psh:~/d8# sqlite3
sqlite> create table yy(name, asset, age);
sqlite> .import kk yy
sqlite> .head on
sqlite> .mode col
sqlite> select * from yy;
name asset age
---- ----- ---
이순실 500 34
강감찬 300 23
장영실 700 47
.q
<파일크기로 구분>
root@psh:~/d8# df -h
파일 시스템 크기 사용 가용 사용% 마운트위치
tmpfs 198M 1.2M 197M 1% /run
/dev/sda4 12G 4.3G 6.8G 39% /
tmpfs 988M 0 988M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda6 9.8G 24K 9.3G 1% /data
/dev/sda2 974M 130M 777M 15% /boot
/dev/sda5 4.9G 352K 4.6G 1% /home
tmpfs 198M 4.0K 198M 1% /run/user/1000
tmpfs 198M 4.0K 198M 1% /run/user/0
tmpfs 198M 4.0K 198M 1% /run/user/1010
root@psh:~/d8# \df | awk '$4 > 800000'
파일 시스템 1K-블록 사용 가용 사용% 마운트위치
/dev/sda4 12278920 4507788 7125604 39% /
tmpfs 1011600 0 1011600 0% /dev/shm
/dev/sda6 10215700 24 9675160 1% /data
/dev/sda5 5074592 352 4795712 1% /home
root@psh:~/d8# find / -size +100M //100메가 넘는 파일만 찾아라
/proc/kcore
root@psh:~/d8# find / -size +100M 2>/dev/null
root@psh:~/d8# ll /etc | awk print '$5'
스크립트로 초기 파일 설정 !
init_1 : 완전 초기 상태 (설치 후 아무것도 안함)
init_2 : 설치 필수 패키지 설치, 기본 설정
▶ vi init_1.sh
timedatectl set-timezone 'Asia/Seoul'
now=`date +%Y년%m월%d일::%H시%M분`
echo $now >> ~/out.txt
apt list --installed | wc -l >> ~/out.txt
echo $now >> ~/out.txt
apt-get -y install gcc g++ default-jdk mysql-server sqlite3 tomcat9 apache2
apt-get -y install php php-curl php-gd php-intl php-mbstring php-soap php-xml \
php-xmlrpc php-zip php-mysql
apt list --installed | wc -l >> ~/out.txt
echo $now >> ~/out.txt
chmod +x init_1.sh
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 리눅스' 카테고리의 다른 글
9일 차 리눅스 마지막 날 총 정리 + 설치 내용을 담은 스크립트 만들어보 (0) | 2023.05.04 |
---|---|
8-2 쉘 프로그래밍 (0) | 2023.05.03 |
[리눅스] 표준 입력방식과 일반 실행의 차이 ,,!! (0) | 2023.05.03 |
7일 차 ,, bind (0) | 2023.05.03 |
7일차// dns, 윈도우 마운트 복습 (1) | 2023.05.02 |