13 KiB
| title | description | image | authors | |
|---|---|---|---|---|
| 리눅스 입문 part 2 | 1장에 이어서 명령어, 이론, 요령을 알아본다. | /assets/blog/02-linux-begin-02/Standard-unix-filesystem-hierarchy.svg |
|
권한
ls에 -l 옵션을 붙여서 파일 목록을 출력하면 여러 가지 정보가 나오는데
소유자명, 시각, 파일명 및 링크 포인터로 구성돼 있다는 건 대충
알아볼 수 있으나 첫 번째로 나오는 -rw-r--r-- 와 같은 문자는 어떤 뜻인지
알아보지 못 할 수도 있다.
이는 Symbolic notation라고 불리는 읽기/쓰기/실행 권한 표기문자 이다.
총 10글자로 돼 있는데, 맨 왼쪽 한 개를 뺀 아홉 개는 3개씩 끊어서 각각 소유자(u)/그룹(g)/기타(o)의 권한을 표시한다.
-rw-r--r-- 인 경우
- 소유자: 읽기/쓰기 (read/write)
- 해당 파일이 지정된 그룹: 읽기만 (read)
- 소유자도 파일의 그룹도 아닌 기타 사용자: 읽기만 (read)
할 수 있는 상태인 것이다.
예를 하나 더 들어 lrwxrwxrwx 인 경우 파일소유자/그룹/기타 모두 모든 권한을
보유하고 있는 것이다. (read/write/execute)
맨 왼쪽 l 은 Symbolic link 임을 알려주고 있는데, 다른 표현형으로는
가 있다.
cd ~/opt/cygwin-testls -l
Symbolic notation의 r/w/x/- 문자는 각각 4/2/1/0 이 대입되는 8진수로 이루어져 있다.
따라서 예로 들고 있는 -rw-r--r-- 은 644 권한이 들어가 있는 것이다.
같은 방식으로 lrwxrwxrwx 는 777 권한으로 치환할 수 있다.
유틸리티 part 2
cat /var/log/setup.log 로 Cygwin 설치 중 기록된 메세지를 확인할 수 있었는데,
내용이 길어서 head와 tail로 끊어보았다.
less /var/log/setup.log실행
head/tail은 한 번만 출력하고 끝내는 명령인데, less 는 man과 마찬가지로
f / b 키를 누르면서 계속 본문을 탐색할 수 있다.
q를 눌러서 less 종료
less 커맨드가 개발되기 전에 more 라는 명령어가 먼저 나왔는데 less가 기능이 더
좋지만 more는 도스에서도 기본 탑재하던 커맨드이기 때문에 less를 쓸 수 없는
아주 제한적인 환경에서는 more를 less 대신 사용할 수도 있을 것이다.
cat /var/log/setup.log | wc -l실행
어떤 숫자가 출력됐는데 setup.log 속 내용이 몇 줄이나 들어있는지 wc에 -l 옵션을
줘서 계산한 것이다.
cat과 wc 사이를 파이프라인으로 이어줬는데 서로 다른 프로그램이 마치 한 개로 합쳐진 것처럼 명령을 수행한다.
&&는 따로따로 실행하는 명령을 표기만 한 줄로 엮을 때 사용하기 때문에 위 명령을
cat /var/log/setup.log && wc -l 로 실행하면 예상과는 다른 결과가 나올 것이다.
Ctrl c를 눌러서 종료
Shell script
다음과 같은 명령을 실행한다고 해 보자
mkdir -p ~/opt/cygwin-test && touch testfile && echo "line1" >> testfile && cp testfile testfile2 && cat testfile2 && ls -l
특별할 것 없는 명령이긴하나
- 같은 커맨드를 또 다시 입력하고 싶지 않을 때
- 내용을 깔끔하게 작성하고 싶을 때
- 외우고 싶지 않을 때
세울 수 있는 대안책으로 shell script를 작성할 수 있다.
vi test-script.sh 를 실행해서 해당 내용을 입력한다.
#!/usr/bin/env bash
mkdir -p ~/opt/cygwin-test
touch testfile
echo "line1" >> testfile
cp testfile testfile2
cat testfile2
ls - l
ls -lchmod +x test-script.shls -l
./test-s까지만 입력하고Tab키를 눌러서 나머지 자동완성- Enter를 눌러서 실행
위에서 입력한 명령을 연쇄적으로 실행하였다.
FHS에서 .. 으로 dot을 두 개 입력하면 상위 디렉토리를 가리키고,
. 한 개만 입력하면 현재 디렉토리 를 가리킨다.
즉 ./test-script.sh 라고 입력한 부분은 현재 위치(pwd)에 있는 test-script.sh 파일을
실행하겠다는 뜻이 된다.
chmod -x test-script.sh./test-script.sh
실행을 거부하고 있다.
chmod 는 rwx 권한을 변경할 때 사용한다.
맨 처음 shell script를 저장하고 곧바로 chmod +x 라는 것을 실행했는데
x 권한을 덧붙여서 실행할 수 있는 상태로 만들었던 것이다.
이후 -x 를 하여 다시 실행권한이 없어졌기 때문에 Permission denied 를
출력하면서 실행을 거부했다.
./test-s 까지만 입력하고 탭 키를 눌렀을 때 나머지 ./test-script.sh 까지
자동완성이 됐는데,
"" 사이에 문자열을 입력할 때 처럼 자동완성을 할 수 없는 경우가 있지만 대부분 경우에는 지원을 해 주고 있다.
chmod -x 로 실행권한이 빠졌을 때 자동완성이 되지 않았을텐데 이러한 동작으로 실행 가능 파일인지 아닌지 짐작해 볼 수 있다.
스크립트 첫 줄에 입력한 #!/usr/bin/env bash 라인은 hashbang 또는
shebang 이라는 부분이며 이 스크립트를 어떻게 실행할 것인가
결정하는 부분이다.
ls /usr/bin 을 해 보면 env 라는 프로그램이 있는데 이 프로그램으로
bash가 있는 위치를 탐색하도록 조치한 것이다.
애플 맥OS에서는 zsh 을 기본 인터프리터로 설정해 놓았기 때문에
#!/usr/bin/env zsh 로 작성하게 될 것이다.
/usr/bin/env 가 없거나 이를 사용하지 않는 경우 어떤 스크립트에는 #!/bin/sh 가
입력되어 있는 경우도 있는데 /bin/sh는 POSIX sh이며 bash나 zsh이
아니기 때문에 동작방식이 다를 수도 있다.
파일 탐색
/usr/bin 에 env 가 있다는 사실은 해당 문서를 통해서 또는 경험적으로
알게된 것이지만 경험해 본 적 없는 새로운 파일, 새로운 커맨드가 있는 위치를
찾아보는 명령어로 which 와 whereis 가 있다.
which env 와 whereis env 로 env의 위치를 탐색해보면 둘 다 env 위치를
출력하긴 하지만 which는 출력값이 단 하나인 것에 비해 whereis는 다른 값도
보여주고 있다.
which 찾는대상: 실행가능파일(executable)이 있는 위치 출력whereis 찾는대상: 이진 파일, 소스, 매뉴얼이 있는 위치 출력
근데, which와 whereis는 커맨드를 어디에서 찾아야 할지 어떻게 알고 있는 걸까?
이들을 실행하면 PATH라는 환경 변수로부터 경로값을 읽고 명령을 수행한다.
echo $PATH 를 실행하면 PATH 에 어떤 값이 들어있는지 볼 수 있는데,
여기에서 /usr/bin 을 볼 수 있다.
커맨드의 위치를 찾아주는 which / whereis와 달리 find로는
특정 파일을 어떤 경로 내에서 찾을 수 있다.
cd /opt/cygwin-testlsfind . -name "test*"
test 로 시작하는 파일 내역을 현재 위치에서부터 하위 디렉토리 내부까지 탐색했다.
bash 활용
다음과 같은 명령을 실행하려고 한다.
mkdir-p ~/opt/cygwin-test/subdir && cd $_ && touch newfile && echo "line1" >> newfile && ls && cat newfile
전체 커맨드의 앞 단계에서 띄어쓰기를 빼먹어서 에러를 발생시킬 것이다.
커서를 앞 부분으로 하나씩 하나씩 옮겨서 띄어쓰기를 넣고 다시 실행하면 정상적으로 진행이 되겠지만 Readline 단축키로 커서를 더 빠르게 이동시킬 수 있다.
- 잘못된 커맨드 우선 실행
- 윗 화살표로 커맨드 다시 표시
Ctrl a로 커서 맨 앞으로 이동 후 잘못된 부분 수정
위/아래 화살표로 이전 커맨드를 찾는 대신 전체 내역을 보고 싶어질 수 있는데
history 커맨드로 예전 기록을 확인할 수 있다.
history가 출력되면 원하는 내용을 복사 후 붙여넣기해서 Readline 단축키로 수정하려는 부분을 바꾸면 된다.
Ctrl e: 커서를 맨 뒤로 이동 (end)Alt b: 커서를 한 단어 왼쪽으로 이동 (backward)Alt f: 커서를 한 단어 오른쪽으로 이동 (forward)
Readline 단축키는 info와 emacs에서도 활용하고 있다.
이미 실행했던 커맨드가 많아서 하나하나 찾기 힘든 경우 history | grep -i 검색어
형식으로 grep을 이용해서 찾아낼 수도 있다.
grep의 -i 옵션은 대소문자에 상관 없이 같은 알파벳이면 결과를 보여주도록
하는 옵션이다 (case insensitive)
Cygwin 환경설정
Cygwin은 mintty라는 터미널 위에서 돌아가는데, 이 mintty 설정을 통해서 폰트 등을 변경할 수 있다.
https://fonts.google.com/download?family=Noto%20Sans%20Mono
에서 Noto Mono 계열 폰트를 받은 뒤 압축을 해제하면
NotoSansMono-VariableFont_wdth,wght 와 static 폴더가 있는데
VariableFont는 모든 폰트를 한 번에 설치하지만 용량이 그만큼 크다.
static에서는 필요한 폰트를 하나씩 설치하도록 되어 있다.
Cygwin 우클릭 - Options...
Text 항목에서 Font를 Select...
Font Size도 좀 더 크게 바꾸어 보았다.
https://fonts.google.com/specimen/Roboto+Mono
https://github.com/naver/d2codingfont/releases
https://github.com/be5invis/Sarasa-Gothic/releases
{/* Options - Text - Font: Noto Mono Font smoothing: default
.minttyrc FontChoice=CJK:5;Hangul:9 Font5=Sarasa Fixed K Font9=Sarasa Fixed K Emojis=noto CursorType=block CursorBlinks=no Font=Noto Mono Locale=C Charset=UTF-8 FontSmoothing=default FontHeight=12 Scrollbar=none Language=en_US BoldAsColour=no BoldAsFont=no Transparency=off OpaqueWhenFocused=yes Term=xterm-256color */}


















