본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

Personal/Book

모두의 리눅스

미야케히데아키/오스미유스케

 

 

 

 

리눅스를 공부할때 중요한것은 사용밥법에 익숙해지는 것입니다.

리눅스는 오픈소스로 누구나 자유롭게 무료로 사용할 수 있습니다. 개발환경 구축이 용이하며 비용이 발생하지않습니다. 리눅스는 매우 편리하고 재미있습니다. 리눅스는 윈도나 맥보다 사용 애플리케이션이 많지않습니다. 특히 마이크로소프트 워드나 엑셀을 편집하려면 리브레오피스 같은 프로그램을 사용해야합니다. 한글 대응이 부족한 것도 리눅스의 단점입니다. 

리눅스 배포판은 대표적으로 레드햇 계열과 데비안 계열이 있습니다. 

이책은 데비안 계열 우분투를 사용하며 편의성이 좋아 인기가 좋습니다. 

리눅스를 설치하는 방법은 컴퓨터에 직접 설치하는것이지만 간단한 작업이 아니고 자칫 잘못하면 현재 환경이 망가집니다. 그러기에 가상화 소프트웨어를 사용해 가상 컴퓨터, 가상머신에 리눅스 환경을 구축합니다. 

가상화 소프트웨어 중에서는 오라클이 제공하는 오라클 VM 버츄얼 박스가 유명합니다. MAC OS 에서도 잘 동작합니다. 

https://standout.tistory.com/70

 

Unix 유닉스와 Linux 리눅스, 운영 체제

운영체제 Operation System(OS) 컴퓨터 하드웨어를 관리/조작하는것. 운영체제하면 Window를 많이 떠올리게 되는데, Window는 마이크로소프트에서 개발한 운영 체제로 사용자 중심적인 UI(User Interface)와

standout.tistory.com

https://standout.tistory.com/75

 

언어의 과정, 리눅스타임라인 Linux timeline

리눅스타임라인 Linux timeline 오픈소스 *리눅스 언어가 뻗어나가는 과정, 그 역사를 보여준다. https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC:Linux_Distribution_Timeline.svg 파일:Linux Distribution Timeline.svg - 위키백

standout.tistory.com

https://standout.tistory.com/99

 

VM VirtualBox, 컴퓨터가상화 소프트웨어

여러운영체제를 사용하는 방법으로 멀티부팅과 가상화가 있다. 그중 가상화하게 도와주는 가상화 소프트웨어 VM VirtualBox에 대해 알아보자. https://standout.tistory.com/98 여러 운영체제 사용하기, 멀

standout.tistory.com

 

다음으로 우분투 이미지 파일 ISO를 내려받습니다. CD나 DVD 등 디스크를 파일로 만든것으로 버추얼 박스에서는 이러한 이미지 파일을 사용해서 물리적 디스크 없이 운영체제를 설치하는 것이 가능합니다. 

 

버추얼박스 - 새로만들기 - 종류:LINUX - 버전 UBUNTU 64 - 다음 - 1024메모리 선택 - 다음 - 지금 새 가상 하드 디스크 만들기 - 만들기 - vdi 하드디스크 기본값 선택 - 다음 - 동적할당 - 다음 - 10GB - 만들기 - 다운받은 ISO 파일선택 -  시작

 

한국어 선택 - UBUNTU 설치 - 키보드 레이아웃 KOREAN 선택 - 계속하기 - 업데이트 및 기타 소프트웨어 일반설치 - UBUNTU 설치 중 업데이트 다운로드 - 계속하기 - 설치형식 디스크를 지우고 UBUNTU 설치 - 지금 설치 - 계속하기  - 계속하기 - 사용자 설정 - 계속하기

 

로그인 진행

로리눅스는 여러 사용자가 동시에 사용하는 것을 전제로 하는 시스템이어서 로그인을 어떤 사용자로 인지를 리눅스에 전달합니다. 

실습환경에 따라 gui 기반로그인이 아닌 콘솔기반으로 표시되기도 한다. 

 

데스크탑화면 - 프로그램표시 - 터미널 

 

 

 

 

cp a.txt b.txt a를 b로 복사

ls a* 디렉터리 a로 시작하는 이름 파일 확인

grep "abc" sample.txt | sort sample.txt에서 abc 문자열을 검색해 정렬해 출력. 두 명령어를 |로 연결한것. 

exit 로그아웃

sudo su -, shutdown -h now 셧다운. 리눅스 셧다운. root user로 전환한 뒤진행해야한다. 

shutdown -r now 재부팅 or /sbin/shutdown -h now

date 현재 날짜와 시간

echo hello hello 출력

echo $SHELL 자신이 사용하고 있는 로그인 셸 확인, 로그인 후 처음으로 시작되는 셸을 로그인 셸 이라고 부른다.  별도로 지정하지않으면 /bin 디렉터리에 있는 bash 가 로그인 셸. 리눅스에서는 bash 외에도 다양한 셀을 사용할 수 있고 작성된 시대나 개발자의 철학에 따라 특징이 다르다. 

 - sh 긴역사를 통한 표준 셸 지위, 기능이 적고 대화형에서 사용하기 불편해 로그인 셸로 사용되는 경우는 거의 없다. 

 - csh C셸 이라고 불린다. sh보다 대화형 조작에 편리한 기능을 갖추고있어 인기가 많지만 문법이 sh와 달라 스크립트작성에 적합하지않다. csh의 뒤를 잇는 tcsh 가 나와 많이 사용하지 않는다. 

 - bash sh를 바탕으로 기능이 추가된 셸 sh와 호환성이 있어 sh를 대체 할 수 있다. 대화혀 조작에 필요한 기능을 갖추고있어 많은 리눅스에서 기본 로그인 셸 로 사용하고 있다. 셸 스크립트에도 적합하다. 

- tsch csh에 이어 개발된 C 셸 계열의 셸 대화형 조작에 편리한 기능을 갖추고 있지만 csh 와 마찬가지로 셸 스크립트에는 적합하지않다. tcsh등 C 계열에서는 일반 사용자 프롬프트가 $가 아닌 % 이다 . tsch는 현재 freeBSD의 로그인 셸로 사용되고있으나 사용자는 점점 줄고 있다. 

 - zsh 비교적 최근에 개발된 셸로 bash와 tcsh의 기능에 독자적 기능이 추가되어 다양한 기능을 갖추고있어 메뉴얼만 17개 섹션에 달한다. 모든 기능을 익히는데 시간이 걸리나 익숙해지면 작업 효율을 크에 높일 수 있다. 

 

csh와 tcsh 와 같은 C셸 계열을 셸 스크립트 관련 기능이 부족해 특별한 이유가 없다면 사용하지않는 것이 좋고 대화형 셸 기능은 zsh가 뛰어나 굳이 tcsh를 배우지않아도 된다. 

 

셸도 하나의 명령어에 불과하다. 사용하고 싶은 셸 이름을 입력하고 실행만 하면된다. 예로 sh enter시 프롬프트는 $로 바뀐다 .

 

 

 

 

터미널이란 컴퓨터 입출력만을 담당하는 전용 하드웨어  현재 리눅스를 다룰때 터미널을 사용하는 경 우는 거의 없다. 대신 소프트웨어로 구현한 터미널 에뮬레이터가 사용된다. 운영체제 별로 에뮬레이터가 다양하다. 윈도우에서 리눅스로 원격 로그인하면 터미널 에뮬레이터는 윈도 머신에서 돌아가며 셀은 리눅스 머신에서 돌아간다. 터미녈 에뮬레이터는 입출력 화면을 제공만 하는 소프트웨어로 리눅스 머신에서 돌아가는 셸의 입출력을 제공하는 소프트웨어가 바로 터미널 에뮬레이터. 

windows : putty, tera term

macos x : terminal, iterm2

linux: gnome terminal, konsole

 

 

셸 에서 프롬프트 기호 $ 뒤에 명령어를 입력하는 부분을 커맨드라인, 행이라고 한다. 

ctrl + f 커서 한문자 앞으로 이동

ctrl + b 커서 한문자 뒤로 이동

ctrl + a 커서 맨앞으로 이동

ctrl + e 커서 맨뒤으로 이동

 

meta는 일반적으로 esc, alt 에 해당한다. 

meta + F 한 단어 앞으로 이동

meta + b 한 단어 뒤로 이동

 

delete

ctrl + w 커서 뒤에 공백 전까지의 단어 삭제

ctrl + k 커서 위치에서 끝까지 삭제

ctrl + u 커서 위치에서 커맨드라인의 첫문자까지 삭제

ctrl + y 마지막으로 지운 내용을 삽입

 

ctrl + s 화면표시 잠금, 출력을 잠가도 문자열을 계속 입력된다 .화면에 아무것도 표시되지않는다면 ctrl + q

ctrl + q 화면 표시 잠금 해제

ctrl + c 실행중인 명령을 강제 종료

ctrl + l 화면에 표시되는 내용을 전부 지우고 커서를 좌측 상단으로 이동. clear 명령어와 동일한 기능. 안될경우 reset.

 

tab  bash에는 자동완성 기능이 있다. echo를 입력하기위해 ec만 입력하고 tab. 후보가 많다면 게속해서 tab.

ctrl + p 혹은 위화살표 바로 전 명령

ctrl + n 혹은 아래화살표 바로 전 명령

ctrl + r 이력 검색

 

 

리눅스는 파일로 구성된다. 사용자의 데이터 뿐 아니라 시스템을 구성하는 장치조차도 파일로 다룬다. 리눅스 커널도 파일이고 시스템 설정도 파일에 기록된다. 모든것을 파일로 다루기 때문에 파일 조작 방법을 익히는 것이 중요하다.  윈도도 리눅스와 비슷한 형태, 디렉터리 트리 구조를 가지나 윈도에서는 물리 디스크가 2개 있다면 디렉터리 트리도 2개이다. 리눅스에서는 언제나 시스템 전체에 단 하나의 트리만을 가지게 된다. 리눅스에서는 디스크가 여러개 있을때 루트 디렉터리의 어딘가에 해당 디스크의 디렉터리가 연결되고 디스크의 디렉터리를 연결하는 것을 마운트 라고 한다. 리눅스의 디렉터리 구조는 FHS Filesystem Hierarchy Standard 라는 표준 사양을 따른다. 

/bin 사용자가 사용하는 명령어 실행파일이 배치되어있다 .

/dev 디바이스 파일이 배치되어있다. 디스크, 키보드 등 하드웨어를 다루기 위한 특수파일

/etc 다양한 애플리케이션 설정파일, 리눅스 자체의 설정 파일도 있다. 

/home 사용자별로 할당되는 홈 디렉터리가 배치되는 디렉터리. 사용자 이름이 디렉터리 이름으로 사용된다. 

/sbin bin과 비슷하게 실행 파일을 포함하는 디렉터리, 관리자용도 포함되어있다.  shutdown 명령어 등이 이안에 포함. 

/tmp 임시파일이 들어있는 디렉터리 . 실행중 임시로 작업 결과를 파일로 보존할때 이 디렉터리에 저장한다. 정기적으로 파일을 삭제하도록 설정된 배포판도 있어 중요한 파일은 tmp에 넣지않는다. 

/usr 설치한 애플리케이션 실행파일, 문서, 라이브러리 이안은 bin, sbin, etc 등이 있어 루트 디렉터리와 구조가 비슷하다.

/var 변화하는 데이터를 저장하기 위한 디렉터리. 실행중에 만들어진 데이터나 로그 메일 등이 저장되며 이로인해 용량이 부족해질 수 있으니 주의한다. 

 

pwd 현재 디렉터리 출력

cd /usr /usr로 디렉터리 이동

ls 현재 디렉터리 파일과 디렉토리 출력

~ 홈 디렉터리로 이동

ls -a 숨겨진 파일도 함께 출력

ls -a -F /, ls -aF  / 루트 디렉터리를 인자로 지정.결과물에 / 이 추가된다. boot/

ls - w 30 30개의 ㅜㄴ자 출력

ls --quote-name, ls -quote 롱옵션, 파일이름을 ""묶어서 출력 "boot"

 

 

* 임의의 문자열

? 임의의 한문자

 

 

mkdir 디렉터리 만들기

ls -F ls명령어에 파일종류를 함께 출력하는 -F 옵션을 지정해 확인. 

touch newfile newfile이라는 파일 생성

rm newfile newfile 파일 삭제, 디렉터리 삭제도 가능 

rmdir 빈 디렉터리 삭제 rmdir는 빈 디렉터리가 아니면 에러를 출력한다. 

cat  newfile 파일내용 출력하기, 여러파일을 출력할 수 있다. cat /etc/hostnmae /etc/crontab

cat -n /etc/crontab 행 번호를 함께 출력하기, ctrl + d를 입력하면 cat이 종료된다 

 

less /ect/bash.bashrc 화면단위로 출력하며 위아래로 스크롤하여 파일을 볼 수 있게 한다.

space 한 화면 아래로 스크롤

b 한화면 위로 스크롪 

j 한 행 아래로 스크롤

k한 행 위로 스크롤

q less 명령어 종료

 

less로 열려있는 파일에서 /를 입력해 문자열을 검색할 수 있다.

/etc  아래방향을 ㅗ검색

?etc 위방향으로 검색

n 다음 검색결과 로 이동

N 이전 검색 결과로 이동

 

cp file1 file2 file1을 file2로 복사하기

cp file1 dir1 file1을 dir1안으로 복사하기

cp -i file1 file2 file1을 file2로 복사하되 같은 파일이 있으면 더ㅠ어쓰기

cp -r dir2 dir3 디렉터리 복사하기 이때 재귀적으로 복사하도록 -r 옵션을 지정해야한다. dir3이없으면 dir2의 내용이 모두 복사되어 dir3이 만들어짐. dir3이 이미 있다면 그 밑에 dir2라는 이름으로 복사된다. 

 

mv file1 file2 file1 이름을 file2로 바꾸기

mv -i file1 file2 file1 이름을 file2로 바꿀때 확인하기 y라고 입력해야 덮어쓴다. 

 

ln file1 file2 하드링크 file2 만들기. 파일에 별명을 붙이는것. 링크라고 부른다. 별명을 부른다는 것을 링크를 생성한다라고 한다. 심볼릭 링크가 많이 사용되며 하드링크가 필요한 경우는 많지않다. 링크할 파일, 링크 이름 을 명시한다.  cat file2 링크 file2에 접근하는것은 file1에 접근하는 것과 동일하다. 

rm file1 하드링크 삭제 파일자체는 모든 하드 링크가 없어져야 삭제된다. 

ln -s file1 file2 심볼릭 링크 만들기 심볼릭 링크는 하드링크할 수 없고 하드링크는 서로 다른 디스크에 걸쳐서 만들 수 없다는 제한이 있어 심볼릭 링크를 더 많이 사용한다. 

ls -l 심볼릭 링크 여부 확인하며 조회하기. 마찬가지로 cat file2 로 접근. 

rm file1 심볼릭 링크 삭제

 

find  . -name file-1.txt -print 

-name, -iname 이름으로 찾기 -는 대소문자구별, i는 하지않는다. 

-type f 보통 파일

-type d 디렉터리

-type l 심볼릭 링크

 

sudo apt-get install mlocate (우분투) 

yum install mlocate (센토스)

sudo updatedb 데이터베이스 구축 locate를 설치하면 updated가 주기적으로 실행되도록 설정된다. 

locate bash bash라는 문자열을 포함하는 파일 검색, 사전에 만든 데이터베이스를 활용하기 때문에 검색 속도가 매우 빠르다. 검색파일이 실제로 디스크에 존재하지않을 수도 있음으로 며칠전에 만든 파일을 빠르게 검색할때 사용한다라고 이해한다. 

locate '*.sed' 와일드카드로 검색

locate -i notes 대소문자를 구분하고 싶지않을경우 검색

locate -b python 파일이름만으로 검색할때. 이름에 python이 포함된 파일을 검색한다. 

locate docs document 검색패턴 여러개를 지정하면 or 조건이 적용된다. docs 혹은 document를 포함하는 파일 검색

locate -A bash doc 여러 검색 패턴을 모두 만족하는 파일, 여러 검색 문자열을 검색한다. and 검색. 

 

cat --help cat의 도움말 출력

man cat cat의 매뉴얼 확인 space를 누르면 스크롤, q를 누르면 종료된다. 

man -k copy copy라는 단어로 검색한 메뉴얼 찾기.

man 1 cromtab 1 명령어를 누르면 crontab 메뉴얼 표시하기

man -wa crontab 섹션 번호 지정한것 조회하기

 

echo #PATH 셀이 명령어를 찾는 위치 확인. 

which cat 패스상의 디렉터리를 검색해 지정한 명령어 전체 경로 출력. 같은 이름의 파일이 여러개 있으면 제일 먼저 발견된것만 출력한다. 

which -a lsmod 같은 이름의 파일 전부 다 출력.

 

LANG=ko_KR.UTF-8 cat --help 한글로 도움말 출력

LANG=C cat --help 영어로 도움말 출력

 

 

 

리눅스에서는 설정 파일이나 스크립트 등 많은 부분에서 텍스트 파일이 사용된다. 텍스트 파일은 전용 애플리케이션을 사용하지않아도 내용을 쉽게 확인할 수 있다. 호환성이 높아 많은 애플리케이션에서 사용할 수있다. 리눅스를 사용하다보면 텍스트 파일을 편집해야 하는 경우가 자주있다. 

 

Vim 기본에디터

윈도의 메모장과 비교하면 특수한 조작법을 익혀야해 초기 진입 장벽이 높다. 

vim --version

apt-get install vim (우분투) /  yum install vim (CentOs)

vim / vi

vim sample.txt 파일열기

:q enter 종료

:q! enter 저장하지않고 vim 종료

:w enter 파일 저장하기

:w sample1 enter 파일이름을 지정해 저장

esc 입력모드에서 벗어나기

h 왼쪽 이동 

l 오른쪽으로 이동

k 위로이동

j 아래로 이동

x 문자 하나씩 지우기

i 문자 입력할 수 있는 모드, 왼쪽

a 오른쪽에 문자를 입력하고 싶은 경우

W 공백을 기준으로 다음 단어의 첫글자로 이동

w 다음 단어의 첫글자로 이동

b 이전 단어의 첫 글자로 이동

B 공백을 기준으로 이전 단어의 첫 글자로 이동

0 행의 시작으로 이동

$ 끝으로 이동

gg 첫챙으로 이동

G 마지막 행으로 이동

10G 10번쨰 행으로 이동

d$ 현재위치에서 행의 마지막까지 삭제

d0 현재 위치에서 시작까지 삭제

dl 문자 한개 삭제

dw 단어 삭제

dgg 현재 위치에서 문서 시작까지 삭제

dG 현재 위치에서 문자 끝까지 삭제

 

d로 지운 텍스트는 p로 원하는 곳에 붙여넣을 수 있다. 

yy 커서가 있는 행을 복사

dd 커서가 있는 행을 삭제

j 현재행과 다음행을 연결

u 조작 취소 undo

Ctrl + r 취소전으로 돌리기 redo

/ 검색 아래방향

? 검색 위방향

n 다음 검색결과

N 이전 검색 결과

%s/ 문자열1 / 바꿀문자열 / g 치환 (예: $s/day/pen/g)

 

vimtutor 튜토리얼을 통해 vim 의 기본 조작 연습

:help 도움말

:help d d에 대한 도움말

 

 

 

 

리눅스에서는 명령어에 별칭을 붙일 ㅅ ㅜ있다. 

ls -F / 

alias ls='ls -F ls를 입력했을때 ls -F 가 실행되도록 한다. 복잡한 옵션이 붙는 경우에 사용하면 더욱더 편리하다. 

unalias ls 설정한 별칭 삭제

command ls / 혹은  \ls 일시적으로 alias 무효화하기 

 

set -o ignoreeof ignoreeof 라는 옵션을 활성화하기, ctrl + d를 입력해도 셸이 종료되지않는다. 

set +o ignoreeof ignoreeof 옵션 비활성화하기

noglob 경로확장을 무료로 하기 * 등을 무효화

 

shopt는 비교적 최근에 등장한 명령어로 set 명령어에 비해 참고자료가 다소 부족하나 설정 가능한 기능이 풍부해 상세하게 배시를 설정 할 수 있다. 

shopt -s (autocd, dotglob, cdspell, globstar, histappend) 활성화

shopt -u (autocd, dotglob, cdspell, globstar, histappend) 비활성화

autocd 디렉터리 이름을 입력하면 해당 디렉터리로 이동

dotglob * 나 ?를 사용한 경로 확장의 결과에 .로 시작되는 파일도 포함시킴

cdspell cd 명령 실행시 디렉터리 이름의 오타를 자동 교정

globstar 경로 확장으로 ** 패턴을 사용하면 서브 디렉터리까지 포함한 모든 파일에 매치

histappend 배치 종료시 히스토리 파일에 명령어 이력을 덮어쓰지않고 추가. 

 

 

var1 = 'test variable' 변수 설정

echo $var1 변수 확인

 

 

PS1 = 'bash> ' 셸 프롬프트 바꾸기 $ 가 아닌 bash> 로 보임.

PS1 = '[\u]' []안에 사용자 표시하기

PS1 = '[\u] \w \$' 디렉터리 추가로 표시하기

\d 현재 날짜 요일, 월, 일 

\h 서버 호스트 이름

\H 서버 도메인 이름

\n 개행문자, 줄바꿈

\t HH:MM:SS 형식 24 시산 단위 형식 

\u 사용자 이름

\w 현재 디렉터리의 전체 경로

\W 현재 디렉터리의 전체 경로 중 마지막 디렉터리

\$ 현재 사용자가 root면 #, 아니면 $로 표시

\\ \문자 자체를 표시

 

PATH = "$PATH:~/bin" ~/bin 안에 있는 명령어를 어느 위치에서나 실행할 수 있다. 

echo $PATH 명령어 위치 찾기

 

echo $LANG 언어보기

locale -a 로케일 변경가능한 확인

LANG = en_US.UTF-8 영어로 로케일 변경 cmd1 을 입력하면 안내문구가 한글에서 영어로 바뀌는것을 볼 수 있다. 

 

 

 

HISTFILE 커맨드 라인 이력을 저장할 파이이름

HISTFILESIZE 파일에 저장할 커맨드 라인 최대 개수

HISTSIZE 메모리에 저장할 커맨드 라인 이력의 최대 개수

 

cd $HOME/report ch ~/report 와 동일하다, 

HOME 홈 디렉터리

SHELL 로그인 셸의 경로

PWD 현재 디렉터리

 

type set 외부명령어인지 내장명령어인지 확인 set은 내장, cp를 물어보면 외부명령어로 경로가 함꼐 나온다. /usr/bin/cp

 

 

printenv 환경 변수 표시

LESS = '--no-init' LESS 값 설정

export LESS LESS를 환경변수로 설정

export LESS = '--no-init' 합쳐서도 가능

 

 

셸에 설정한 변수나 alias는 셸이 종료되면 모두 없어진다. 자동을적용되게 하려면 bash의 설정 파일을 수정해야한다 .

cp .bashrc .bashrc.org .bashrc 파일을 다른 이름으로 백업하기

vim을 사용해 ~/.bashrc 파일을 열어 기재하기

PS1 = '[\u@\h] \W \t \$ '

로그아웃, 로그인해서 확인

로그인하지않더라도 source ~/ .bashrc source 명령어를 실행해 ~/.bashrc 에 기재한 내용을 반영해 실행할 수 있다. 

 

# 주석

 

 

 

ls -l /bin/cat 파일의 소유자 확인

groups 현재 소속된 그룹 확인 r 읽기, w 쓰기, x 실행이 보인다. rwxr-xr-x 는 소유자가 가진, 소유자 그룹이 가진, 그 외의 사용자에 대한 퍼미션을 나타낸다. 

ls -l /etc/crontab 퍼미션 확인하기 -rw-r--r-- 라면, 소유자는 읽기와 쓰기가 가능하고, 소유그룹은 읽기만 가능하며 기타 사용자도 읽기만 가능하다. 

ls -ld dir1 디렉터리에 설정된 퍼미션 확인. r이면 파일리스트 취득가능여부, w이면 파일 작성, 삭제, x면 디렉터리로 이동가능하다는 의미이다.  파일을 지울 수 있는지 여부가 파일이 아니라 디렉터리 퍼미션에 의해 결정된다. 

 

chmod (u, g, o, a) (+, -) (r, w, x) 파일이름, u소유자, g 소유그룹, o기타사용자, a모두, + 퍼미션추가, - 퍼미션 금지, = 지정한 퍼미션과 같게함

chmod u+w file.txt user에게 소유자에게, w권한을 file.txt에 준다. 

 

chmod 8진수 수치, 파일이름 r 4, w 2, x 1

chmod 755 file.txt rwxr-xr-x 소유자는 읽고 쓰기, 다른 사용자는 읽고 실행. 

 

sudo passwd root  슈퍼 사용자 비밀번호 설정

su 슈퍼 사용자로 전환.

exit 일반 사용자로 복귀

su - 슈퍼 사용자 환경으로 초기화하면서 전환. 슈퍼 사용자로 작업하다보면 일부 애플리케이션이 정상적으로 동작하지않을 수 있어 - 를 붙여 실행하는게 좋다. 

sudo cat /etc/shadow 권한이 없더라도 이후 암호를 입력하면 슈퍼 사용자로 해당 명령어가 실행된다. sudo 는 한명령어만 슈퍼 사용자로 실행하기 위한 명령이다 .

 

 

sudo 설정 파일 /etc/shdoers 파일 수정

이 파일은 직접 에디터로 편집하는것은 위험해 오타가 나면 어느누구도 sudo를 사용할 수 없게 된다. 

sudo visudo 안전하게 편집하기 위한 visudo 라는 특별한 명령어, 편집후 종료시 문제가 있으면 에러가 표시되며 enter를 누를경우 처리옵션이 출력된다. e다시편집, x 저장하지않고 나가기 q파일을 바꾼 상태에서 저장하고 끝내기.  w는 경고를 무시하고 파일을 저장하고 종료하니 매우 위험해 선택하지않는다. 

요즘에는 su보다 sudo 가 많이 사용된다. 일부 배포판에서는 설치과정에서 사용자에게 처음부터 sudo 권한을 부여하기도 한다. 

 

프로세스: 메모리 위에 올린 프로그램

ps 프로세스 목록 확인

ps xf 실행중인 프로세스 출력

ps ax 사용자가 실행중인 프로세스 외 시스템을 위한 모든 프로세스, 슈처 사용자 권한으로 실행해 확인. 

ps aux 모든 사용자의 프로세스 상세 출력

ps auxww 모든 사용자의 프로세스 상세 풀력하되 결과가 화면에 잘리지 않도록 출력. 

 

job 셸에서 바라본 처리 단위

jobs 잡 목록 확인

jobs -l 잡 목록에 프로세스 id도 표시

 

fg %1 1번 job을 사용자 입력을 받아들일 수 있는 상태, 포그라운드로 전환한다.  정지한 잡이 한개 뿐이라면 잡 번호를 지정하지않아도 해당 잡이 포그라운드 된다. 예를 들어 vim file.txt를 해 편집하다가 ctrl + z를 입력해 중지했다해고 fg 했을때 다시 vim으로 전환된다는것. 

 

bg %1 1번 job을 조작할 수 없는 잡의 상태, background로 전환한다. 

cp file1 file2 & 커맨드 라인 마지막에 &를 붙이면 job을 처음부터 백그라운드에서 실행 할 수도 있다. 포그라운드로 실행하고 정지해 bg 명령어를 입력하는 번거로움을 덜할 수 있다. 

 

kill %1 1번 job 종료, kill 명령어는 잡이나 프로세스를 종료하는 명령어가 아니라 시그널을 전송하는 명령어이다.  프로세스는 전달받은 시그널의 종류에 따라 종료, 정지, 재기동 등의 처리를 수행한다. 

ps xf 프로세스 목록 확인

kill -l 시그널의 종류 확인

kill 3323 3323 id 프로세스 종료하기 

 

표준입력: 프로그램에 데이터를 입력하는 패널

표준출력: 프로그램의 실행결과가 출력되는 채널

표준 에러 출력: 프로그램 실행 중 발생하는 에러 메세지가 출력되는 채널

리다이렉션; 표준 입출력을 어디로 연결할지 변경하는 것. 

 

cat < /etc/crontab 파일을 리다이렉션으로 cat 명령어에 전달한다. cat /etc/crontab 과 출력결과는 같지만 표준 입력을 읽어서 표준 출력에 출력한다는 cat 명령어 기본 동작에 충실하다. 파일실행인자로 지정하는 방식은 사용자의 편의를 위해 cat 명령어가 특별히 제공하는 방식.  표준입력 방식을 지원해야 다른 프로그램과 연동하여 강력한 기능을 수행 할 수 있다.  표준출력과 표준 에러출력은 별도의 채널을 사용한다. 

 

명령어 실행 결과를 파일에 저장하기

ls -l / > list.txt 명령어 실행결과를 list.txt에 리다이렉션 touch 등의 명령어를 사용하지않아도 자동으로 만들어진다. 

ls /xxxxx > result.txt 2>&1 표준출력과 에러출력 모두 다 result.txt로 리다이렉션 하기 표준입력은 0, 표준 출력은 1, 표준 에러출력은 2 , 표준출력과 표준 에러출력은 별도의 채널을 사용함으로 표준출력과 에러출력을 파일하나에 리다이렉션할때도있을 것이다 .

 

echo 123 > number.txt 파일에 123 쓰기

cat number.txt 확인

echo 456 > number.txt 덮어쓰기

echo 789 >> number.txt 이어서 추가하기

 

 

ls -l /dev/null 파일 존재 확인하기 dev/null은 입력파일로 지정해도, 출력파일로 지정해도 아무것도 입력/기록되지않는다.  cat < /dev/null 아무것도 표시되지않고, cat /etc/crontab > /dev/null 아무것도 추가되지않는다는 것. 표준출력으로 출력되는 양이 너무 많거나 표준 ㅇ러만 출력할때 자주 사용된다. 

ls / /xxxxx > /dev/null

ls / /xxxxx 2> /dev/null 확인하지않아도 되는 에러 메시지가 너무 많이 출력될때 사용.

ls / /xxxxx > /dev/null 2>&1 콘솔에 아무것도 출력되지않음, 출력과 에러 출력 리다이랙션. 

 

 

 

파이프라인을 사용하면 명령어의 표준 출력을 다른 명령어의 표준 입력으로 연결할 수 있다. 

ls의 실행결과가 너무 크다면 ls -l / > temp_list.txt저장후 less temp_list.txt 조회할 수 있다. 하지만 이 방법은 매우 비효율적이다. 

ls -l / | less ls -l 의 표준출력이 less의 표준입력으로 전달된다. 

history |  less 파이프라인으로 history 와 less를 연결하면 페이지 단위로 읽을 수 있다. 

 

 

head /etc/crontab 지정한 파일의 첫행부터 (기본값) 10 행 출력.

history | head 명령어 이력의 첫행부터 (기본값) 10 행 출력.

 

cat 그대로 출력

head 파일 앞부분 출력

tail 파일 뒷 부분 출력

grep 검색 패턴에 일치하는 행을 출력

sort 정렬

uniq 중복된 행을 제거하여 출력

tac 역순으로 출력

wc 행수/ 바이트 수 출력

 

 

du -b /bin/* 파일크기 출력

du -b /bin/* | sort -n | tac | head -n 5 파일 크기가 큰 상위 5개 파일만 출력 sort -n 숫자 값으로 정렬, tac 역순으로 정렬

 

 

ls / | wc -l 루트 디렉터리에 파일과 디렉터리가 몇개있는지 출력 -l는 행의수, -w는 단어수, -c는 바이트 수이다. 이중 행을 출력하는 -l 옵션은 자주 사용되며 한행에 한건의 데이터가 기록되어있는 파일의 행의 수를 세면 데이터 총 건수를 확인 할수 있어 ls / 로 출력되는 행의 수를 세면 루트 디렉터리 안에 파일과 디렉터리 수를 구할 수 있는 것. 

 

 

sort file1 각 행의 첫글자부터 마지막 글짜까지 기준으로 정렬

ps x 프로세스를 id순으로 출력하기

sort number.txt  무작위로 숫자가 쓰여있어도 정렬되어 보인다. 

sort -n number.txt  무작위로 숫자가 쓰여있어도 내림차순으로 정렬되어 보인다.  숫자인식.

sort -r number.txt  무작위로 숫자가 쓰여있어도 역순으로 정렬되어 보인다. 

ls -l /bin/ | sort -rn -k 5 5개, 파일크기 기준으로 정렬해 -rn 옵션을 지정해 숫자값이 큰 순으로 정렬. 

 

uniq file2  파일내에 중복된 연속된 행이 하나로 줄어들어 표시됨.

sort file3 | uniq 파일내에 중복된 행이 하나로 줄어들어 표시됨.

sort -u file3 중복 제거. 중복된 데이터를 한번만 표시.

sort file2 | uniq -c 중복된 데이터 개수 확인

sort file2 | uniq -c | sort -rn 결과를 중복이 많은 순으로 출력

sort file2 | uniq -c | sort -n 결과를 중복이 적은 순으로 출력

 

 

cut -d : -f 7 /etc/passwd -d로 구분자를 정하지않으면 tab으로 자동지정된다. 각 행에서 : 를 기준으로 7번째 필드를 출력. 

cut -d : -f 1, 6, 7 /etc/passwd 여러개 가능

 

tr은 문자단위의 치환 명령어로 문자열 단위 치환은 추후 sed, awk 명령어를 사용한다.

cat /etc/passwd | tr abc ABC 문자 여러개를 동시 치환.

cat /etc/passwd | tr a-x A-Z 범위로도 치환가능

cat /etc/passwd | tr -d "\n" 줄바꿈 삭제

 

tail /etc/passwd 마지막 10행 출력

tail -n 1 /etc/passwd 마지막 1행 출력

tail -f output.log 파일을 실시간 모니터링하기

 

 

diff 파이점 확인, 차이점만 표시되며 공통점은 표시되지않는다. 각 > < 버무이를 hunk라고 부른다. -u 옵션을 지정하면 통일 포맷을 사용해 비교 파일이름과 변경시각을 보여주며 추가됬을경우 +, 삭제된 경우에는 - 가 표시된다.  @@-변경시작-숫자+두번째파일-숫자 

diff .bashsrc.org .bashrc 차이 출력하기 결과를 확인해봤을때

12c12 의미는 범위 12행이 변경 c되었음을 의미. 추가라면 a 삭제하면 d

< PS1 = '\$ ' 실제 변경내용들< 는 펏번째 파일에만 있는 내용

---

> PS1 = '[\u@\h] \w\$' 두번쨰 파일에만 있는 내용

 

 

정규표현식: 조건에 일치하는 문자열 집합 표현

ls /etc | grep '^cron' cron으로 시작하는 행만 출력

grep 't.st' example.txt 임의의 문자 1 . .. 일경우 두개. 임의의 문자가 아니라 점 자체를 검색하고싶다면 \.

grep 't[ef]st' example.txt e나 f가 들어있는 단어 찾기

grep 't[a-k]st' example.txt 문자의 범위

grep 'mail[^12]' example.txt 지정한 문자 이외의 문자 

grep 'net$'  example.txt  ~로 끝나는 문자. 

grep 'Be*r'   example.txt   반복문자. 

grep -E 'Be+r' drink.txt + 전문자가 1회이상 반복되는것 확장 정규표현식, 메타 문자가 늘어난 확장 정규표현식 -E 명시

grep -E 'Be{1, 2}r' drink.txt e가 1, 2 회 이하 반복되는 패턴. {2} 라면 정확히 2번 반복되는것을 검색, {4,} 라면 4번 이상.

grep -E 'My (Vodka | Wine)' drink.txt 그룹화할떄 사용

 

 

sed 1d drink2.txt 주소로 지정한 행에 대해서만 처리를 수행, 첫번째 행을 삭제 2, 5 이면 2행에서 5행을 삭제. 3, $d 라면 마지막까지 삭제. 그냥 d를 하면 모든 행이 지워짐. 

sed /^B/d drink.txt B로 시작하는 행을 주소로 지정해 삭제. 

sed 's/Beer/Whisky/' drinkt.txt Beer 라는 문자열을 Whisky 로 치환 s/치환전/치환후

 

 

 

ls -l /usr/bin | awk '{print $5, $9}'  공백을 구분자로 5번쨰와 9번째 필드 출력하기 공백이 불규칙하게 사용된 경우에도 문제없다. 

ls -l /usr/bin | awk '{print $(NF-1), $NF}' NF를 사용하면 마지막 기준에서를 계산할 수 있어 필드가 많을때 유용하다 .

 

 

셸 스크립트

셸에서 실행될 커맨드 라인을 입력해놓은 파일

복잡한 명령어를 직접 입력하는 수고를 덜 수 있고 작업을 자동화할 수 있다.  sh 나 bash 용 셀 스크립트를 작성하는 것이 보통이고 둘중 하나를 선택한다.  CentOS와 같은 레드햇 계열의 배포판에서 sh는 bash의 별명으로 사용되 sh와 bash이 실체가 같으나 우분트와 같은 데미안 계열에서는 sh가 bash 라는 셸을 사용하고 있습니다.  sh는 오래전에 만들어져 최신 셸 기능이 없고 느리다. bash는 실행속도도 빠르다. 

 

du -h ~ | tail -n 1 홈 디렉터리의 파일 사용량을 출력

vim homesize.sh

chmod +x homesize.sh 실행권한부여 +x

./homesize.sh

 

#! /bin/bash   셔뱅 shebang 리눅스 커널은 파일의 첫부분을 확인하며 #!가 있으면 그 뒤 명령어를 실행한다.즉 bash를 사용한다고 명시적으로 선언한것. 셔생도 주석으로 간주된다. 

du -h ~ | tali -n 1

 

셔뱅을 사용하지않은 셸 스크립트는 source명령어로 실행할 수 있다. 셔뱅으로 지정한 셸이 아니라 언제나 현재셸이 사용된다. 파일을 직접 실행하는 것이 아니기에 실행권한을 부여할 필요도 없다. 

source ./homesize-noshebang.sh

 

;로 여러명령어를 한행으로 입력할 수있다. 

echo "root directory";cd /;ls -l

 

\로 여러행에 걸쳐 입력할 수 있다 .

echo \

      "root directory"

 

| 여러행에 걸쳐 한 커맨드라인을 입력한다. 

sort file3 |

uniq -c |

sort -n

 

$ 사용해 변수를 활용할 수 있다. 

appdir = /home/ldk/myapp

echo $appdir

 

쿼팅

작은따옴표 혹은 큼따옴표 '일반문자' "$변수치환"

echo "I came from $country"

echo 'I came from country'

 

date '+%Y-%m-%d' 날짜형식 출력

 

위치파라미터, 셸 변수

./parameters.sh aaa bbb ccc  $0자리에 aaa, $1자리에 bbb, $2 자리에 ccc

$# 지정한 인자 갯수

$@, $* 분할하지않은 전체 인자 참조

 

if문

if [ "$1" = "bin1"]; then

    echo "OK1"

elif[ "$1" = "bin2"]; then

    echo "OK2"

else

    echo "NG"

fi

 

-n str1 빈문자열이 아닐때

-z str1 빈문자열일때

int1 -eq int2 서로 같을떄

int1 - ne int2 서로 같지않을때

int1 -lt int2 int1이 int2보다 작을띠ㅐ

int1 -le int2 int1이 int2이하일띠ㅐ

int1 -gt int2 int1이 int2보다 클띠ㅐ

int -ge int2 int1이 int2 이상일때

 

-e file file이 존재함

-d file file이 디렉터리임

-h file file이 심볼릭 링크임

-L file file이 심볼릭 링크임

-f file file이 일반파일임

-r file file에 읽기권함이 있음

-w file file에 쓰기권함이 있음

-x file file에 실행권함이 있음

file1 -nt file2 file1의 변경시각이 file2보다 최근임

file1 -ot file2 file1의 변경시각이 file2보다 오래됨

 

조건식 -a 조건식 and

조건식 -o 조건식 or

! 반대로

() 그룹화

명령어1 && 명령어2 명령어1이 정상종료해 0이 반환된 경우에;만 명령어 2 실행 if문대신 간결히 사용

명령어1 || 명령어2 명령어 1이 실패하면 명령어 2가 실행

 

for 변수 in 리스트

do 

   반복처리

done

 

seq 1 5 1을 5로 치환

 

case 문자열 in

   패턴)

      처리 1

      ;;

   패턴)

      처리 1

      ;;

esac

*)는 else를 의미

 

while 명령어

do

    반복처리

dolne

 

 

+더하기, /나누기, *곱하기, **제곱

 

function <함수이름> ()

{

return A

fi

ls "$1"

}

functilon이나 ()중 하나는 생략할 수 있다.

종료상태는 return으로, 종료되고 호출한 곳으로 실행흐름을 돌릴 수 있다. 

 

IFS='\n'

for fname is $(ls "$filepath")

do

    list recuisive "${file;path}/${fname}" "   $indent"

done

_IFS = $IFS

IFS = $'\n'

IFS = $_IFS

공백으로 파일을 나누지않게 함. 필요한 처리를 수행한뒤에는 IFS 값을 복원해야함.

 

find . -type f -name '*.txt"

파일목록 필터링하기

 

tar cf dir1 . tar dir1

dir1과 그안의 파일이 dir1.tar라는 아카이브 파일에 묶인다. tar에서는 하이픈을 붙이지 않는것이 일반적이다. -cf라 하지않음.

 

tar tf dir1.tar 파일확인

 

tat xf fir1.tar 아카이브 파일 해제

 

tar cvf dir1 . tar dir1 ㅣ대상 파일의 목록이 출력

tar tvf dir1 .tar t옵션으로 확인시 v를 추가하면 권한, 소유자 등의 상세정보도 출력가능

 

 

gzip ps.txt 압축하기

gzip -d ps.txt.gz 압축복원

 

bzip2 ps.txt 압축하기 gzip보다 압축률이 더 높다.

bzip2 -d ps.txt.bz2 복원

 

그 외로 xz가 있고 bz2보다 좋아 높은 압축률에 사용한다.

 

zip은 리눅스에서는 별로 사용되지않으나 윈도나 maxOS에서 많이 사용한다.

yum install zip unzip

sudo apt-get install zip unzip

zip -r dir1.zip dir1 압축 -r는 지정디렉터리 아래 모든 파일을 포함하는 옵션으로 늘 지정한다고 이해하면 좋다.

unzip dir1.zip 복원

zip -er dir1.zip dir1 암호설정

 

git --version

yum install git-core

y

sudo apt-get install git-core

git config --global user.name 'idk'

git config --gllobal user.email 'idk@exam;ple.com'

git config --global colllor.ui auto 컬러출력 설정 출력 글자 색을 컬러로 할 수 있다.

cat ~/.gitconfig 설정사항 보기

mkdir -p ~/git/findgre;p repo작성

cd ~/git/findgep

git init 깃 저장소 초기화, .git 파일이 만들어짐

ls -a 확인.

git status 트리상태ㅣ확인

git diff 변경사항 확인

git add fingergra;p-19.sh 파일 추가

git commit

git log 확인

git log -p 변경이력 확인

git diff 커밋id 특정 커밋과 차이 확인

git add -u 모든 파일 인덱스에 등록 update

git add -A 모든 파일 등록. all

git checkhout HEAD 체크아웃

git revert 커밋id 커밋취소

git branch 브랜치 확인

git branch 브랜치 이름

git branch feature-name 새로운 브랜치 생성

git merge feature-name 브랜치 머지

git branch -d feature-name 브랜치 삭제

git push repourl.git master:master 적용할 브랜치 명. pysh

git clone repolurl 클론 복제본

 

 

패키지 관리 시스템은 패키지 단위로 소프트웨어를 설치하고 삭제한다. 

패키지란 실행파일, 도큐먼트파일, 설정파일, 스크립트를 아카이브한 파일하나를 말한다. 

Red Hat형식은 .rpm

Debian 형식은 .deb

yum install httpd 패키지 이름 설치.

yum erase/remolve httpd 패키지 삭제

 

sudo apt-get install aptitude 패키지 설치

sudo apt-get remove aptitiude-common 패키지 삭제;

apt]-cache search netcat 패키지 검색