본문 바로가기

Tech Stack/Linux

우리 FISA 4주차 복습 - Linux 3

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