Notice
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

정보통신공학과 노선변경기

리눅스 기초 3일차 UMASK, SHELL, CUT, AWK 본문

Sub2_리눅스 기초

리눅스 기초 3일차 UMASK, SHELL, CUT, AWK

HEONPOLI 2021. 5. 10. 22:22

chmod 777 aa ==>other에서도 읽기쓰기 실행을 할 수 있는 문제점이 있다.

원래 파일은 일반적으로 읽고쓰기 권한이 거의 다인데, 실행권한이 주어지면 초록색으로 강조된다.

파일의 full permission = 666, 디렉토리의 full permission = 777

기본적으로는 file 644권한을 default로 갖고 생성된다.

 

*UMASK, 기본권한을 설정

기본: umask = 0022, default를 만들어놓았는가?= 보안상의 이유, 실행권한이 있다면 뭐가 있는지 모르는데 접근가능하다면 위험하니까..,

022를 줘도 0022로 되는 이유→ umask에서는 special permission(1755같은것)을 따로 명시하지 않기때문.

파일= 666-027 = 640, 666-022 = 644

*0027로 둔다면

파일 권한 → 640 other 는 읽기가 안돼, 보안성이 더 크다

디렉토리 권한  chmod o+w aaa ,,,,other write권한부여하면 색깔 하이라이트되서 나온다. 파일을 아무나 생성, 삭제가능하다는 뜻

현재 터미널에서 umask 바꾼다고 해도 로그인하는 모든 사용자에게 적용되거나 하지않는다.

 

.bash_profile == 로그인할 때 적용되는 설정 보관

특정 사용자에게 반영  bash_profile umask값 따로 명시해줘야한다.

 

***********SHELL 명령어 사용*************
ls ~- ==>
이전 디렉토리 의 ls, ls ~+ ==> 현재 디렉토리의 ls

*별표문자

ls fi* ==> fi포함 하나이상의 문자를 포함하는 list 보여준다.

*물음표문자

하나의 문자대체

*대괄호 문자

aa[ad] ==> aaa or aad 를 이야기한다. ex) ls -ld aa[ad] aaa aad 모두 출력

*인용부호 메타문자

echo ==> 화면에 출력을 해준다. ex) echo user ==> user라는 글자가 출력

$가 앞에 붙으면 변수 혹은 환경변수를 의미한다. echo $user ==> user라는 변수내용 출력

변수 선언할 때 대문자는 이미 환경변수로 설정된 단어가 있을 수 있으니 웬만하면 소문자로 선언.

ex) a=10 , echo $a ==> 10이 출력됨

‘ : 변수를 무시하고 실행  ex) echo ‘$USER’ ==> USER 환경변수의 내용이 아닌 $USER 그대로 출력

“ : 변수를 인정하여 실행  ex) echo “$USER” ==> USER 환경변수의 내용이 출력, $가 없는 부분은 그대로출력

`, $( ):  안에 들어가는 명령어의 실행을 의미한다. ex) echo `ls -l` ,,,,, echo $(ls -l)

 

 

*파일 디스크립터

cat /etc/* 1> tmp/aa 2>&1 ==> cat의 결과물을 tmp/aa에 출력하고, 에러(2) 1에 또한 저장

<: 표준 입력, >: 표준 출력

cat < aa 2> bb ==> aa cat redirection하고 그에대한 에러만 bb에 넣어라

0: 표준 입력(생략가능) , 1: 표준 출력, 2: 표준 에러

 

*파이프문자

선행 명령어의 output을 후행 명령어의 input으로 집어넣는다.

ex) ls -l | more ==> ls -l 의 결과를 more input으로 넣고 출력

 

echo $? ==> 앞의 명령어, 출력에 오류가 있다면 1, 없다면 0으로 출력

a 파일이 없는상황 에서

ex)  cat a && ls -l ==> a가 없으므로 출력결과 아예없음, 앞의 명령어 참 거짓 따라 뒤의 명령어 실행

ex)  cat a ; ls -l ==>a 가 없다는 거짓임에도 ls -l 의 명령어 실행

 

*명령어 히스토리

.bash_history 에 히스토리값이 저장된다. 히스토리는 logout을 할 때 생긴다, 버퍼에 쌓아뒀던 히스토리를 로그아웃하면 .bash_logout에 집어넣는다.

앞으로 만드는 user umask 값을 고정하고 싶다?=> /etc/skel/ .bashrc 에서 umask 값 넣어주고 useradd

/etc/skel/ 밑에 파일이나 디렉토리 생성시키면 새로운 user 생성할 대 그 파일이 그대로 새로운 user의 홈디렉토리에 생성된다.

History 명령어는 버퍼에 다 쟁여놓지만, 파일에 저장되는 히스토리인 .bash_history에는 로그아웃해야 버퍼가 적용된다.

History 검색으로 나온 명령어들, !명령어 숫자 ==> 실행된다. ex) history에서 114 clear ==> !114 하면 clear

ctrl + r ==> 히스토리에서 최근 실행한 명령어를 검색

************Shell programing*************

 

(gedit data ==> g 에디터로 data 파일 만들고 거기에 우분투 data 붙여넣기 진행해줬음)

*cut (잘라내서 없애는게 아닌 잘라내서 그것만 보여주는 것)

형식 

 cut [옵션] “파일이름

사용 예  #cut –c 2-4 data

옵션  

-c 문자수로 열을 계산해서 출력한다

-s <구분자> 필드 구분자를 사용한다.

-d <구분자> 파일 내의 필드로 따져서 추출한다.

-f  field 의 약자

(((etc/passwd cut 적용..)))

cut -d “:” -f 1,3,7 /etc/passwd  ==> : 구분자를 기분으로 1,3,7 필드를 가져와서 출력

그것을 위의 5개만 표현 ==> cut -d ":" -f 1,3,7 /etc/passwd | head 5

 

*paste 

형식    paste [옵션] “파일이름”“파일이름

사용 예 #paste –d : exam1 exam2

옵션    -s 한 파일의 내용을 한 줄로 보여준 후 다른 파일의 내용을 한 줄로 덧붙인다. 

         -d 출력되는 내용의 구분자를 지정한다.

*sort

형식  

sort [옵션] “파일이름

사용 예  # sort –k2 –r data

옵션   -f 대소문자를 구분하지 않는다.

         -r 내림차순으로 정렬

        -b space를 무시한다.

        -k 필드 번호를 나타낸다.

        -t <구분자> 필드 구분자로 <구분자>를 사용한다.

        -n  숫자 순서로 정렬

sort를 옵션 없이 사용할 경우에는 첫 번째 필드를 기준으로 오름차순으로 정렬된다.

 

sort -t " " -k2 data ==> 공백을 기준 두번째 필드로 data를 정렬

sort -t : -k3 -n /etc/passwd | head -10  ==> 콜론 기준 세번째 필드를 숫자로 인식하여 위의 10줄 출력

sort -t : -n -k3 /etc/passwd | cut -d : -f 3 | head ==> 콜론기준 세번째 필드를 숫자로 인식하고, 콜론기준 세번째 것만 잘라서 head 10줄 출력

cut -d : -f 3 /etc/passwd | sort -n | head ==> 콜론기준 세번째 필드 잘라서, 숫자로 오름차순 정렬, 위의 10

 

-t 뒤에는 반드시 arguement(구분자)가 나와야한다.

 

 

 

 

*SED

sed -n '/011/p' data ==> 011 들어가는 줄 보여준다

sed '/011/d' data  ==> 011 들어가는 줄 삭제하고 보여준다.

sed '/seoul/d' data ==> seoul 들어가는 줄 삭제하고 보여준다

 

echo "s/japan/bosung/g" > sedfilter1

sed -f sedfilter1 data ==> japan bosung으로 바꾼 결과 출력

cat > sedfilter2 ==> cat을 이용한 필터를 적용할 때 옆으로 나열 X, 필터링 하나당 엔터로 줄교환

df -hTP | sed ‘2,$s/%/ /g’ ==> df의 결과를 2번째줄부터 마지막까지 %를 공백으로 교체해준다.

 

*awk

 awk '{print $3,$1}' data

 ls -l | grep ^d | awk '{print $1, $3, $9}' ==> ls -l 중 디렉토리를 1,3,9번째값만 출력해서 보여줌

ls -l | awk '$5 > 4096{print $0}' ==> 5번째가 용량인디, 4096 넘기는줄 전체출력(=$0)