본문 바로가기
2022-2/시스템 프로그래밍

2장 - 리눅스 사용

by 철없는민물장어 2022. 10. 7.
728x90
반응형

기본 명령어

 

date

hostname: 호스트 이름 확인

uname: 운영체제 확인

whoami: 사용자 정보 확인

whatis 명령어 : 명렁어에 대한 간단한 설명

 


2.2 파일 및 디렉토리

 

파일의 종류

일반 파일

디렉토리 파일: 디렉토리 파일의 내용은 디렉토리가 가지고있는 파일,디렉토리인가봄

특수 파일: 물리적인 장치에 대한 내부적인 표현(프린터 출력 -> 프린터 파일에 쓰기 연산 수행)

 

디렉토리 계층구조

리눅스 디렉토리는 루트로부터 시작, Tree형태의 계층구조를 이룬다.

 

디렉토리 관련 명령

pwd 

cd

which 명령어: 명령어의 절대경로를 보여준다.

mkdir 디렉토리

mkdir -p 디렉토리: 필요한 경우 중간 디렉토리를 자동으로 만들어준다. mkdir ~p ~/dest/dir1 => dest디렉토리가 없어도 만들어줌

rmdir 디렉토리+: 빈 디렉토리만 삭제가능. 

ls [-aslFR] 디렉토리 파일: 지정된 디렉토리의 내용을 리스트함. (지정하지 않으면 현재 디렉토리), 파일을 지정하면 해당 파일만 리스트함

 

경로명

절대경로: /home/chang/test.txt

상대경로: ./test.txt  요런거

 

파일 관련 명령어

cat 파일명 : 파일 내용 출력. 여러개도 되고, cat > test.txt 하면 키보드로 입력받아 파일에저장도됨

more, head, tail

wc 파일명: 파일에 저장된 줄(-l),단어(-w),문자(-c)의 개수 출력

 

cp 파일1 파일2 : 파일1의 복사본 파일2를 현재 디렉토리에 생성

cp 파일(들) 디렉토리: 파일의 복사본을 디렉토리 내에 생성

cp -r 디렉토리1 디렉토리2: 디렉토리1을 디렉토리2로 복사. 하위파일도 복사됨

 

mv 파일1 파일2 : 파일1의 이름을 파일2로 변경

mv 파일1 디렉토리: 파일을 디렉토리 내로 이동. 

대화형 옵션은 -i임.

 

rm 파일(들): 파일 삭제

rm -r 디렉토리: 디렉토리 내의 모든 파일 및 하위 디렉토리들 모두 삭제


2.3 파일 속성

 

파일의 이름, 타입, 크기, 소유자, 사용권한, 수정시간

 

일반파일(-), 디렉토리파일(d) , 심볼릭링크(l)

 

사용 권한

읽기(r),쓰기(w),실행(x)권한

소유자(u)/그룹(g)/기타(o) 별로 사용권한이 다름.

rwxrw-r--

 

사용권한 관련 명령어

chmod [-R] 사용권한 파일: 사용권한 변경. -R옵션은 하위 파일도 함께 변경

숫자로 표시: chmod 664 test.txt 

기호로 표시: chmod g+w, o+rw test.txt

 

umask 숫자: 기본 권한 설정. 권한을 주지 않을 값을 지정해야함

umask 22 ==> 기본권한이 644 또는 755가 됨. (실행불가능한 일반파일은 최대권한이 rw-rw-rw라서 666이고 여기서 022빼면 644가됨)

 

chown 사용자 파일

chown [-R] 사용자 디렉토리 : 소유자 변경

chgrp 그룹 파일

chgrp [-R] 사용자 디렉토리: 그룹 변경

파일의 소유자 또는 슈퍼 유저만 변경 가능함.

 


2.4 입출력 재지정 및 파이프

 

출력 재지정: 표준 출력을 모니터에 출력하는 대신 파일에 저장. >(꺾쇠) 사용.

명령어>파일

who > names.txt 

cat > names.txt

ls / > list.txt

cat list1.txt list2.txt > list3.txt : 파일 병합도 가능

 

출력 추가: 명령어의 표준출력을 기존 파일 뒷부분에 추가.

cat >> list1.txt

 

입력 재지정: 명령어의 표준입력을 키보드 대신 파일에서 받음

명령어 < 파일

 

표준 에러 재지정

cat x y 1>hold1 2>hold2 : 표준출력은 hold1에, 표준에러는 hold2에 출력

 

파이프

명령어1 | 명령어2

명령어1의 표준출력을 명령어2의 표준입력으로 바로 받는다.

 

who | sort

who | wc -l 

 


2.5 후면 처리 및 프로세스

 

전면 처리: 명령어 실행이 끝날 때까지 쉘이 기다려주고, 명령어가 전면에서 실행됨

전면처리 ^D: 입력 종료, ^C: 강제 종료, ^Z: 실행 중단.

 

후면 처리: 명령어들을 후면에서 처리하고 전면에서는 다른 작업을 할 수 있음.

명령어 &

find . -name test.c -print &

 

jobs : 후면 실행 작업 목룍을 표시

fg %작업번호 : 해당 작업을 전면으로 실행

 

후면처리 입출력: 파일로 저장 혹은 메일로 전달

find . -name test.c -print > find.txt & 

find . -name test.c -print | mail chang &

 

bg %작업번호 : 전면 작업의 후면 전환

 

프로세스

실행중인 프로그램을 프로세스라고 함. 각 프로세스는 PID를 가짐

ps : 프로세스 확인

pgrep [옵션] [패턴]: 특정 프로세스 리스트 확인

 

kill PID

kill %작업번호 


파일 관련 유틸리티

 

grep 

grep 패턴 파일 : 파일을 대상으로 패턴의 문자열 검색

옵션: -i(대소문자 무시), -n(줄번호 출력), -w(패턴이 하나의 단어로 된 것만 검색), -v(패턴을 포함하지 않는 줄 출력)

 

정규표현식

. : 임이의 한 문자

* : 0개 이상

?: 없거나 한 글자

[ ] : [ ] 안의 문자 중 하나[Pp]attern: Pattern 또는 pattern 

^: 라인의 시작

$: 라인의 끝

[^]: 괄호 한에 있는 글자가 아닌 글자. [^a-m]att: att앞에 a부터m까지 나오지않는 라인 검색 

 

정렬

sort [-옵션] 파일: 파일의 내용을 줄 단위로 정렬.

-r: 내림차순

정렬필드 지정: -k 필드번호 ==> 필드번호에 해당하는 필드를 기준으로 함. 첫번째 번호는 1임

-n: 숫자 값에 따라 비교정렬

-t: 지정한 문자를 필드구분자로 사용.(기본은 띄어쓰기)

-o 출력파일: 정렬된 내용을 지정된 파일에 저장

 

비교

cmp 파일1 파일2: 두 파일이 같은지 비교. 다르면 서로 달라지는 위치 출력

diff 파일1 파일2: 두파일을 줄 단위로 비교하여 차이를 출력

 

링크

ln [-s] 파일1 파일2

ln [-s] 파일(들) 디렉토리 

 

심볼릭 링크: 원래 파일의 위치에 대한 정보가 들어있어서, 원본이 삭제되면 참조 불가

하드 링크: i-node가 같아 한 파일을 수정하면 나머지 파일도 수정됨. 원본 개념이 없어지고 같은파일의 이름이 두개가 됨

(하나를 지워도 나머지 하나로 사용가능)

 

링크는 둘 중 하나를 수정하면 두 파일이 같이 수정됨. 파일을 공동으로 관리해야 할 때 사용

 

파일 찾기

find 디렉토리 [-옵션] 

find . -name "*.log" -mtime +30 -perm /7000 

 

-exec 명령 {} \; 

 


명령어 스케줄링

 

cron 시스템

crontab 파일에 명시된 대로 주기적으로 명령을 수행한다.

 

$ crontab 파일 : crontab 파일을 cron시스템에 등록

 

crontab파일은 7개의 필드로 구성.

분 시 일 월 요일 [사용자] 명령

ex) chang.cron

30 18 * * * rm /home/chang/tmp/*

 

$ crontab chang.cron: cron 작업 등록.

 

 

ex2) 30 1 * 2,4,6,8,10,12 3-5 명령: 2개월마다 수-금까지 새벽1시30분에 명령어 실행

 

at 명령어 : 미래 특정 시간에 명령어가 한 번만 실행되도록 함

at [-옵션] 시간

 

작업제어 명령 - nohup

백그라운드 작업을 실행시킨 단말기가 종료되거나 사용자 로그아웃되어도 작업이 완료될때까지 실행시키기.

 

$ nohup 백그라운드 명령

$nohup find / -name passwd &

 

실행결과는 nohup.out파일에 저장됨


디스크 및 아카이브

$df 파일시스템

 

$ du [-s] 파일명: 파일의 디스크 사용량을 보여줌. (-s는 전체 합계 표시)

$ du : 현재 디렉토리의 모든 파일의 사용량 정보 표시

 

아카이브

tar 명령어

 

tar -cvf 타르파일 파일(들) : 파일들을 타르파일로 묶음

tar -xvf 타르파일 : 타르파일을 풀어서 복원

tar -tvf 타르파일 : 타르파일 내용 확인 

tar -rvf 타르파일 파일: 기존 타르파일에 파일추가

 

 

파일 압축:

gzip [옵션] 파일(들)

-d: 압축해제

-l : 압축파일 안의 파일정보 출력

-r: 하위디렉토리까지 압축

 

$gzip -d src.tar.gz

$ tar -xvf src.tar

 


2.6 쉘 소개

쉘의 역할: 명령어 해석기, 사용자 인터페이스

 

본 쉘 /bin/sh  - 가장 먼저 만들어진 쉘. 유닉스에서 기본 쉘임 $

콘 쉘 /bin/ksh - 본쉘 확장

C쉘 /bin/csh - %

Bash /bin/bash - 본 쉘을 확장하여 개발. 대부분의 본쉘 스크립트는 bash에서 정상동작함

tcsh /bin/tcsh

 

로그인 쉘: 로그인 하면 자동으로 실행되는 쉘. 

 


 

쉘 명령어 처리

 

입출력 재지정 > >> < <<

파이프 |

 

복합 명령어

명령어1; 명령어2;

 

명령어 그룹

(date; who; pwd;) > out2.txt 

 

조건 명령어 열

명령어1 && 명령어2 : 명령어1 성공시 명령어2 실행

명령어1||명령어2: 명령어1 실패시 명령어2 실행

 

명령어 대치

`역따옴표` 로 에워싸면, 그 명령어의 실행 결과로 대치된 후에 실행됨

$ echo 현재 시간은 `date`

$ echo 현재 디렉토리 내의 파일 수: `ls | wc -w`

 

Shell Escape

따옴표를 이용하여 대치 기능을 제한.

$ echo 3 * 4 = 12

요렇게 쓰면 *을 모든 문자로 해석해서 파일들이 출력됨.

$ echo "3 * 4 = 12"

$ echo '3 * 4 = 12'

 

싱글 따옴표는 단호하게 shell escape

쌍따옴표는 좀 기웃거려도 해석해줌 "요기안에 `명령어대치`" 넣으면 명령어 대치는 실행됨

 


쉘 스크립트

 

vi 쉘스크립트.sh

 

#!/bin/bash

echo 현재시간: `date`

 

요런식으로 작성하고

chmod +x 쉘스크립트.sh 하여 실행모드권한 주고

$ 쉘스크립트.sh 하면 실행됨

 

set-uid

setuid 설정된 파일을 실행하면, 실행하는 동안 그 파일의 소유자 권한을 갖게 됨.

root소유의 파일이 setuid설정되어있고 내가 그 파일을 실행하면 root권한을 갖게됨;;

 

권한에서 +4000하면 setuid, +2000은 setgid, +1000은 stickybit임.

 

$chmod 4755 file

$chmod u+s file

 

 

728x90
반응형

'2022-2 > 시스템 프로그래밍' 카테고리의 다른 글

gdb 디버거  (3) 2022.10.14
make 시스템  (0) 2022.10.11
3장 - C프로그래밍 환경  (0) 2022.10.07
1장 - 유닉스 리눅스 소개  (0) 2022.10.07
리눅스 여러가지 명령어들  (0) 2022.09.18

댓글