본문 바로가기
네이버클라우드/Linux

Linux 2일차 (2023-04-25)

by prometedor 2023. 4. 26.

기초 명령어 다루기

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