VI에디터를 학습 해 보았습니다
#!/bin/sh
계산 식
# 셸에서의 숫자 계산
num1=100
# num1 변수는 그냥 문자열로 인식됩니다
num2=$num1 + 200
echo $num2
# `(백틱)과 expr 이라는 연산자를 통해 num1을 숫자로 인식할 수 있습니다.
num3=`expr $num1 + 200`
echo $num3
# 괄호를 두번 사용하여 직접 더할 수 있습니다.
sum=$(($num1 + 200))
echo $sum
# 괄호 안에 expr 연산자를 사용하여서도 직접 연산할 수 있습니다.
sum1=$(expr $num1 - 200)
echo $sum1
# 이스케이핑문자(리눅스에서는 메타문자라고도 부릅니다)를 통해 ()와 *가 문자열이 아닌
# 연산 부호로 인식되게 합니다.
num4=`expr \( $num1 + 200 \) / 10 \* 2`
echo $num4
하나의 쉘스크립트 작성
날짜별로 넘버링을 하는
코드를 다 자것ㅇ해놓고 첫번째 폴더명 두번째 파일 규칙 이런식으로
자동으로 된다
if 전체 범위 1~3까지 부호를 가지고 넣는거
case - 1일때, 2일때, ture false 일때 딱 정해진 경우 1:1대응
for
횟수 아는경우
while
횟수 모르는경우
로케일 변경시 set encoding UTF-8
하면 댐
이미지 파일을 imgs폴더로, txt파일을 txts폴더로, file을 files폴더로 이동하게 자동화 시킨 셸 스크립트
팀원들과 함께는 조금 다르게 해보았습니다.
# 이미지 파일을 imgs 폴더로 이동
if [ ! -d "imgs" ]
then
mkdir "imgs"
for i in $(seq 1 100); do
mv "file$i.jpg" imgs/
done
else
for i in $(seq 1 100); do
mv "file$i.jpg" imgs/
done
fi
# 파일 파일을 files 폴더로 이동
if [ ! -d "files" ]
then
mkdir "files"
for i in $(seq 1 100); do
mv "file$i" files/
done
else
for i in $(seq 1 100); do
mv "file$i" files/
done
fi
# 텍스트 파일을 txts 폴더로 이동
if [ ! -d "txts" ]
then
mkdir "txts"
for i in $(ls *.txt); do
1 #!/bin/sh
2
3 # 이미지 파일을 imgs 폴더로 이동
4 for i in $(seq 1 100); do
5 mv "file$i.jpg" imgs/
6 done
7
8 # 파일 파일을 files 폴더로 이동
9 for i in $(seq 1 100); do
10 mv "file$i" files/
11 done
12
13 # 텍스트 파일을 txts 폴더로 이동
14 for i in $(seq 1 100); do
15 mv "file$i.txt" txts/
16 done
17
18 echo "파일 정리가 완료되었습니다."
19
추가로, text, file을 입력하여 옮기는 코드
#!/bin/sh
todo="$*"
if echo "$todo" | grep -q "file"; then
# 파일을 files 폴더로 이동
if [ ! -d "files" ]
then
mkdir "files"
for i in $(seq 1 100); do
mv "file$i" files/
done
else
for i in $(seq 1 100); do
mv "file$i" files/
done
fi
echo "문자열 안에 'file'이 포함되어 있습니다."
fi
if echo "$todo" | grep -q "image"; then
# 이미지 파일을 imgs 폴더로 이동
if [ ! -d "imgs" ]
then
mkdir "imgs"
for i in $(seq 1 100); do
mv "file$i.jpg" imgs/
done
else
for i in $(seq 1 100); do
mv "file$i.jpg" imgs/
done
fi
echo "문자열 안에 'image'가 포함되어 있습니다."
fi
if echo "$todo" | grep -q "text"; then
# 텍스트 파일을 txts 폴더로 이동
if [ ! -d "txts" ]
then
mkdir "txts"
for i in $(ls *.txt); do
mv "$i" txts/
done
else
for i in $(ls *.txt); do
mv "$i" txts/
done
fi
echo "문자열 안에 'text'가 포함되어 있습니다."
fi
exit 0
참고로 한글이 깨지는 순간은
vi만들어서
set nu
set encoding=utf-8
set ts=4
set ai
하면 해결
로 해결할 수 있음!
지금부터 다음 내용은 국민취업지원제도 상담때문에 수업을 빠지게 되어 글로만 복습한 내용입니다.
가. 리눅스 파일시스템 이해
- 파일: 관련있는 정보들의 집합
- 파일의 종류
- 일반 파일: 텍스트 파일, 실행파일 이미지 파일 등 주로 데이터를 저장합니다.
- 디렉터리
$ sudo cat /etc/group # 그룹 정보를 관리
$ sudo cat /etc/shadow # 사용자의 비밀번호와 관련 민감 정보를 관리. root와 shadow 그룹 구성원만 액세스 가능
$ sudo cat /etc/passwd # 사용자 식별과 기본 사용자 관련 설정에 필요한 정보를 제공. 모든 사용자가 접근 가능
$ useradd user02 # 비밀번호는 어떻게 해결해야 할까요?
$ passwd user02 # 이제 관련파일을 확인해보세요.
# su user02라는 명령어로 user02로도 접속해보세요
$ sudo userdel user02
# adduser 명령어를 사용하시기를 추천합니다.
$ adduser user03 # 비밀번호, 기본 경로까지 한번에 생성할 수 있습니다.
$ su user03
$ sudo groupadd team1
$ logout
$ sudo visudo
$ sudo visudo
visudo 명령어를 사용하면 파일을 저장하기 전에 문법상의 오류를 확인해 주므로 좀 더 안전하게 설정할 수 있습니다.
사용자 추가하기
tail /etc/group
-g 옵션을 쓰지 않고 useradd 명령어로 user를 만들면 기본적으로 user 이름과 같은 group이 생성되고 user의 primary 그룹이 됩니다.
옵션 g와 G의 차이 : g는 기본그룹(primary group), G는 부가그룹 (secondary group) 나열합니다.
-m 옵션을 꼭 써야 계정과 계정의 홈 디렉토리가 함께 만들어집니다.
-s 옵션은 유저가 기본으로 사용하는 로그인 쉘을 지정합니다.
-c 옵션은 유저에 관한 추가 정보를 저장합니다.
$ useradd -u 1044 -G sales,backup,adm -m -c "010-1111-2222" -s /bin/csh natasha
$ useradd -g operator -m -d /oracle -s /usr/sbin/nologin ora # /usr/sbin/nologin 쉘을 쓴다는 것은 사용자가 쓰는 게 아니라 장치/서비스가 쓰는 계정이라는 뜻
$ tail /etc/passwd # 방금 만든 계정들 확인
$ id natasha
$ id ora
$ ll /home # -m 옵션 썼기 때문에 natasha 경로 만들어짐
$ ll -d /oracle # -m, -d 함께 사용했으므로 /oracle 경로가 홈디렉토리로 만들어짐
$ passwd natasha # 초기 암호 설정 안 하면 로그인 불가
### 사용자 그룹 만들기
- 회사에도 부서가 있고, 거기에 팀원이 들어가듯 Group을 먼저 만들고 그 안에 user를 넣습니다
```jsx
cat /etc/group # 그룹 정보 정하는 파일
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,user01
**# ①그룹이름:②x:③GID:④그룹멤버**
```
① `그룹 이름`: 그룹의 이름
② `x`: 그룹의 암호를 저장
③ `GID`: Group Identifier): 그룹을 식별하는 번호.
④ `그룹 멤버`: 그룹에 속한 멤버들의 사용자 계정 이름.
쉼표(,)로 구분하여 사용자 계정 등록
```bash
# 그룹 생성
$ groupadd lastday
$ groupadd -g 2424 sales # sales 그룹 아이디를 2424로 지정합니다
$ tail /etc/group
# 그룹 삭제
$ groupdel lastday
$ tail /etc/group
```
$ ll
$ sudo chown root test1 # 소유자 변경
$ ll
$ sudo chown -R user01 test1/ # 디렉토리의 경우
$ sudo chgrp team2 test1 # 그룹 변경
$ sudo chown user03.team2 test1 # 소유자와 그룹 모두 변경
권한 관련
- 소유자(root)는 읽기, 쓰기, 실행 권한을 가지고 있습니다. ('rwx')
- 그룹(root)은 읽기와 실행 권한을 가지고 있습니다. ('r-x')
- 다른 모든 사용자는 읽기와 실행 권한을 가지고 있습니다. ('r-x')
drwxr-xr-x 2 atangi atangi 4096 Apr 21 13:05 newdir
- 소유자(atangi)는 읽기, 쓰기, 실행 권한을 가지고 있습니다. ('drwx')
- 그룹(atangi)은 읽기와 실행 권한을 가지고 있습니다. ('r-x')
- 다른 모든 사용자는 읽기와 실행 권한을 가지고 있습니다. ('r-x')
crontab
- 리눅스를 비롯한 유닉스 계열 OS에는 주기적이고 반복적 작업을 하기 위한 cron이라는 프로그램이 존재합니다. cron은 OS를 시작할 때 함께 실행되며 /etc/crontab 파일을 읽어서 설정한 시작에 해당 명령어를 실행합니다.
```jsx
ps -ef | grep cron
crontab -l # 확인
crontab -e # edit -> 에디터 선택(2)
crontab -r # 삭제
```
- crontab 파일의 한 행은 다음과 같이 여섯 항목으로 구성
crontab을 사용하려면 꼭! 먼저! 허용범위가 설정되어 있어야 합니다.
$ ll /etc/crontab # 누구도 실행할 수 없는 상태
$ sudo ls /etc/cron.allow /etc/cron.deny
# 먼저 허용범위를 설정해줘야함
$ /etc/cron.allow # cron 서비스 사용을 허용하는 유저를 한줄에 하나씩 작성
$ /etc/cron.deny # cron 서비스 사용 못하는 유저를 한줄에 하나씩 작성
# 둘 중 하나의 파일은 꼭 있어야 하므로 경우의 수를 고려하여 작성하세요
# allow 와 deny 파일이 둘 다 있으면 allow만 확인하고 deny는 무시됩니다
# allow가 비어있으면 deny는 무시되므로 아무도 cron을 못 쓰게 됩니다
# allow는 없고 deny에만 무언가 적혀있으면 deny에 쓰여진 사람 외 모든 사람이 사용 가능합니다
# allow는 없고 deny가 텅 비어있으면 모든 사람이 cron 사용 가능합니다
$ touch /etc/cron.deny
소프트웨어 파일 관리
dkpg
$ dpkg -l # 시스템에 설치된 모든 명령어 확인
$ q
$ dpkg -l | grep net-to # 특정 단어를 가진 패키지 조회
$ ifconfig # net-tools 다운받아야 쓸 수 있는 명령어임을 알려줌
$ apt-get download net-tools
$ dpkg -i net-tools_1.60+git20180626.aebd88e-1ubuntu1_amd64.deb # 다운받은 패키지 설치
$ ifconfig
$ dpkg -l | grep net-to # 설치된 것 확인
$ dpkg -r net-tools # 패키지 삭제 - 이름만 적는다 버전은 필요없음
$ ifconfig
$ dpkg -l | grep net-to
$ dpkg -L apache2 # 설치된 경로들 확인 가능
# 의존성 문제로 설치 오류 남 - apt가 나오게 된 이유
apt-get download amanda-server
ls
dpkg -i amanda-server_1%3a3.5.1-2ubuntu0.3_amd64.deb
apt-cache search net-to # net-to로 시작하는 패키지명 검색
apt-cache search lsscsi # 해당 명령어가 속해있는 패키지명 검색
apt-cache show lsscsi 명령어로 해당 명령어가 속한 패키지명 검색
apt-get install lsscsi
apt —fix-broken install -> Y -> 1 → dpkg -l | grep amanda
apt-get install lsscsi
lsscsi # 디스크 정보 확인할 수 있는 명령어
우분투에서 파일 관리
1) tar --> 압축이 필요
3) wget
다른 서버에서의 접속, 파일 주고받기
💡
https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-ssh%EB%9E%80/
SSH(Secure SHell)
네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 의미합니다. 즉, 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해서 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜입니다.
# 서버1에서
$ apt-get update
$ apt-get install net-tools vim openssh-server ssh
$ service ssh start
$ ssh user01@localhost
# 서버2에서
ssh user01@localhost -p 22
# 실습: 서버1의 /etc/ssh/sshd_config에서 PermitRootLogin이라는
# 옵션을 찾아 옆에 있는 값을 yes로 변경해주세요.
# 비밀번호를 지정해주지 않았기 때문에 외부 접속용으로 이번 기회에 만들어줍니다
passwd root
파일복사
💡
SCP(Secure Copy)
ssh 원격 접속 프로토콜을 기반으로 한 SecureCopy(scp)의 약자로서 원격지에 있는 파일과 디렉터리를 보내거나 가져올 때 사용하는 파일 전송 프로토콜입니다.
실습: history 명령어를 사용하여 지금까지 입력한 모든 명령어를 history.txt에 저장한 후 usr 폴더 안에 history_list라는 폴더를 만들고 거기에 저장해주세요.
1. 파일을 로컬에서 원격지로 보낼 때
가. 파일을 보낼 때
sudo scp -r new_file_from_server2 root@127.0.0.1:/usr/history_list
scp [옵션] [파일명] [원격지_id]@[원격지_ip]:[받는 위치]
나. 파일 여러개를 보낼 때
scp [옵션] [파일명 1] [파일명 2] [원격지_id]@[원격지_ip]:[받는 위치]
다. 파일과 폴더를 모두 보낼 때
scp [옵션] [디렉터리 이름] [원격지_id]@[원격지_ip]:[보낼 경로]
2. 파일을 원격지에서 로컬로 가져올 때
가. 파일들을 가져올 때
sudo scp -r root@127.0.0.1:/usr/history_list /test
scp root@127.0.0.1:"/tmp/testclient/testfile2 /tmp/testclient/testfile3" /test
# 보낼 때랑 다르게 받을 때는 원격지 경로의 파일을 " " (큰따옴표)를 사용해서 묶어줍니다.
나. 파일과 디렉토리를 모두 가져올 때
scp [옵션] [원격지_id]@[원격지_ip]:[디렉터리 위치] [받을 경로]
'Tech Stack > Linux' 카테고리의 다른 글
우리 FISA 4주차 복습 - Linux 2 (0) | 2023.12.20 |
---|---|
우리 FISA 4주차 복습 - Linux 1 (2) | 2023.12.19 |