기초 명령어 다루기
Putty 서버 로그인
1일차에 생성한 Linux server 이용
Saved Sessions : Linux server 선택
> [Open]
사용자 로그인
login as : j23
password: 비밀번호 입력
**참고
일반 사용자 : $
관리자(root) : #
파일 목록 보기 - ls
명령어 | 설명 |
$ls | 디렉터리에 있는 파일 등 리스트를 출력 |
$ls / | 최상위 디렉터리의 파일 등 리스트를 출력 |
$ls /etc | 최상위 디렉터리에 있는 etc 디렉터리의 파일 등 리스트를 출력 |
$ls -l /etc | 최상위 디렉터리에 있는 etc 디렉터리의 파일 등 리스트를 자세히 출력 |
$ls -al /etc | 최상위 디렉터리에 있는 etc 디렉터리의 파일 등 숨김파일을 포함한 리스트를 자세히 출력 |
$ls -a -l /etc | ls -al /etc 와 같은 명령 |
$ls -alSR /etc | 최상위 디렉터리에 있는 etc 디렉터리 안에 있는 디렉터리를 숨김파일을 포함한 리스트를 각각 디렉터리 별로 오름차순으로 자세히 출력 |
$ls -ld /etc | 지정 경로에 있는 최상위 디렉토리의 목록만 자세히 출력 |
$ls /etc /usr | 최상위 디렉터리에 있는 etc 디렉터리와 usr 디렉터리 각각의 파일 등을 자세히 출력 |
$ls ~ | home 디렉터리의 파일 등 리스트를 출력 |
$ls . | 현재 디렉터리의 파일 등 리스트를 출력 |
$ls $HOME | home 디렉터리의 파일 등 리스트를 출력 |
$ls -F /etc | 최상위 디렉터리에 있는 etc 디렉터리의 파일 등 파일 종류 함께 보기(디렉터리는 파일명 뒤에 / 붙여서 보여줌) |
$ls -r /etc | 최상위 디렉터리에 있는 etc 디렉터리의 파일 등 거꾸로 정렬 (r : reverse) |
-a : all --> .으로 시작하는 숨긴 파일을 보여줌 | |
-A --> . .. 은 빼고 보여줌, 추천 | |
-l : long --> 자세한 정보 | |
-t : time | |
-S : Sort --> 내림차순 | |
-Sr : Sort --> 오름차순 | |
-R : Recursive | |
-h : human readable |
~$ ls
~$ ls --> 디렉터리에 있는 디렉터리, 파일 등 리스트를 출력함
a2 bb.c d2 d3 k.class t.class y.c yy
bb d1 d20 k k.java t.java ysy
~$ ls /
~$ ls / --> 최상위 디렉터리에 있는 디렉터리, 파일 등 리스트를 출력함
bin dev lib libx32 mnt proc sbin swap.img usr
boot etc lib32 lost+found nonexistent root snap sys var
data home lib64 media opt run srv tmp
~$ ls -l
~$ ls -l --> 리스트를 자세히 출력
합계 72
-rwxrwxr-x 1 j23 j23 15960 4월 24 15:11 bb
-rw-rw-r-- 1 j23 j23 114 4월 24 15:11 bb.c
drwxrwxr-x 2 j23 j23 4096 4월 25 11:39 d1
drwxrwxr-x 2 j23 j23 4096 4월 25 16:31 d2
drwxrwxr-x 2 j23 j23 4096 4월 25 11:26 d20
drwxrwxr-x 2 j23 j23 4096 4월 25 11:39 d3
-rw-rw-r-- 1 j23 j23 412 4월 24 14:40 k.class
-rw-rw-r-- 1 j23 j23 103 4월 24 14:39 k.java
-rw-rw-r-- 1 j23 j23 131 4월 24 15:13 t.java
-rw-rw-r-- 1 j23 j23 100 4월 24 14:44 y.c
drwxrwxr-x 2 j23 j23 4096 4월 25 12:23 ysy
-rwxrwxr-x 1 j23 j23 15960 4월 24 14:55 yy
**참고
- 로 시작 : 파일
d 로 시작 : 디렉터리
~$ ls -a
~$ ls -a --> 숨김파일도 모두 보여줌(.으로 시작하는 파일 : 숨김파일)
. .bashrc .python_history .vimrc k t.java
.. .cache .sqlite_history a2 k.class y.c
.bash_history .lesshst .t.java.swp bb k.java yy
.bash_logout .profile .viminfo bb.c t.class
~$ ls -al
~$ ls -al --> 숨김 파일까지 모두 자세히 보여줌
합계 140
drwxr-x--- 8 j23 j23 4096 4월 25 16:31 .
drwxr-xr-x 45 root root 4096 12월 30 14:05 ..
-rw------- 1 j23 j23 522 4월 25 14:01 .bash_history
-rw-r--r-- 1 j23 j23 220 1월 7 2022 .bash_logout
-rw-r--r-- 1 j23 j23 3771 1월 7 2022 .bashrc
drwx------ 2 j23 j23 4096 4월 24 12:27 .cache
-rw------- 1 j23 j23 36 4월 25 14:57 .lesshst
-rw-r--r-- 1 j23 j23 807 1월 7 2022 .profile
-rw------- 1 j23 j23 71 4월 25 12:44 .python_history
-rw------- 1 j23 j23 133 4월 24 15:03 .sqlite_history
-rw-r--r-- 1 j23 j23 12288 4월 24 15:15 .t.java.swp
-rw------- 1 j23 j23 11185 4월 25 16:31 .viminfo
-rw-r--r-- 1 j23 j23 80 4월 25 15:43 .vimrc
-rwxrwxr-x 1 j23 j23 15960 4월 24 15:11 bb
-rw-rw-r-- 1 j23 j23 114 4월 24 15:11 bb.c
drwxrwxr-x 2 j23 j23 4096 4월 25 11:39 d1
drwxrwxr-x 2 j23 j23 4096 4월 25 16:31 d2
drwxrwxr-x 2 j23 j23 4096 4월 25 11:26 d20
drwxrwxr-x 2 j23 j23 4096 4월 25 11:39 d3
-rw-rw-r-- 1 j23 j23 412 4월 24 14:40 k.class
-rw-rw-r-- 1 j23 j23 103 4월 24 14:39 k.java
-rw-rw-r-- 1 j23 j23 131 4월 24 15:13 t.java
-rw-rw-r-- 1 j23 j23 100 4월 24 14:44 y.c
drwxrwxr-x 2 j23 j23 4096 4월 25 12:23 ysy
-rwxrwxr-x 1 j23 j23 15960 4월 24 14:55 yy
~$ ls -al . /etc
~$ ls -al . /etc --> 홈 디렉터리와 최상위 디렉터리에 있는 etc 디렉터리 각각의 파일 등을 자세히 출력
.:
합계 128
drwxr-x--- 3 j23 j23 4096 4월 24 16:22 .
drwxr-xr-x 45 root root 4096 12월 30 14:05 ..
-rw------- 1 j23 j23 500 4월 24 15:39 .bash_history
-rw-r--r-- 1 j23 j23 220 1월 7 2022 .bash_logout
-rw-r--r-- 1 j23 j23 3771 1월 7 2022 .bashrc
drwx------ 2 j23 j23 4096 4월 24 12:27 .cache
-rw------- 1 j23 j23 20 4월 24 16:22 .lesshst
생략 ...
/etc:
합계 988
drwxr-xr-x 113 root root 4096 12월 30 14:27 .
drwxr-xr-x 21 root root 4096 12월 29 17:55 ..
drwxr-xr-x 3 root root 4096 12월 29 17:56 .java
-rw------- 1 root root 0 8월 9 2022 .pwd.lock
drwxr-xr-x 3 root root 4096 8월 9 2022 ModemManager
drwxr-xr-x 3 root root 4096 8월 9 2022 NetworkManager
drwxr-xr-x 2 root root 4096 8월 9 2022 PackageKit
drwxr-xr-x 2 root root 4096 12월 29 17:09 UPower
drwxr-xr-x 8 root root 4096 12월 29 17:56 X11
생략 ...
파일의 정보
$ls -1
d rwx r-- r-x | 1 | root | root | 22 | 15 07:50 | dd/ |
- rw- r-- r-- | 1 | blue | blue | 312 | 15 07:55 | a1 |
권한 | 하드링크 수 | 소유주 | 소유그룹 | 용량 | 파일수정시간 | 파일명 |
권한
d 로 시작 : 디렉터리
- 로 시작 : 파일
r : read / w : write / x : excute
파일명
dd/ : 디렉터리는 파란 글씨로 표시됨
파일 내용 보기 - nl, cat, head, tail
명령어 | 설명 |
$cat /etc/passwd | 최상위 디렉터리에 있는 etc 디렉터리의 passwd 파일 보기 |
$cat -n /etc/bash.bashrc | 최상위 디렉터리에 있는 etc 디렉터리의 bash.bashrc 파일 공백 포함하여 행 번호 붙여서 보기 (빈 행도 행 번호 있음) |
$cat -b /etc/bash.bashrc | 최상위 디렉터리에 있는 etc 디렉터리의 bash.bashrc 파일 공백 미포함하여 행 번호 붙여서 보기 (빈 행은 행 번호 없음) |
$nl /etc/bash.bashrc | 최상위 디렉터리에 있는 etc 디렉터리의 bash.bashrc 파일 공백 미포함하여 행 번호 붙여서 보기 (빈 행은 행 번호 없음) |
$nl /etc | error --> 디렉터리이므로 내용을 볼 수 없음 |
$cat /etc | error --> 디렉터리이므로 내용을 볼 수 없음 |
$cat -n /etc/vim/vimrc | 최상위 디렉터리에 있는 etc 디렉터리의 vim 디렉터리의 vimrc 파일 공백 포함한 행 번호 붙여서 보기 (빈 행은 행 번호 없음)$nl /etc/vim/vimrc 와 같음 (빈 행도 행 번호 있음) |
$cat -b /etc/vim/vimrc | $nl /etc/vim/vimrc 와 같음 (빈 행은 행 번호 없음) |
$nl /etc/vim/vimrc | $cat -n /etc/vim/vimrc 와 같음 (빈 행도 행 번호 있음) |
$nl /etc/services | 최상위 디렉터리에 있는 etc 디렉터리의 services 파일 공백 미포함하여 행 번호 붙여서 보기 (빈 행은 행 번호 없음) |
$head /etc/services | 처음부터 10줄 (default 값) |
$tail /etc/services | 끝에서 10줄 (default 값) |
$head -5 /etc/services | 처음부터 5줄 |
~$ nl /etc, ~$ cat /etc
~$ nl /etc --> nl 디렉터리
nl: /etc: 디렉터리입니다
~$ cat /etc
cat: /etc: 디렉터리입니다
~/d2$ cat
~$ mkdir d2 --> 디렉터리 생성
~$ cd d2 --> 생성한 d2 디렉터리로 이동
~/d2$ pwd --> d2 디렉터리의 경로
/home/j23/d2
~/d2$ who > a1 --> 누가 접속해 있는지의 실행결과를 a1 이란 이름으로 파일로 저장
~/d2$ cal > a2 --> 캘린더 실행결과를 a2 이란 이름으로 파일로 저장
~/d2$ date > a3 --> 현재 날짜와 시간 보기 실행결과를 a3 이란 이름으로 파일로 저장
~/d2$ ls
a1 a2 a3
~/d2$ cat a1 --> a1에 저장된 '누가 접속해 있는지의 실행결과' 보기
j40 pts/0 2023-04-25 09:25 (10.0.2.2)
j pts/1 2023-04-25 09:25 (10.0.2.2)
j pts/2 2023-04-25 09:25 (10.0.2.2)
j pts/3 2023-04-25 09:26 (10.0.2.2)
j pts/4 2023-04-25 09:26 (10.0.2.2)
생략 ...
~/d2$ cat a2
4월 2023
일 월 화 수 목 금 토
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
ㄴ ~/d2$ cat > a4 --> a4라는 파일을 생성하며 편집
~/d2$ cat > a4 --> a4라는 파일을 생성하며 편집
k
j
jj
t
~/d2$ cat a4 --> a4 파일 내용 보기
k
j
jj
t
~/d2$ cat a4 -n --> 공백 포함하여 번호 붙임
1 k
2
3 j
4
5 jj
6
7 t
~/d2$ cat a4 -b --> nl(number line) 과 같은 기능(공백 포함하지 않고 행 번호 붙임)
1 k
2 j
3 jj
4 t
~/d2$ nl a4 --> nl : number line(공백 포함하지 않고 행 번호 붙임)
1 k
2 j
3 jj
4 t
~/d2$ apt list --installed > a1
~/d2$ apt list --installed > a1
cat a1 --> 내용보기
cat a1 -n --> 번호 붙여 보기
nl a1
head a1 --> 처음부터 10줄(default)
tail a1 --> 끝부터 ..
head a1 - 5 --> 처음부터 5줄
tail a1 --> 끝부터 5줄
** 주의할 점 : 파일 이름을 원래 있던 파일 이름으로 설정할 경우 원본이 바뀌어 현재 저장한 내용으로 덮어씌워짐
~/d2$ date > a5 --> date 실행한 결과를 a5 라는 이름의 파일로 저장
~/d2$ nl a5 --> a5 파일 행 번호 붙여서 보기
1 2023. 04. 25. (화) 10:00:20 KST
~/d2$ date > a4 --> 원래 a4가 있는 상태에서 같은 이름 a4로 저장 시 덮어씌워짐(원본 바뀜)
~/d2$ nl a4
1 2023. 04. 25. (화) 10:01:08 KST
--> 원래 a4
k
j
jj
t
화면이 넘칠 때 - 명령어 뒤에 추가한다
$dpkg -l | nl
$dpkg -l | more --> 스페이스바 : 페이지 단위 이동 / 엔터 : 줄 단위 이동
$dpkg -l | less --> 스페이스바 : 페이지 단위 이동 / 엔터 : 줄 단위 이동
$dpkg -l | head --> 처음 부터 10줄(deafult)
$dpkg -l | tail --> 마지막 부터 10줄(deafult)
> 와 >> 의 차이
원래 있던 내용에 추가로 저장됨
~/d2$ cal >> a4 --> 원래 있던 내용에 추가로 저장됨
~/d2$ nl a4
1 2023. 04. 25. (화) 10:01:08 KST --> 추가로 저장된 내용
2 4월 2023 --> 원래 있던 내용
3 일 월 화 수 목 금 토
4 1
5 2 3 4 5 6 7 8
6 9 10 11 12 13 14 15
7 16 17 18 19 20 21 22
8 23 24 25 26 27 28 29
9 30
~/d2$ echo "tiger" > a6 --> tiger 라는 문자 출력 결과를 a6 라는 파일로 저장
~/d2$ nl a6
1 tiger
~/d2$ echo "ysy" >> a4 --> ysy 라는 문자 출력결과를 원래 있던 a6 파일에 추가로 저장함
~/d2$ nl a4
1 2023. 04. 25. (화) 10:01:08 KST
2 4월 2023
3 일 월 화 수 목 금 토
4 1
5 2 3 4 5 6 7 8
6 9 10 11 12 13 14 15
7 16 17 18 19 20 21 22
8 23 24 25 26 27 28 29
9 30
10 ysy
** 참고 : clear == ctrl + l
리눅스 명령어 형식
명령어 [option]... 인수1 인수2 인수n
하나의 명령어에 다양한 옵션들이 존재함
명령어마다 사용법이 조금씩 다를 수 있으며 shell 환경마다 차이가 있음
명령어가 가장 앞에 나오고 옵션들은 대부분 -를 붙여서 사용함
매뉴얼 사용하기(man, info, help)
명령어에 대해서 사용방법이나 옵션이 궁금할 때 편리하게 사용할 수 있음
whatis 명령어
which 명령어
whereis 명령어
~/d2$ whatis cp
cp (1) - copy files and directories
~/d2$ which cp
/usr/bin/cp
~/d2$ whereis cp
cp: /usr/bin/cp /usr/share/man/man1/cp.1.gz
man , info, help
명령어 | 설명 |
$man ls | ls manual 보기 |
$info ls | ls information |
$ls --help | ls 기본 사용법 |
$man 1 intro | 1번 섹션 intro |
$man 2 intro | 2번 섹션 intro |
$man cp | cp 명령어의 manual 보기 |
$man -f printf | printf 와 일치하는 manual |
$man -k printf | printf 가 들어간 모든 manual == apropos |
$info cp | cp information |
$cp --help | cp 기본 사용법 --> 한국어 지원 |
$manpath // manual path |
man 페이지 사용법
ㄴ man 페이지 보는 법
~/d2$ man cp
CP(1) --> 명령어 분류 User Commands CP(1)
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST --> [] : 생략이 가능함
cp [OPTION]... SOURCE... DIRECTORY --> ... : 중복 가능
cp [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options
too.
-a, --archive
same as -dR --preserve=all
--attributes-only
don't copy the file data, just the attributes
--backup[=CONTROL]
ㄴ man 페이지 보는 법
입력 키 | 기능 |
Enter | 한줄식 아래로 |
n | 다음 번 문자열(아래로) |
N | 이전 문자열(위로) |
b | 한 페이지 위로 이동(page up) |
Space-bar | 다음 페이지(page down) |
/name | name이란 문자열 검색 |
q | man page 종료 |
PATH(경로)
기호 | 경로 |
절대 경로 | / 부터 시작 |
상대 경로 | pwd 가 기준 |
. | 현재 Directory |
.. | 부모 Directory |
~ | HOME Directory |
/ | 최상위 root Directory |
경로 이동 cd - change directory
명령어 | 설명 |
$cd | 경로 이동 |
$cd / | 절대 경로 |
$pwd | 현재 위치 경로 |
$cd /usr | 절대 경로 |
$cd /usr/local | 절대 경로 |
$cd /etc | 절대 경로 |
$cd /usr/local/share | 절대 경로 |
$cd /usr/local/bin | 절대 경로 |
$cd .. | 부모 디렉터리로 이동 |
$cd /usr/local/share | 절대 경로 |
$cd ../bin | 상대 경로 |
$cd ~ | HOME 으로 이동 |
$pwd | 현재 작업 디렉터리 확인 print working directory |
**cd 경로 이동 시 주의
~$ cd
~$ mkdir d20 --> home에 d20 디렉터리 생성
~$ ls
a2 bb bb.c d2 d20 k k.class k.java t.class t.java y.c yy
~$ mkdir /d20 --> 최상위 디렉터리에 d20 생성 => 허가 거부
mkdir: `/d20' 디렉토리를 만들 수 없습니다: 허가 거부
~$ cd /d20 --> 최상위 디렉터리에는 d20 디렉터리가 없음
-bash: cd: /d20: 그런 파일이나 디렉터리가 없습니다
~$ cd d20 --> home에 있는 d20 디렉터리로 이동
~/d20$
ㄴ실습
~$ cd
~$ cd /
/$ pwd
/
/$ cd /usr
/usr$ pwd
/usr
/usr$ cd /usr/local
/usr/local$ pwd
/usr/local
/usr/local$ cd /etc
/etc$ pwd
/etc
cd /usr/local/share
/usr/local/share$ pwd
/usr/local/share
/usr/local/share$ cd /usr/local/bin
/usr/local/bin$ pwd
/usr/local/bin
/usr/local/bin$ cd ..
/usr/local$ pwd
/usr/local
/usr/local$ cd /usr/local/share
/usr/local/share$ pwd
/usr/local/share
/usr/local/share$ cd ../bin --> 상대경로
/usr/local/bin$ pwd
/usr/local/bin
/usr/local/bin$ cd ~
~$ pwd
/home/j23
:~$
리눅스 디렉터리
디렉터리 | 설명 |
/bin | 실행 파일 모음 /usr/bin 도 같음 binary |
/sbin | 관리 명령어 모음 --> 실행 파일 모음 |
/etc | 설정 파일 모음 |
/var | 가변 디렉터리 variable --> ex) html 문서 |
/usr | 설치된 파일 |
/root | root HOME --> 일반 사용자로 접근 불가 |
/home | 일반 사용자 기본 HOME |
/tmp | 임시 디렉터리 temporary (HOME 디렉터리 용량 다 찼을 경우 사용 가능) |
/mnt | mount 디렉터리 --> 하드디스크와 컴퓨터 연결 |
/dev | 장치 파일 모음 device |
/proc | 프로세스 상태, 하드 디스크와 관련 없음. 메모리 상태 process |
/lost+found | 백업, 복구를 위한 디렉터리 |
파일 다루기
파일 다루기
파일 | 디렉터리 | |
생성 | touch | mkdir |
vi | mkdir -p | |
cat | ||
복사 | cp | cp -r |
-i | ||
-f | ||
이동 | mv | mv |
이름 바꾸기 | mv | mv |
삭제 | rm | rmdir, rm -r |
rmdir 은 rm -r 으로 많이 사용 rename 명령은 Redhat 계열과 Debian 계열 사용법이 조금 다름 |
자주 사용하는 옵션
옵션 | 설명 |
-i | interactive 대화형 모드 --> 정말 실행할 것인지 물어봄 |
-f | force 강제 --> 물어보지 않고 강제 실행 |
-r | recursive 재귀적 작업, 하위디렉터리까지 포함 |
파일과 디렉터리 만들기 - mkdir, cat, touch
명령어 | 설명 |
$cd | 경로 이동 |
$mkdir d1 && cd d1 | d1 디렉터리를 생성한 후 d1 디렉터리로 이동 --> 한 줄에 여러 명령 한 번에 가능 |
$ls && pwd | 현재 디렉터리의 목록과 경로를 한 번에 출력 |
$touch a1 | 빈 파일 만들기(size 0인 파일) |
$cal > a2 | cal(달력) 내용을 a2 파일로 저장 |
$date >> a3 | date(날짜와 시간) 내용을 a3 파일에 추가 |
$cat > a4 | 내용 입력 후 빈 줄에서 ^D(저장) |
$ls -al | 목록 자세히 보기 |
$mkdir d10 | d10 디렉터리 생성 |
$mkdir d2 d3 d4 | d2, d3, d4 디렉터리 한 번에 생성 |
$touch -t 200012251230 d2 | 파일명을 임의의 시간으로 변경 |
$mkdir {a..k} | 여러 개 한 번에 만들기 --> a 부터 k 까지의 문자를 파일명으로 하여 한 번에 파일 만들기 |
$touch b{1..10} | 빈 파일 여러 개 한 번에 만들기 --> a 부터 k 까지의 문자를 파일명으로 하여 한 번에 파일 만들기 |
명령어 || 명령어 : or 연산. 앞 명령어가 참이면 뒤 명령어는 실행하지 않음 명령어 && 명령어 : and 연산. 앞 명령어가 참일 때만 뒤 명령어 실행 |
ㄴ실습
~/d2$ ls
~/d2$ cal > a1 --> cal(달력) 내용을 a2 파일로 저장
~/d2$ ls
a1
~/d2$ touch a2 --> a2 이름으로 빈 파일(size 0) 생성
~/d2$ ll
합계 12
drwxrwxr-x 2 j23 j23 4096 4월 25 12:03 ./
drwxr-x--- 7 j23 j23 4096 4월 25 11:39 ../
-rw-rw-r-- 1 j23 j23 193 4월 25 12:03 a1
-rw-rw-r-- 1 j23 j23 0 4월 25 12:03 a2
~/d2$ touch -t 202212251212 a2 --> 해당 시간으로 조작하기
~/d2$ ll
합계 12
drwxrwxr-x 2 j23 j23 4096 4월 25 12:03 ./
drwxr-x--- 7 j23 j23 4096 4월 25 11:39 ../
-rw-rw-r-- 1 j23 j23 193 4월 25 12:03 a1
-rw-rw-r-- 1 j23 j23 0 12월 25 12:12 a2 --> 2022년 12월 25일 12시 12분으로 조작됨
~/d2$ mkdir a5 --> a5 라는 이름으로 디렉터리 생성
~/d2$ ls
AA300 a2 a5
~/d2$ mkdir d{1..100} --> d1, d2, ... , d100 디렉터리를 한 번에 생성
~/d2$ ls
AA300 d12 d19 d25 d31 d38 d44 d50 d57 d63 d7 d76 d82 d89 d95
a2 d13 d2 d26 d32 d39 d45 d51 d58 d64 d70 d77 d83 d9 d96
a5 d14 d20 d27 d33 d4 d46 d52 d59 d65 d71 d78 d84 d90 d97
d1 d15 d21 d28 d34 d40 d47 d53 d6 d66 d72 d79 d85 d91 d98
d10 d16 d22 d29 d35 d41 d48 d54 d60 d67 d73 d8 d86 d92 d99
d100 d17 d23 d3 d36 d42 d49 d55 d61 d68 d74 d80 d87 d93
d11 d18 d24 d30 d37 d43 d5 d56 d62 d69 d75 d81 d88 d94
복사하기 - cp
명령어 | 설명 |
$pwd && cd | 현재 경로로 이동 |
$cp /etc/bashrc . | 현재 위치로 파일 복사 |
$ls | 목록보기(디렉터리명만) |
$mkdir d1 && cd d1 | 디렉터리 만들고 성공하면 이동 --> 한 줄에 여러 명령 한 번에 가능 |
$cp /etc/bashrc . | 현재 위치로 etc 디렉터리에 있는 bashrc 파일 복사 |
$cp /etc/bashrc | 목적지가 생략되어 error |
$cp /etc/bashrc bs3 | 다른 이름으로 복사 --> etc 디렉터리에 있는 bashrc 파일을 bs3 라는 이름으로 복사 |
$ls -l | 리스트 목록 출력 |
$cp /etc/* . | 현재 위치로 etc 디렉터리의 모든 디렉터리 파일 복사하기 |
$cp -r /etc . | 디렉터리까지 복사 --> 하위 디렉터리까지 복사(etc 폴더 통째로 복사) |
$cp -r /etc ee | 복사하면서 이름 바꾸기 --> etc 폴더를 통째로 ee 라는 이름으로 복사 |
$mkdir d20 | d20 이라는 이름의 디렉터리 생성 |
$cp -r /etc d20 | 하위 디렉터리까지 복사하여 생성한 디렉터리 안에 넣기 --> etc 폴더를 통째로 그대로 d20 디렉터리에 복사 |
$cp -p /etc d20 | 원본파일 정보 그대로 복사 |
cp -l | hard link |
cp -s | soft link |
cp -v | 복사 전 복사 할 파일 출력 |
cp -p | 속성 유지하며 복사 |
cp -i | 복사를 할 지 물어봄 |
ㄴ 실습
~/d2$ cal > a1
~/d2$ date > a2
~/d2$ l --> al -lf (alias 설정)
합계 8
-rw-rw-r-- 1 j23 j23 193 4월 25 12:10 a1
-rw-rw-r-- 1 j23 j23 33 4월 25 12:10 a2
~/d2$ cp /etc/magic . --> etc 디렉터리에 있는 magic 을 현재 위치로 복사
~/d2$ l
합계 12
-rw-rw-r-- 1 j23 j23 193 4월 25 12:10 a1
-rw-rw-r-- 1 j23 j23 33 4월 25 12:10 a2
-rw-r--r-- 1 j23 j23 111 4월 25 12:10 magic
~/d2$ cp /etc/magic a4 --> 복사하면서 이름바꾸기
~/d2$ cp /etc/magic d200 --> 디렉터리 안에 복사(etc 디렉터리에 있는 magic을 d200 디렉터리로 복사하여 이동)
~/d2$ ls
a1 a2 a4 d200 magic
~/d2$ ls d200/ --> d200 목록보기
magic
~/d2$ cp /etc/legal . --> 현재 위치로 같은 이름으로 복사
~/d2$ cp /etc/legal a7 --> a7과 같은 이름의 파일이 있으면 파일 덮어씀
~/d2$ cp /etc/legal a7 -f --> 물어보지 않고 강제로 복사
~/d2$ cp /etc/legal a7 -i --> 복사할지 물어봄
cp: 'a7'를 덮어쓸까요? n
~/d2$ cp /etc/legal d200/ --> 디렉터리 안에 복사됨
~/d2$
~/d2$ cp /etc/legal d200/a9 --> 디렉터리로 안에 이름 바꿔서 복사(d200 디렉터리 안에 a9 이름으로 복사)
~/d2$ ls
a1 a2 a4 a7 d200 legal magic
~/d2$ ls d200/ --> d200 디렉터리 목록보기
a9 legal magic
~/d2$ alias cp='cp -i' --> alias 설정 해주기(복사 시 무조건 물어보도록)
~/d2$ cp /etc/legal a7
cp: 'a7'를 덮어쓸까요? y
~/d2/d20$ cp /etc/*.conf . --> 현재 위치로 etc 디렉터리에서 확장자가 conf 인 것 모두 복사
~/d2/d20$ ls
adduser.conf hdparm.conf nftables.conf sudo.conf
ca-certificates.conf host.conf nsswitch.conf sudo_logsrvd.conf
debconf.conf ld.so.conf overlayroot.conf sysctl.conf
deluser.conf libaudit.conf pam.conf ucf.conf
e2scrub.conf logrotate.conf resolv.conf usb_modeswitch.conf
fuse.conf mke2fs.conf rsyslog.conf warnquota.conf
gai.conf multipath.conf sensors3.conf xattr.conf
이동, 이름 바꾸기 - rename, mv
명령어 | 설명 |
$mkdir d20 d30 | d20, d30 이름으로 디렉터리 생성 |
$touch a20 a30 | a20, a30 이름으로 빈 파일 생성 |
$mv a20 AA30 | 이름 바꾸기 --> a20 을 AA30 으로 이름 바꾸기 |
$ls | |
$mv a30 A300 | 이름 바꾸기 --> a30 을 A300 으로 이름 바꾸기(파일) |
$mv d30 D300 | 이름 바꾸기 --> d30 을 D300 으로 이름 바꾸기(디렉터리) |
$ls | |
$mkdir /mydd | 권한 없음 |
$mkdir /tmp/mydd | /tmp 디렉터리만 권한 허용 |
$ls /tmp/mydd | tmp 디렉터리 안의 mydd 디렉터리 목록 보기 |
mv AA30 /tmp/mydd | AA30 파일을 tmp 디렉터리 안의 mydd 디렉터리 안으로 이동 |
> 확장자 한꺼번에 바꾸기 | |
$mkdir d20 $$ cd d20 | d20 이름의 디렉터리 생성 후 생성된 d20 디렉터리로 경로 이동 |
$cp /etc/* . | 현재 위치로 etc 디렉터리의 모든 디렉터리 파일 복사하기 |
$cp /etc/*.conf . | 현재 위치로 확장자가 conf인 파일 모두 복사 |
$rename s/\.conf/\.777/g *.conf | 확장자가 conf 인 파일 777로 확장자 모두 변경 --> 역슬래시 - 이스케이프 문자 |
ㄴ 실습
~/d2$ mkdir d20 && cd d20 --> 디렉터리 생성과 이동 한 번에 가능
~/d2/d20$ cp /etc/*.conf . --> 확장자 conf 인 것만 복사됨
~/d2/d20$ ls
adduser.conf hdparm.conf nftables.conf sudo.conf
ca-certificates.conf host.conf nsswitch.conf sudo_logsrvd.conf
debconf.conf ld.so.conf overlayroot.conf sysctl.conf
deluser.conf libaudit.conf pam.conf ucf.conf
e2scrub.conf logrotate.conf resolv.conf usb_modeswitch.conf
fuse.conf mke2fs.conf rsyslog.conf warnquota.conf
gai.conf multipath.conf sensors3.conf xattr.conf
~/d2/d20$ rename s/\.conf/\.777/g *.conf --> 역슬래시 - 이스케이프 문자
~/d2/d20$ ls
adduser.777 hdparm.777 nftables.777 sudo.777
ca-certificates.777 host.777 nsswitch.777 sudo_logsrvd.777
de.777.777 ld.so.777 overlayroot.777 sysctl.777
deluser.777 libaudit.777 pam.777 ucf.777
e2scrub.777 logrotate.777 resolv.777 usb_modeswitch.777
fuse.777 mke2fs.777 rsyslog.777 warnquota.777
gai.777 multipath.777 sensors3.777 xattr.777
~/d2$ mkdir ysy111 --> ysy111 디렉터리 생성
~/d2$ mv ysy111/ ~/ysy --> ysy111을 HOME 디렉터리의 ysy 디렉터리 로 이동
~/d2$ ll
합계 36
drwxrwxr-x 3 j23 j23 4096 4월 25 12:23 ./
drwxr-x--- 8 j23 j23 4096 4월 25 12:23 ../
-rw-rw-r-- 1 j23 j23 193 4월 25 12:10 a1
-rw-rw-r-- 1 j23 j23 111 4월 25 12:12 a2
-rw-r--r-- 1 j23 j23 111 4월 25 12:12 a4
-rw-r--r-- 1 j23 j23 267 4월 25 12:19 a7
drwxrwxr-x 2 j23 j23 4096 4월 25 12:15 d200/
-rw-r--r-- 1 j23 j23 267 4월 25 12:15 legal
-rw-r--r-- 1 j23 j23 111 4월 25 12:10 magic
j23@ace:~/d2$ cd
j23@ace:~$ ls
a2 bb.c d2 d3 k.class t.class y.c yy
bb d1 d20 k k.java t.java ysy
**주의
~/d2$ cp /etc/v
cp: '/etc/v' 다음에 대상 파일 명령이 누락됨
Try 'cp --help' for more information.
~/d2$ cp /etc/vtrgb .
~/d2$ cp /etc/vtrgb
cp: '/etc/vtrgb' 다음에 대상 파일 명령이 누락됨
Try 'cp --help' for more information.
~/d2$ cp /etc/vtrgb /var
cp: 일반 파일 '/var/vtrgb'을(를) 생성할 수 없음: 허가 거부
삭제 - rm, rmdir
명령어 | 설명 |
$cd | HOME 디렉터리로 이동 |
$mkdir d50 && cd d50 | d50 디렉터리 생성 후 d50 디렉터리로 경로 이동 |
$cp /etc/* . | etc 디렉터리에 있는 모든 파일 현재 위치로 복사(d50 디렉터리) |
$rm a* | a로 시작하는 파일 모두 삭제 |
$rm [b-f]* | b에서 f로 시작하는 모든 파일 |
$rm * | 모든 파일 삭제 |
$cp /etc/* . | etc 디렉터리에 있는 모든 파일 현재 위치로 복사 |
$rm -i a* | a 로 시작하는 모든 파일 물어보고 삭제 |
$rm -f b* | b 로 시작하는 모든 파일 물어보지 않고 강제로 삭제 |
$rm -f [^jtbc]* | j, t, b, c 를 제외하고 삭제 |
$mkdir d100 | d100 이름의 디렉터리 생성 |
$rm -rf d100 | d100 디렉터리를 하위 디렉터리까지 물어보지 않고 강제로 삭제 |
$rm -rf /tmp | 허가 거부 |
$rm [a-c]* | a, b, c 로 시작하는 모든 파일 삭제 |
$rm[!a-c]* | a, b, c 로 시작하는 파일을 제외한 모든 파일 삭제 |
$rm [^a-f]* | a, b, c, d, e, f 를 제외하고 모두 삭제 |
$mkdir d30 && cd d30 | d30 디렉터리 생성 후 d30 디렉터리로 경로 이동 |
$cp -r /etc/s* .. | etc 디렉터리에 있는 s로 시작하는 모든 파일 하위 디렉터리까지 통째로 부모 디렉터리에 복사 |
$rmdir s* | s로 시작하는 모든 디렉터리 삭제 |
$rm -r s* | s로 시작하는 모든 파일 삭제 |
ㄴ실습
~/d2$ cp -r /etc/s* . 2>/dev/null --> 에러 안보이게
~/d2$ ls
screenrc sensors3.conf sos subgid- sudo_logsrvd.conf systemd
security services ssh subuid sudoers.d
selinux shells ssl subuid- sysctl.conf
sensors.d skel subgid sudo.conf sysctl.d
~/d2$ rm -rf s* --> s로 시작하는 모든 파일 강제로 삭제
~/d2$ ls
~/d2$
~/d2$ mkdir d{1..100}
~/d2$ ls
AA300 d12 d19 d25 d31 d38 d44 d50 d57 d63 d7 d76 d82 d89 d95
a2 d13 d2 d26 d32 d39 d45 d51 d58 d64 d70 d77 d83 d9 d96
a5 d14 d20 d27 d33 d4 d46 d52 d59 d65 d71 d78 d84 d90 d97
d1 d15 d21 d28 d34 d40 d47 d53 d6 d66 d72 d79 d85 d91 d98
d10 d16 d22 d29 d35 d41 d48 d54 d60 d67 d73 d8 d86 d92 d99
d100 d17 d23 d3 d36 d42 d49 d55 d61 d68 d74 d80 d87 d93
d11 d18 d24 d30 d37 d43 d5 d56 d62 d69 d75 d81 d88 d94
~/d2$ rm -rf d* --> d로 시작하는 모든 파일 삭제
~/d2$ ls
AA300 a2 a5
~/d2$ rm -rf * --> 모든 파일 강제 삭제
~/d2$ ls
~/d2$
명령 프롬프트 - Ctrl 키 활용 (^ == Ctrl Key)
^u : 명령어 삭제, ^/
^c : cancel, ^L : clear
^w : 한 단어 지우기(뒤에서 부터 한 단어 삭제)
^d : 파일의 끝 (EOF), logout
^a : 커서 처음으로, ^e : 커서 마지막으로
^p : 이전 명령어 (위쪽 방향키와 같음)
^n : 다음 명령어 (아래쪽 방향키와 같음)
^t : 바로 이전 문자와 맞 바꾸기
^s : suspend
^q : suspend 해제
^d : 현재 커서 문자 삭제
^f : ->, ^b : 좌로 이동
^k : 커서부터 끝까지 삭제, ^u : 커서부터 처음까지 삭제
^h : <-, ^m : Enter
ㄴ 명령프롬프트 실습
D:\>cls --> clear --> 창 깨끗이
D:\>mkdir dd --> dd 라는 디렉터리 생성
D:\>cd dd --> dd 라는 디렉터리로 이동
D:\dd>cd d1 d2 d3 --> d1 d2 d2 라는 디렉터리 없어서 이동 불가
지정된 경로를 찾을 수 없습니다.
D:\dd>mkdir d1 d2 d3 --> d1 d2 d3 라는 디렉터리 한 번에 생성
D:\dd>rmdir d1 d2 d3 --> d1 d2 d3 라는 디렉터리 한 번에 삭제
D:\dd>md d1 --> md == mkdir
D:\dd>cd d1 --> d1 디렉터리로 이동
D:\dd\d1>dir --> 디렉터리 목록 보기
D 드라이브의 볼륨: DATADRIVE1
볼륨 일련 번호: C2EB-2CA2
D:\dd\d1 디렉터리
2023-04-25 오전 10:57 <DIR> .
2023-04-25 오전 10:57 <DIR> ..
0개 파일 0 바이트
2개 디렉터리 999,930,863,616 바이트 남음
D:\dd\d1>cd .
D:\dd\d1>cd .. --> 부모로 이동
D:\dd>tree --> 폴더 경로 목록 보기
DATADRIVE1 볼륨에 대한 폴더 경로의 목록입니다.
볼륨 일련 번호는 C2EB-2CA2입니다.
D:. --> 현재 디렉터리 d1
└─d1
D:\dd>tree .. --> 부모로 이동(dd)
D:\dd>tree --> 부모로 이동한 폴더 경로 목록 보기
DATADRIVE1 볼륨에 대한 폴더 경로의 목록입니다.
볼륨 일련 번호는 C2EB-2CA2입니다.
D:. --> 부모로 이동한 폴더에서 현재 디렉터리의 하위 디렉터리 확인
├─d1
├─d3
├─d4
└─d5
D:\dd\d3\d30\d300>cd ..\..\..\ --> D:\dd 로 이동됨
D:\dd>cd d3/d30/d300 --> d300으로 이동
D:\dd\d3\d30\d300>calc --> 계산기 실행
D:\dd\d3\d30\d300>mspaint --> 그림판 실행
D:\dd\d3\d30\d300>notepad --> 메모장 실행
**배치파일 생성해보기
D:\dd\d3>copy con b.bat --> con 이라는 파일을 b라는 이름으로 복사하여 mspaint, calc, notepad 명령 추가 후 저장
echo hello
mspaint
calc
notepad
^Z --> ctrl + z : 저장
1개 파일이 복사되었습니다.
D:\dd\d3>type b.bat --> type : 파일 내용 보기 (b.bat 이라는 파일 보기)
echo hello
mspaint
calc
notepad
D:\dd\d3>b.bat --> 입력해둔 mspaint, calc, notepad 실행됨
D:\dd\d3>echo hello
hello
D:\dd\d3>mspaint
D:\dd\d3>calc
D:\dd\d3>notepad
** 참고
F7 --> history
vi editor
vi 에디터
vi 에디터는 윈도우에서 메모장과 같은 unix 계열의 범용 에디터임
가장 많이 사용하며 막강한 기능을 자랑함
메모장과는 사용환경이 완전히 다르며 익숙해 질 때까지 어느정도의 시간이 필요함
현재 커서의 위치가 중요함 -> 작업의 기준점이 되기 때문
vi 네 가지 모드
입력 모드
입력 키 | 설명 |
i | 현재 커서 앞부터 입력(insert) |
a | 현재 커서 다음부터 입력(append) |
o | 다음 줄 첫 줄부터 입력 |
I (대문자 i) | 현재 line 처음에 추가 |
A | 현재 line 마지막부터 추가 |
O | 현재 line 한 줄 위에 추가 |
cc | 현재 line 삭제 후 insert |
cw | 단어 삭제 + insert |
시작과 종료
명령어 | 설명 |
$vi | vi 시작 |
$vi /etc/profile | etc 디렉터리의 profile 파일 열어보기 |
다음 줄 첫 줄부터 입력 | |
$vi aa.c | aa.c 라는 파일 만들면서 vi 편집기 열기 |
:w | write, 저장 |
:w bb.c | 다른 이름으로 저장 |
:wq :x ZZ | 저장 종료 |
:wq! | !는 강제를 의미 |
:q! | 저장하지 않고 강제 종료 |
line, 단어, 문자 단위 작업
입력 키 | 설명 |
yy | 라인 복사 |
dd | 라인 잘라내기 |
p | 붙여넣기 |
yw | 단어 복사 |
dw | 단어 잘라내기 --> 5dw : 단어 5개 자름 |
P | 윗 줄에 붙여넣기 |
u | undo --> 이전 실행(뒤로가기) |
^r | redo --> 다음 실행(앞으로 가기) |
R | Replace |
~ | 대, 소문자 변환 |
x | 한 문자 삭제 |
J | 두 줄 합치기 |
x, dl | 현재 위치한 문자 삭제 |
x, dh | 이전 위치한 문자 삭제 |
d0 | 현재 행의 처음까지 삭제 |
D, d$ | 현재 행의 끝까지 삭제 |
dj | 현재 행과 다음 행 삭제 |
dk | 현재 행과 이전 행 삭제 |
커서의 이동
입력 키 | 설명 |
h | 좌 |
j | 하 |
k | 상 |
l (소문자 L) | 우 |
[[ | 처음으로 |
]] | 끝으로 |
gg | 처음으로 |
G | 끝으로 |
:20 | 20번째 라인으로 이동 |
:35 | 35번째 라인으로 이동 |
:10 | 10번째 라인으로 이동 |
15G | 15번째 라인으로 이동 |
30G | 30번째 라인으로 이동 |
^, 0 | 행의 처음 단어단위 이동 w : 다음 b : 이전 |
$ | 행의 끝 |
<커서이동 그림> | |
^D 반 화면 아래로 ^U 반화면 위로 ^F 한 화면 아래로 ^B 한 화면 위로 |
:se nonu --> set no number
:se nu --> set number
[ESC] --> normal mode
G --> 가장 마지막으로 이동
gg --> 가장 처음으로 이동
:100 --> 100 라인으로 이동
:28 --> 28 라인으로 이동
35G --> 35 라인으로 이동
10G --> 10 라인으로 이동
5dd --> 앞부터 5줄 잘라내기
5p --> 복사한 내용 앞부터 5번 붙여넣기
u --> 뒤로가기
검색, 치환
입력 키 | 설명 |
/etc | etc 검색 |
/5 | 5 검색 |
?korea | korea 검색 |
?7 | 7 검색 |
:3, 10 s/aa/AA | 3 ~ 10 라인 aa -> AA 변경 |
:10, 30 s/bb/BANK | 한 줄에 여러 번 나올 때 하나만 변경(10 ~ 30 라인에서 한 줄에 하나만 bb를 BANK 로 변경) |
:10, 30 s/bb/BANK/g | 한 줄에 여러 번 나와도 모두 변경, global(10 ~ 30 라인에서 한 줄에 여러 번 나와도 모두 bb를 BANK 로 변경) |
:1,$ s/aa/AA | 처음부터 끝까지 (처음부터 끝까지 aa를 AA 로 변경) |
:% s/aa/AA | 전체 (전체를 aa를 AA 로 변경) |
같은 단어 찾기 | 단어 위에서 Shift + 8 (* : all) |
manual 보기 | 단어 위에서 Shift + k |
환경설정, 기타
입력 키 | 설명 |
:set | 설정 내용 보기 |
:set all | 전체 설정 |
:f | 현재 파일 |
:set number | 번호 붙이기 |
:set nonumber | 번호 해제 |
:set nu | 번호 붙이기 단축 명령 |
:set nonu | 번호 해제 단축 명령 |
:se ai | auto indent --> 들여쓰기 |
:se noai | no auto indent |
:se ts=5 | tap stop --> tap 간격 |
:!bash | bash 명령 |
:w a40 | 다른 이름으로 저장 --> a40 이름으로 저장 |
:10, 20 w a50 | 10 ~ 20 번째 라인을 a50 이름으로 저장 |
:set paste | :se ai 가 안 될 때 대체 |
:% s/^V+M/g | ^M자 없애기 |
:r ! date | date 경과를 파일에 삽입 --> 2번째 라인에 추가 됨 |
:20 r ! cal | 20 라인에 cal 삽입 |
:0 r ! date | 맨 위에 date 삽입 --> 첫 번째 줄에 삽입하려면 0으로 해야됨 |
:set cursorline | 커서 있는 라인 줄 표시 |
:set mouse=a, r | r은 해제 |
:ab P print(" 사용법 : P 누른 후 space |
visual mode
입력 키 | 설명 |
^V | 블록 지정 |
d | 삭제 |
y | 복사 |
c | 치환 |
~ | 대소문자 전환 |
J | 두 줄 합치기 |
U | 대문자로 변환 |
u | 소문자로 변환 |
: | 명령 모드 |
> | 행 앞에 탭 삽입 |
< | 행 앞에 탭 제거 |
v | visual |
shift + v | visual block 행 단위 |
^v | visual block 열 단위 |
복사하기 : y, 잘라내기 : d, 붙여넣기 : p | |
:set mouse=a 마우스 설정 :set mouse=r 마우스 설정 해제 mouse 설정 지정하면 자동으로 Visual mode 로 전환 |
$vi ~/.vimrc // vim 기본 설정 파일
se nu ai ci si
se ts=4 sw=4
se ruler title showmatch
syntax on
hi comment ctermfg=red
창 분할
: vs aa // 세로로 분리
: sp bb // 가로로 분리
: new file명
창전환 : ^WW
vim 튜토리얼
$vimtutor
$cat /usr/share/vim/vim70/tutor/tutor.ko.utf-8
$vimtutor -g ko
영문 -g en
한글 -g ko
C언어 compile 하기 (*로 삼각형 출력하기)
~/d2$ vi cc.c --> cc.c 파일 생성하며 vi 에디터로 편집 시작
//vi 에디터로 편집
#include <stdio.h>
int main(void){
int num = 5;
for(int i = 0; i < num; i++){
for(int j = num - 1; j > i; j--){
printf(" ");
}
for(int j = 0; j < 2 * i + 1; j++){
printf("*");
}
printf("\n");
}
}
:x
~/d2$ gcc cc.c -o c --> 컴파일
~/d2$ ./c --> 출력
*
***
*****
*******
*********
java compile 하기 (*로 삼각형 출력하기)
~/d2$ vi jj.java --> jj.java 라는 파일을 생성하며 vi 에디터로 편집 시작
//vi 에디터로 편집
public class jj{
static public void main(String[] str){
int num = 5;
for(int i = 0; i < num; i++){
for(int j = num - 1; j > i; j--){
System.out.print(" ");
}
for(int j = 0; j < 2 * i + 1; j++){
System.out.print("*");
}
System.out.print("\n");
}
}
}
:wq
~/d2$ javac jj.java --> 컴파일
~/d2$ java jj --> 실행
*
***
*****
*******
*********
홈 디렉터리와 환경설정
HOME 디렉터리
Multi user 시스템이기 때문에 자신의 데이터는 보호 받아야 하고 남의 집에 허락 없이 침입해서는 안 됨
시스템의 중요한 파일들은 일반 사용자가 함부로 수정, 삭제 할 수 있게 해서는 안 됨
개인은 자신의 홈 디렉터리에서만 필요한 작업들을 할 수 있음
SHELL 이란?
사용자들이 내리는 명령어들을 해석하여 기계어로 번역한 다음 운영체제인 kernel 에게 전달해 주는 역할을 함
커널과는 별도로 운영되며 사용자가 입력한 명령어가 잘못 되었거나 해석하지 못했을 경우 kernel 에 전달되지 않고
shell 차원에서 미리 예약된 메시지를 보냄
SHELL 관련 명령어
명령어 | 설명 |
$echo $SHELL | 현재 쉘 |
$env | 환경 변수 |
$chsh -l | 사용 가능한 shell 보기 |
$nl /etc/shells | 행 번호 붙여서 보기 |
$enable | 내부 명령어 보기 |
$history | 명령어 기록 보기 |
$!100 | history 목록에서 100번째 명령어 |
$!! | 바로 이전 명령어 다시 실행(==Alt+. ESC+.) |
$alias | 기능에 별칭 부여 |
$alias c='clear' | clear 기능을 c로 별칭 부여 |
$unalias | alias 기능 제거 |
$\ls | alias 기능 제거 |
$chsh | change shell |
$unalias c | c 기능 해제 |
$unalias -a | 모두 해제 |
ㄴ 실습
~/d2$ echo $SHELL --> 현재 쉘
/bin/bash
SHELL 환경변수와 파일
명령어 | 설명 |
지역 변수 : set | 시스템이 가지고 있는 설정 값들을 의미하며, 다시 로그인 해도 그 값을 유지 |
환경 변수 : env | 현재 로그인한 터미널에서만 적용되는 변수, 다시 로그인 하면 소멸. 현 세션에서만 유효 |
Ubuntu 환경 | |
~/.profile | 개인 설정 Master file |
~/.bashrc | 설정 보조 파일 |
~/.bash_aliases | alias 설정 |
~/.bash_history | 명령어 history 저장 |
~/.bash_logout | logout 시 실행 내용 |
~/.vimrc | vi 기본 설정 |
/etc/bash.bashrc | 전체 user 의 환경설정, root 만이 설정 가능 |
**참고
Red Hat 계열
ㄴ bash-profile
ㄴ bashrc
ㄴ bash_history
ㄴ bash-logout
ㄴ vimrc
ㄴ 실습
vi .bash_aliases
alias h='history'
alias l='ls -AlF'
alias c='clear'
alias cp='cp -i'
alias mv='mv -i'
alias df='df -h'
alias du='du -sh'
vi .vimrc
se nu ai ci si ts=4 sw=4 ruler title showmatch
syntax on
hi comment ctermfg=red
ab P printf(" "); --> P 입력 후 스페이스바 누르면 자동완성 됨.
ab J System.out.println(" "); --> J 입력 후 스페이스바 누르면 자동완성 됨.
~$ . ~/.profile
--> 설정 완료 후 다시 로그인 한 느낌
bash 경로 설정하기
bash 는 현재 경로에 실행파일이 존대하더라도 PATH 변수에 경로가 등록되어 있지 않다면 command not found 에러를 발생시킴
그래서 현재를 나타내는 ./ 를 붙인 후에 실행해야 명령어를 인식함
./ 을 생략해도 실행 가능하게 하기 위해서는 설정이 필요함
기타 실행 팔일은 ~/bin 디렉터리를 생성하고 그 곳에 모아두면 됨
> 현재 경로 PATH 환경변수에 추가하기
$PATH=$PATH:.
$echo $PATH
alias
명령어에 대한 별칭임
명령어가 긴 경우 짧게 알기 쉽게 별칭을 부여
ls -l 을 줄여서 ll 로 사용하는 것임
긴 명령어를 짧게 별칭으로 사용하면 편리함
$alias
$alias c='clear'
$alias
$c
$unalias c
$unalias -a
history
bash 는 가장 최근의 명령 1000개를 저장하고 있음
logout 하면 Memory 에 있는 history 를 .bash_history 에 저장
$history
$echo $HISTSIZE
$nl ~/.bash_history
$history -c --> history 초기화
$history -a // 중간에 .bash_history 파잉ㄹ에 추가
위 방향키를 누르면 이전 내린 명령어를 볼 수 있음
자동 완성 기능
tab 키를 이용하여 명령어나 경로를 쉽게 작업할 수 있음
시간 절약과 오타를 줄일 수 있음
바로 이전 명령어 다시 실행
~/d2/d20$ !! --> 바로 전에 실행한 명령어
expr 30 \* 5
150
이전 명령어 다시 실행
!!
ESC + .
Alt + .
ctrl + p : 이전
ctrl + n : 다음
초간단 shell script
$vi k.sh
#!/bin/bash
echo
echo -n 이름은 :
read A
echo -n 나이는 :
read B
echo 이름 : $A, 나이 : $B
echo "현재 시스템 사용자 목록"
who | sort | nl
echo Good-Bye!
echo
$bash k.sh
$./k.sh
$chmod 755 k.sh
$./k.sh
전역 변수와 지역 변수
환경 변수 : env
지역 변수 : set
export N="철수" // env 에 나옴
A=100 // env 에 안 나옴, set 에 나옴
명령어 type 알아보기
type. --> . is a shell builtin
type ls --> ls is an alias for ls -G
type cp --> cp is /bin/cp
y=2000
~/d2$ set | grep 2000 --> 지역 변수
HISTFILESIZE=2000
y=2000
~/d2$ env | grep 2000 --> 전역 변수
~/d2$
추가적으로 알아둘 것
stdin 0 --> 키보드 / 표준 입력
stdout 1 --> 모니터 / 표준 출력
stderr 2 --> 모니터
> redirection 재지향 - 출력
>>
< 입력
특정 단어가 나오면 입력 중단
~/d2$ cat << END > a10 --> END 라는 단어가 나오면 입력 중단
> aa
> bb
> END
file 타입
~/d2$ cd / --> root(최상위)
/$ ls
bin dev lib libx32 mnt proc sbin swap.img usr
boot etc lib32 lost+found nonexistent root snap sys var
data home lib64 media opt run srv tmp
/$ ll
합계 2097236
drwxr-xr-x 21 root root 4096 12월 29 17:55 ./
drwxr-xr-x 21 root root 4096 12월 29 17:55 ../
lrwxrwxrwx 1 root root 7 8월 9 2022 bin -> usr/bin/
drwxr-xr-x 4 root root 4096 4월 25 10:11 boot/
drwxr-xr-x 3 root root 4096 12월 29 17:06 data/
drwxr-xr-x 19 root root 4080 4월 25 09:23 dev/
drwxr-xr-x 113 root root 4096 4월 25 10:12 etc/
drwxr-xr-x 45 root root 4096 12월 30 14:05 home/
lrwxrwxrwx 1 root root 7 8월 9 2022 lib -> usr/lib/ --> -> : symbolic link (soft link) / 바로가기(주소값 연결되어있음)
lrwxrwxrwx 1 root root 9 8월 9 2022 lib32 -> usr/lib32/
lrwxrwxrwx 1 root root 9 8월 9 2022 lib64 -> usr/lib64/
생략 ...
--> -: file
--> d : directory
--> l: symbolic link
/$ file /lib --> symbolic link
/lib: symbolic link to usr/lib
~/d2$ file /etc --> 디렉터리
/etc: directory
~/d2$ file /bin --> symbolic link
/bin: symbolic link to usr/bin
stat 명령어
~/d2$ stat a2 --> stat : 상태 자세히 보기
File: a2
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: 804h/2052d Inode: 131109 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1024/ j23) Gid: ( 1025/ j23)
Access: 1998-08-27 09:23:00.000000000 +0900
Modify: 1998-08-27 09:23:00.000000000 +0900
Change: 2023-04-25 12:04:18.737748699 +0900
Birth: 2023-04-25 12:03:38.105802444 +0900
expr : 사칙연산
~/d2/d20$ expr 3 + 5
8
~/d2/d20$ expr 3 - 5
-2
~/d2/d20$ expr 3 / 5
0
~/d2/d20$ expr 30 / 5
6
~/d2/d20$ expr 30 * 5
expr: syntax error: unexpected argument `adduser.777' --> * : all
~/d2/d20$ expr 30 \* 5 --> \ ' " 이중에 쓰면됨
150
'네이버클라우드 > Linux' 카테고리의 다른 글
Linux 4일차 (2023-04-27) Linux System 관리 - 리눅스 설치(Ubuntu Linux) (2) | 2023.04.27 |
---|---|
Linux 3일차 (2023-04-26) Linux System 관리 - 리눅스 설치(Rocky Linux) (2) | 2023.04.26 |
Linux 3일차 (2023-04-26) Linux 기초 명령어 -다양한 명령어, 강력한 CLI (0) | 2023.04.26 |
Linux 3일차 (2023-04-26) Linux 입문 - 파일 분류 권한의 이해 (2) | 2023.04.26 |
Linux 1일차 (2023-04-24) (0) | 2023.04.24 |