리눅스의 파일권한, 순환문(for,while) 및 조건문

msung99·2022년 9월 30일
0
post-thumbnail

리눅스의 파일권한

각 파일에 대해서는 read, write, execute 할 수 있는 권한이 있다.

디렉토리 - 디렉토리를 읽고/쓰고/실행할 수 있는 권한

  • r : 해당 디렉토리에 있는 파일을 읽을 수 있는권한
  • w : 해당 디렉토리에서 파일을 생성,변경,삭제할 수 있는 권한
  • x : 해당 디렉토리로 갈 수 있는 권한( cd )

파일 & 디렉토리에 대한 3가지 권한단계

  • User, Group, Other

리눅스의 파일권한

특정파일의 특성 및 권한 확인하기

  • ls -ㅣ : 현제 위치에 있는 내용(디렉토리, 허가권, 파일 등)을 확인
명령어1)
$ ls -l | awk '$1~/^-/{print $0}'

=> "-" : regular file 을 의미. 
즉 ls -l 명령어를 regular file 에 대해서만 실행하겠다는 것 
( = regular file 에 대해서만 정보를 확인한다.)

=> print $0 에서 $0 : 다 보겠다는 것을 의미.

출력결과 : -rw-r--r--  
=> 해석 : 해당 regular file 에 대해 
owner 는 읽고 쓰는 권한만 있고,
group 은 읽는 권한만 있고,
others 는 읽는 권한만 있다는 것

=======================================================

명령어2)
$ ls -l | awk '$1~/^d/{print $0}'

=> "^d" : directory file 에 대해서만 확인

출력결과 : brw-rw---- : 해당 block special file 에 대해 

File Creation Mask

umask (user mask) : 파일에 디폴트 권한을 부여하는 것

  • 0022 : group 과 ohter 에게 write 권한을 주지않겠다는 것
0022 분석

0 : - (regular file)
0 : --- (rwx 권한 중에 아무권한도 없음)
2 : user
2 : group
=> 해석 : user 와 group 에게 regular file 에 대한 write 권한을
부여하지 않겠다는 것 

chmod 명령어

  • 추가 권한을 변경하는 명령어 (change mode command)

형태 : chmod < mode > < file/directory name >

chmod 로 권한을 변경하는 방법 2가지

1.Octal Mode

  • 755 와 같은 숫자와 함꼐 user, group 에 대한 rwx 권한을 부여가능하다.

2.Symbolic Mode

  • 숫자말고 직접 입력해서 권한 부여하는 방법
$ chmod u-x hello.sh 
=> hello.sh 파일에 대해 user 가 실행할 권한을 제거

$ chmod ugo-rx hello.sh
=> hello.sh 파일에 대해 u(user), g(group), o(owner) 가 
read 하고 write 할 수 있는 권한을 제거

$ chmod a=rw hello.sh
=> a(all을 의미. 즉, user + group + owner) 가 
read 하고 write 할수 있는 권한을 부여 (이때는 대입연산자 = 를 사용)

$ chmod +x hello.sh
=> (a를 생략가능함) a 에게 실행한 권한을 추가

u : owner
x : 실행할 권한 

First Script

Shebang (or Shabang)

  • 모든 shell interpreter 는 "#!" 로 시작한다. 이때 "#!" 를 shebang 이라고 한다.

  • 우리가 스크립트를 실행시 interpreter 가 실행된다.
    이떄의 interpreter 의 종류를 알려준다.
    ( bash 말고도 다양한 shell 이 있고 기능이 달라서, 알려줘야함 )


Positional Parameters

  • 함수에서 인자를 전달할때 positional parameter 를 사용했듯이, shell script 에서도 postitional parameter 를 사용 가능하다.
$ x.sh {A..Z} => A~Z 까지 26개의 인자가 전달됨


echo $4 ${15] $7 $3 $1 ${20}
=> shell script 내부에서 $1, $2, ... 와 같은 positional parameter 를 사용할 수 있다. 

Shell script 의 특수한 인자들

$0 : 현재의 shell script 의 이름을 출력
$# : positional parameter 의 개수를 출력
$* : 모든 positional parameter 를 출력
$? : 가장 최근에 마지막으로 실행된 종료상태(Exit Status) 값을 출력
$$ : current process 의 pid 값을 출력

cf) pid(Process ID)는 운영체제에서 프로세스를 식별하기 위해 프로세스에 부여하는 번호를 의미한다.

예제

  • inode 의 숫자를 추출해내는 프로그램 예제
  • 노란색 부분은 shell script 이고, 파란색 부분은 일반적인 bash shell 이다.
#! /bin/bash  

=> shabang

INUM=$(stat $1 | awk '$3~"Inode"{print $4}'

=> stat 이라는 명령어를 통해 첫번쨰 인자(= 내가 보고자하는 파일) 
에 대해 awk 로 출력문을 작성.
첫번쨰 인자(파일 정보) 의 3번째 열에서 "Inode" 라는게 있다면 4번쨰 인자를 출력

read 명령어

  • shell script 사용시 사용자로 부터 동적으로 데이터를 받아오는 명령어
  • 형태1 : read (할당시켜줄 변수명)
  • 형태2 : read -p (문구) (할당시켜줄 변수명)
  • 형태3 : read -s (할당시켜줄 변수명) : 사용자가 입력하는 문자열이 화면에 보이지 않도록하며 입력을 받아옴

예제

아래와 같이 read 로 한번에 여러 변수에다 데이터를 입력받고 할당할 수 있다.

"-s" 옵션을 부여할시, 데이터를 입력받고 있을때 해당 데이터가 화면에 출력되지 않음

"-p" 옵션을 추가해서 데이터를 입력받을 때 문구를 추가가능


1) awk -v num = $n '$1==num {print $0}' | wc -1 

=> n은 상수가 아닌 변수이다. 
awk 의 "-v" 옵션 : 변수를 만드는 옵션

"-v" 윱션을 통해, $n 이라는 변수를 num 이라는 변수로 보자고 설정하는 것 
=> 즉, num 이라는 변수를 생성하고 $n 변수가 가지고 있던 값을 할당하는 것이다.

positional parameter 인 $1 와 num 의 값이 같으면 출력한다.

==============================================


2) if [ $response -eq 0 ] 
=> 앞서 선언한 shell 변수인 response 의 값이 0과 같다면 실행

test

  • if 문과 같은 곳에서 테스트를 실행해볼 떄 활용

형태1 : test 테스트해볼 구문
형태2 : [ 테스트해볼 구문 ]

정수를 테스트할떄 사용되는 옵션

  • "-eq" : equals

  • "-gt" : greater than

  • "-lt" : less than


문자열을 테스트할떄 사용되는 옵션

  • "=" : 같은지 판단
  • "!=" 다른지 판단
  • "-z" : 문자열 길이가 0인지
  • "-n" : 문자열 길이가 0이 아닌지

예제


파일들을 테스트할때 사용하는 옵션

  • "-e" : 파일이 존재하는가
  • "-f" " regular file 이 존재하는가

예제


위 명령어들 + 키워드들을 여러개를 동시에 조합도 가능하다.

  • if, than, else, fi 등의 여러 명령어를 가지고 if문을 구성할 수 있다.

if문

if 문의 형태

예제

if ls &> /dev/null; then echo yes; fi

=> ls 명령어의 실행결과가 false 라면, 에러메시지를 모두 블랙홀로 보낸다.
반대로 true 라면 "yes" 를 출력헌다.

$ if [ -n "kor" ] 
=> 문자열 "kor" 의 길이가 0이 아닌지

예제1

$# : 해당 shell program 에 전달받은 인자의 개수

if [ $# -ne $NARGS] : 전달받은 인자의 개수가 2개가 아닌지 판단

예제2

read password 에서 문자열을 입력할떄 아무 것도 입력하지 않고 
null 문자열이 할당된다.

그런데 if 문안에서는 "=" 는 이항 연산자로써 2개의 피연산자(인자)를 비교해야 하는데
$password 라는 인자에 null 문자열이 할당되어서 에러가 발생할 수 있다.

=> 그래서 일반적으로 shell 변수를 다룰때는 문자열일떄 큰 따옴표를 붙여서
직관적으로 명시하는 것이 좋다. 이러면 null string 문제도 발생하지 않음!

cat/.profile

  • 로그인할때 자동으로 수행하는 스크립트 파일

if [-n "$BASH_VERSION" ]  

=> BASH_VERSION 이 0이 아니라면 == bash 버전에 설치되어있다면 

if [ -f "$HOME/.bashrc" ] 

=> HOME 디렉토이안에 hashrc 라는 regular file 이 존재한다면

. "$HOME/.bashrc"  

=> 명령어 "." : shell script 를 실행시키는 명령어 
(즉 $HOME/.bashrc 라는 쉘 스크립트를 실행시킨다)

Case 문

  • 형태
case 변수명 in
pattern )         // 첫번째 case 절
command-list ;;
pattern )         // 두번쨰 case 절
command-list ;;  

.
.
.
command-list ;;  // 그냥 pattern 없이 실행문만 적으면, 디폴트 문이 된다.

esac  
  • pattern 안에는 reuglar expression, 와일드파트, 논리연산자 등을 다양하게 사용가능
  • 각 case 절은 세미콜론 2개 ";;" 로 끝난다!
  • esac : case 구문의 종료지점


예제

  • 각 pattern (case절) 은 위에서 보듯이 와일드카드를 가질 수 있다.
    ( => 와일드카드 종류 : *, ?, a~z 사이의 문자 등등)

  • 다수의 pattern 들은 "|", "&" 등의 연산자로 처리가능


수학 연산

  • 수학(수식) 연산은 명령어 "let" 과 "(())" 를 통해 수행 가능하다.


While 문

while문 형태

예제

  • 반복문의 제어변수 n 을 선언하고 초기값을 1로 설정
  • n이 5보다 작을떄까지 반복

while 문 무한루프

  • test command 자리에는 if문에서도 봤듯이, 반드시 test command 만 올수 있는 것이 아니라 true, false 와 같은 간단한 명령어도 올 수 있다.

무한 while 루프는 test command 자리에 true 를 넣으면 끝!

형태

while true
do
  실행구문 ~~
done 

while문 예제


until 문

until문 형태

while 과 until 의 차이

  • while 은 test 결과가 true 일때만 실행한다
  • until 은 반대로 false 일떄만 실행한다.

예제 - until 과 while 문 비교하기

  • 둘은 완전히 동일한 기능을 수행하는 프로그램이다.

  • 단 while 문은 true 일떄, until 은 false 일떄 실행되므로
    둘다 동일하게 실행되기 위해서는 while 문에 있는 test-command 조건을 반대로 뒤집어서 until 문의 test-command 에 넣으면 된다.

( while 문은 변수 n이 5보다 작을때 실행하는데, until 문은 5보다 클때 수행한다. )


break 와 continue

  • break 를 만나면 반복문을 탈출
  • continue 를 만나면 그 밑의 코드들은 수행하지않고 다시 condition 을 체크하고 반복문 실행여부를 결정함


for문

형태

  • 파이썬, 자바등의 for-each 문과 형태가 유사
for 반복변수 in 리스트
do
  명령들~~
done

for문에 올수있는 리스트 종류

1.숫자들 - ex) for i in 1 2 3 4 5
2.리눅스 명령어 실행결과 - ex) for i in $(seq 1 5)
3.문자열 - ex) for fruit in apple grape orange
4.파일이름 - ex) for frname in *
5.command line arguments

cf) seq 명령어 : 주어진 범위에 있는 숫자들을 출력하는 명령어
ex) $(seq 1 5) => 1 ~ 5 사이의 숫자들을 출력

예제


Select문

형태

예제

profile
https://haon.blog

0개의 댓글