= list segments의 약자
ls -al : 숨김파일과 파일의 모든 정보를 표시한다.
ll 이라는 alias로 편하게 사용하기도 한다.
ls -il : 파일 또는 디렉토리의 inode number을 표시한다.
inode란 리눅스에서 파일 또는 디렉토리의 고유 식별 부호, 파일 이름이 바뀌어도 유지된다.
= make directory의 약자
hmod 명령어는 디렉토리나 파일의 읽기, 쓰기, 실행 권한을 변경할 수 있다.
OS에 로그인한 사용자와 디렉토리나 파일의 소유자 같은 경우 chmod로 권한을 변경한다.
먼저, chmod로 권한을 변경하는 방법은 두 가지이다.
+, -, = 기호를 통해 권한 유형을 표기하여 변경하는 Symbolic method 방법
rwx를 3bit로 해석(8진수)하여 3자리 숫자로 표기하는 Absolute form 방법
Symbolic method 방법
이 방법은 액세스 클래스(Access class), 연산자(Operator), 액세스 타입(Access Type)으로 구분한다.
- 액세스 클래스 : u (user), g (group), o (other), a (all)
- 연산자 : + (add access), - (remove access), = (set exact access)
- 액세스 타입 : r (read), w (write), x (execute)
명령어 chmod 뒤에 변경할 권한을 입력한다.
액세스 클래스, 연산자, 액세스 타입 순서로 조건에 따라 조합하여 입력한다.
chmod g-r filename # 그룹의 읽기 권한을 제거한다.
chmod g+r filename # 그룹의 읽기 권한을 부여한다.
chmod g-w filename # 그룹의 쓰기 권한을 제거한다.
chmod g+w filename # 그룹의 쓰기 권한을 부여한다.
chmod g-x filename # 그룹의 실행 권한을 제거한다.
chmod g+x filename # 그룹의 실행 권한을 부여한다.
chmod o-r filename # 다른 사용자의 읽기 권한을 제거한다.
chmod o+r filename # 다른 사용자의 읽기 권한을 부여한다.
chmod o-w filename # 다른 사용자의 쓰기 권한을 제거한다.
chmod o+w filename # 다른 사용자의 쓰기 권한을 부여한다.
chmod o-x filename # 다른 사용자의 실행 권한을 제거한다.
chmod o+x filename # 다른 사용자의 실행 권한을 부여한다.
chmod u+x filename # 소유자의 실행 권한을 부여한다.
또한, 연산자를 사용하여 다중 권한 부여 및 제거가 가능하다.
#초기 filename의 권한이 ----------이라 가정하고 순서대로 명령을 했을 때
chmod a=rw filename # -rw-rw-rw-
chmod u= filename # ----rw-rw-
chmod a+rx filename # -r-xrwxrwx
chmod go-wx filename # -r-x-r--r--
chmod a= filename # ----------
chmod u+rwx filename # -rwx------
Absolute form 방법
소유자, 그룹, 다른 사용자의 권한을 r, w, x 순서로 8진수로 해석하여 3자리로 표현한다.
r (read) : 4
w (write) : 2
x (Ececute) : 1
부여하고 싶은 권한의 수를 더함으로써 표현하는 것이 쉬울 것이다.
# filename의 권한을 -rwxrwxrwx로 하고 싶다면
chmod 777 filename
# filename의 권한을 ----------로 하고 싶다면
chmod 000 filename
# filename의 권한을 -r--r--r--로 하고 싶다면
chmod 444 filename
# filename의 권한을 --w--w--w-로 하고 싶다면
chmod 222 filename
# filename의 권한을 ---x--x--x로 하고 싶다면
chmod 111 filename
# filename의 권한을 -r-x-w--wx로 하고 싶다면
chmod 523 filename
a : add
c : change
d : delete
ln -s $경로이름 $변수이름
alias hellocmd = "echo hello $@"
-i : 복사될 파일이 이름이 이미 존재할 경우, 사용자에게 덮어 쓰기 여부를 묻는다.
-b : 복사될 파일이 이름이 이미 존재할 경우, 백업파일을 생성한다.
-f : 복사 될 파일이 이름이 이미 존재 할 경우, 강제로 덮어쓰기 한다.
-r : 하위 디렉토리 까지 모두 복사한다.
-a : 원본 파일의 속성, 링크 정보까지 모두 복사한다.
-p : 원본 파일의 소유자, 그룹, 권한 등의 정보까지 모두 복사한다.
-v : 복사 진행 상태를 출력한다.
-b : 이동시킬 파일이 이미 존재하면 백업파일을 만든다.
-i : 이동시킬 파일이 이미 존재하면 사용자에게 덮어쓰기 여부를 묻는다.
-f : 이동시킬 파일이 이미 존재하면 강제로 덮어쓰기 한다.
-n : 이동시킬 파일이 이미 존재하면 덮어쓰기 하지 않는다.
-r : 하위 디렉토리까지 모두 이동한다.
-v : 이동 진행 상태를 출력한다.
파일을 검색할때 사용
find . -name $filename
현재 경로에서 $filename의 이름을 가진 파일이나 디렉토리를 찾음
$PATH에 등록된 경로 중에서 주어진 이름의 실행 파일 위치를 찾는다.
사용하고 있는 명령어가 설치된 위치를 찾는데 유용
대량의 파일에서 주어진 텍스트 또는 정규표현식 패턴에 일치하는 텍스트를 찾는 명렁어
파이프와 함께 다양한 명령어와 조합하여 사용한다.
텍스트를 필터링하거나 변환하는 스트림 에디터
sed 's/old_world/new_world/g' target_file
target_file에서 old_world 를 new_world로 모두 교체한 결과를 출력
vi 에서도 :%s/old_word/new_world/g 를 이용하여 string을 교체할 수 있다.
이름,버전,기타 시스템 정보를 확인할 수 있다.
uname-a
현재 실행중인 프로세스를 볼 수 있다.
어떤 프로세스에 문제가 있는지, 내가 실행한 어플리케이션 프로세스의 상태를 보는데 사용할 수 있다.
가장 중요하고 가장 많이 쓰이는 명령어니, 필요할 때마다 구글에 검색해서 보기
이동모드
-- > 커서가 어디에 있던지, esc를 누르면 이동 모드가 됨. 편집할 수 없음
-- > vi를 쓰면 수시로 esc를 누르는 습관이 필요
라인 숫자 같이보기
-- > set number 입력
-- > set nonumber 로 number 모드해체
커서 이동 명령키
h : 한문자 왼쪽으로 커서이동
j : 한문자 아래쪽으러 커서이동
k : 한문자 위쪽으로 커서이동
l : 한문자 오른쪽으로 커서이동
w : 다음 단어 첫 문자로 커서이동
b : 이전단어 첫 문자로 커서이동
행 이동 명령키
gg : 첫 행으로 이동
g : 마지막 행으로 이동
^ : 현재 행의 첫 문자로 이동
$ : 현재 행의 마지막 문자로 이동
:n 타이핑한 숫자n에 해당하는 행으로 이동
숫자 n 누르고 g : 해당 숫자만큼 아래로 행 이동
숫자 n 하고 엔터 : 현재커서의 행으로 부터 +n만큼 행이동
문자 검색을 이용한 이동(정규식 이용가능)
/문자열 : 커서 다음부터 문자열 검색, enter 누르면 커서이동
?문자열 : 커서 이전으로 문자열 검색, enter 누르면 커서 이동
n : 검색반복
N : 역방향으로 검색반복
입력관련된 명령어
i : 현재 커서 위치에 글자 삽입 가능. i 를 누르고 난 이후에 쓰는 글은 커서 위치에 쓰여짐
I : 현재 줄 처음 글자에 삽입
a : 현재 커서 다음위치에 추가
A : 현재 줄 마지막 글자에 추가
o : 아랫 줄에 추가
O : 윗 줄에 추가
s : 현재 커서 글자 지우고 입력 모드로 전환
r : 현재 커서 글자지우고 한글자 입력받아 바꾼뒤 명령모드로 들어감
삭제 관련된 명령어
x : 현재 커서 위치 문자 삭제
X : 현재 커서 위치 이전 문자 삭제
dw : 현재 커서 위치 단어 삭제, 숫자 dw로 쓰면 숫자만큼의 단어가 삭제됨
db : 현재 커서 위치 이전 단어 삭제
dd : 현재 커서 위치 줄 삭제, 숫자 dd 로 쓰면 숫자만큼의 줄이 삭제됨
d^ : 현재 줄에서 현재 커서 위치 이전 문자열을 마지막 문자까지 삭제
d0 : 현재 줄에서 현재 커서 위치 이전 문자열을 긑까지 삭제
d$ : 현재 줄에서 현재 커서 위치 이전까지 삭제
복사 붙여넣기
y : 복사, w,b,^,0,$ 등 다른 이동 표현과 함께 쓰면 그만큼 복사가 됨
yw : 현재 커서 이후 단어 복사, 숫자 yw로 쓰면 숫자만큼의 단어가 복사됨
yb : 현재 커서 이전단어 복사, 숫자 yb로 쓰면 숫자만큼의 단어가 복사됨
yy : 현재 줄 복사, 숫자 yy로 쓰면 숫자만큼의 줄이 복사됨
p : 복사된 항목을 현재 커서 위치 이후에 붙여 넣기, 삭제된 항목도 붙여넣기 가능
P : 복사된 항목을 현재 커서 위치 이전에 붙여 넣기, 삭제된 항목도 붙여넣기 가능
vi file1 file2 file3 명령을 사용하면 동시에 여러 소스코드 파일을 열 수 있음
:n : 다음 버퍼 파일로 이동
:N : 이전 버퍼 파일로 이동
:ls : 현재 열려있는 버퍼의 리스트를 보여줌
:b숫자 : 숫자에 해당하는 버퍼로 이동
:bd숫자 : 숫자에 해당하는 버퍼를 삭제
:bw : 현재 버퍼를 삭제
vi 안에서 새로운 파일 열기
:e [tab] 또는 $filename : 해당 파일을 현재 vi 창에서 새로운 버퍼로 연다
:cd [tab] 또는 $filename : 해당 디렉토리로 이동한다. :e로 다음 파일을 찾을 때 적용
화면 분할해서 보기
:split : 현재 열린 파일과 같은 파일을 수평으로 분할해서 하나 더 연다.
:split $file : 새로운 파일을 현재 위치에 열고 현재 열린 파일은 수평으로 분할해서 연다.
:vsplit : 현재 열린 파일과 같은 파일을 수직으로 분할해서 하나 더 연다
:vsplit $filename : 새로운 파일을 현재 위치에 열고 현재 열린 파일은 수직으로 분할해서 연다.
화면 분할 상태에서 윈도우 이동하기
Ctrl+w,j : 아래 윈도우로 이동
Ctrl+w,k : 위 윈도우로 이동
Ctrl+w,l : 오른쪽 윈도우로 이동
Ctrl+w,h : 왼쪽 윈도우로 이동
화면 분할 상태에서 창 크기 조절하기 - 좌우
Ctrl+w,= : 모두 균일한 상태로 이동
Ctrl+w,> : 오른쪽으로 1칸 확장
Ctrl+w,$num> : 오른쪽으로 $num칸 확장
Ctrl+w,< : 왼쪽으로 1칸 확장
Ctrl+w,$num< 왼쪽으로 $num 칸 확장
화면 분할 상태에서 창 크기 조절하기 - 위아래
Ctrl+w,= : 모든 균일한 상태로 이동
Ctrl+w,+ : 위로 1칸 확장
Ctrl+w,$num+ : 위로 num칸 확장
Ctrl+w,- : 아래로 1칸 확장
Ctrl+w,$num- : 아래로 num칸 확장
Ctrl+w,_ : 해당 윈도우가 위아래로 모든 칸을 차지
환경변수를 임시로 선언하는법
export 환경변수명=값 : 값을 환경변수로 임시 선언
이 경우 시스템 재부팅 또는 로그아웃을 하면 환경 변수 값이 사라지게 된다.
환경변수를 유저레벨로 선언하는 법
환경변수를 특정 유저에게만 영구적으로 적용하고 싶은 경우에는 ~/.bash_profile 파일을 수정한다.
~/.bash_profile은 user가 처음 login 할 때 수행된다.
단, bash shell로 접속했을 때만 동작한다. sh 또는 zsh로 접속하면 동작하지 않는다.
vi ~/.bash_profile
exprot LECTURE="fastcampus"
exho $LECTURE
환경변수를 영구히 선언하는 법
환경변수를 모든 유저에게만 영구적으로 적용하고 싶은 경우에는 /etc/profile 파일을 수정한다.
sudo vi /etc/profile
export LECTURE='data'
echo $LETURE
운영체제가 명령어의 실행파일을 찾는 경로
절대/상대 경로 없이, 단독으로 명령어를 수행할 수 있다는 것은 해당 명령어의 실행파일이 운영체제의 $PATH에 등록된 디렉토리들 중에 포함되어 있다는 의미이다.
파일 맨 위에 다음과 같은 표시가 있다면 shell script 파일이라고 할 수 있다.
#!/bin/sh : /bin/sh(bourne shell)를 사용하는 shell script
#!/bin/bash : /bin/bash를 사용하는 bash shell script
#!/bin/zsh : /bin/zsh 를 사용하는 zshell shell script
#!는 shebang(쉬뱅) 이라고 읽는다
$변수명 : 변수사용
readonly 변수명 : 읽기전용 변수로 선언 (읽기 전용 변수 값을 바꾸려고 시도하면 에러발생)
unset 변수명 : 변수할당해제
$$ : 현재 shell의 프로세스 아이디
$0 : 현재 Script의 파일이름
$n : Script실행시 넘겨준 n번째 인자
$# : Script에 넣어준 인자의 개수
$* : 모든 인자를 ""로 감싸서 반환
$@ : 각 인자를 ""로 감싸서 반환
$? : 마지막으로 실행된 명령어의 종료상태
$! : 마지막 백그라운드의 명령어의 프로세스 아이디
if[condition]; then
${script}
elif[condition]; then
${elif script}
else[condition]; then
${script}
fi
OPTION="${1}"
case ${OPTION} in
-f) FILE="${2}"
echo "FILE name is $FILE"
;;
-d) DIR="${2}"
echo "Dir name is $DIR"
;;
[0-9]) NUM="${1}"
echo "num is $NUM"
;;
*)
echo "`basename ${0}`: usage: [-f file] | [-d directory]"
exit 1
;;
esac
val =
expr 2 + 2
echo "Total value : $val"
> Total Value : 4
관계 연산자
부울 연산자
반복문