반응형
파일 다루기
파 일 | 디렉터리 | |||||
생 성 | 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 d1 && cd d1 | 디렉토리 'd1'을 생성하고 해당 디렉토리로 이동 | ||
$ls && pwd | "&&"은 앞의 명령어가 성공적으로 실행된 후에만 뒤의 명령어를 실행하도록 하는 연산자이다. ls는 현재 디렉토리에 있는 파일과 디렉토리 목록을 출력하고, pwd는 현재 작업중인 디렉토리 의 경로를 출력한다. |
||
$touch a1 | 빈 파일 "a1" 만들기 | ||
$cal > a2 | cal(달력) 내용을 a2 파일로 '저장' | ||
$date >> a3 | date 내용을 a3 파일에 '추가' | ||
$cat > a4 | 내용 입력 후 빈 줄에서 ^D | ||
mkdir d10 | 디렉토리 "d10" 생성 | ||
mkdir d2 d3 d4 | 디렉토리 d2, d3, d4 생성 | ||
touch -t 200012251230 | 파일명을 임의의 시간으로 변경 | ||
mkdir {a..k} | 디렉토리 여러 개 한 번에 만들기 | ||
touch b{1..10} | 빈 파일 여러 개 한 번에 만들기 | ||
* 명령어 || 명령어 : or 연산. 앞 명령어가 참이면 뒤 명령어는 실행하지 않음. * 명령어 && 명령어 : and 연산. 앞 명령어가 참일때만 뒤 명령어 실행 |
- 복사하기 - cp
$cp /etc/bashrc . | 현재 위치(.)로 /etc/bashrc 파일 복사 | ||
$cp /etc/bashrc | 목적지가 생략되어 error | ||
$cp /etc/bashrc bs3 | /etc/bashrc 파일을 다른 이름(bs3)으로 복사 | ||
$cp /etc/* . | /etc/ 디렉토리의 모든 파일과 디렉토리(*)를 현재 위치(.) 복사 | ||
cp -r /etc . | /etc/ 디렉토리 전체를 현재 위치 (.) 로 복사. -r 옵션은 디렉토 리와 그 하위 디렉토리 및 파일을 모두 복사하도록 합니다. |
||
cp -r /etc ee | /etc/ 디렉토리 전체를 ee라는 이름의 디렉토리로 복사하는 명 령 |
||
cp p-p /etc/vimrc . | /etc/vimrc 파일을 현재 위치 (.)로 원본파일을 보존하여 복사 | ||
cp -l | hard link | ||
cp -s | soft link | ||
cp -v | 복사전 복사할 파일 출력 | ||
cp -p | 속성 유지하며 복사 |
- 이동, 이름 바꾸기 - rename, mv
$mv a20 AA30 | a20 파일의 이름을 AA30으로 바꾸기 | ||
$mv AA30 usr/local | AA30 파일/디렉토리를 usr/local 디렉토리로 이동 |
- 삭제 - rm, rmdir
$rm a* | a로 시작하는 모든 파일 삭제 | ||
$rm [b-f]* | b에서 f로 시작하는 모든 파일 삭제 | ||
$rm * | 모든 파일 삭제 | ||
$rm -i a* | a로 시작하는 모든 파일 삭제. 단, 삭제할 때 마다 사용자에게 확인 받도록 함 | ||
$rm -f b* | 이름이 b로 시작하는 모든 파일을 강제로 삭제. -f 옵션은 삭제할 파일이 존재하지 않을 때 오류 메세지를 표시하지 않고 무시하고 계속 진행하도록 함. |
||
$rm -f [^jtbc] | j, t, b, c 중 어떤 문자도 아닌 파일을 강제로 삭제하는 명령. | ||
$rm -rf /tmp | /tmp 디렉토리와 그 하위 모든 파일과 디렉토리를 강제로 삭제하는 명령. | ||
$rm [a-c]* | 파일 이름이 a, b, c 중 하나로 시작하는 파일을 모두 삭제하는 명령 | ||
$rm [!a-c]* | 파일 이름이 a, b, c로 시작하지 않은 모든 파일을 삭제하는 명령 | ||
$rm [^a-f]* | 파일 이름이 a부터 f까지의 알파벳 중 하나로 시작하지 않는 모든 파일을 삭제하는 명령 |
* rm 명령어는 파일을 삭제하는 명령어이다. 따라서 rm 명령어를 사용하여 디렉터리를 삭제하려면 -r 옵션을 사용해야 한다. rm -r directory 명령어는 directory라는 디렉터리를 포함하여 하위 디렉터리와 파일을 모두 삭제한다.
반면, rmdir 명령어는 빈 디렉터리를 삭제하는 명령어이다. 따라서, rmdir 명령어를 사용하여 디렉토리를 삭제하려면 해당 디렉터리가 비어있어야 한다. 삭제하려는 디렉터리가 하위 디렉터리나 파일을 포함하고 있다면, rmdir 명령어를 사용하여 삭제할 수 없다.
- 명령 프롬프트 - Ctrl키 활용 (^ = Ctrl Key)
^U | 명령어 삭제, ^/ | ||
^C | cancel, ^L: clear | ||
^W | 한 단어 지우기 | ||
^D | 파일의 끝 (EOF), logout | ||
^a | 처음으로, ^e: 마지막으로 | ||
^w | 뒤에서부터 한 단어 삭제 | ||
^p | 이전 명령어 (위쪽 방향키와 같음) | ||
^n | 다음 명령어 (아래쪽 방향키와 같음) | ||
^t | 바로 이전 문자와 맞바꾸기 | ||
^s | suspend | ||
^q | suspend 해제 | ||
^d | 현재 커서 문자 삭제 | ||
^f | →, ^b: 좌로 이동 | ||
^k | 커서부터 끝까지 삭제, ^u: 커서부터 처음까지 삭제 | ||
^h | ←, ^m: Enter |
vi editor
vi 에디터는 윈도우에서 메모장과 같은 unix 계결의 범용 에디터이다. 가장 많이 사용되며 막강한 기능을 자랑한다. 하지만 메모장과는 사용 환경이 완전히 다르며 익숙해질 때까지 어느 정도의 시간이 필요하다.
현재 커서의 위치가 작업이 기준점이기 때문에 중요하다.
vi 에디터의 4가지 모드
Normal Mode (명령 모드) | vi 에디터를 실행했을 때 기본 모드 텍스트를 편집하는 것이 아니라 명령을 입력하는 모드 다른 모드로 전환하거나 파일을 저장, 종료하는 등의 명령을 입력할 수 있다. |
|||||
Insert Mode (입력 모드) | 현재 커서 위치에서 텍스트를 입력할 수 있는 모드 i 를 눌러 현재 위치에서 입력을 시작할 수 있으며, ESC를 눌러 Normal Mode로 돌아갈 수 있다. |
|||||
Visual Mode (시각 모드) | 선택한 영역을 시각적으로 강조하여 작업할 수 있는 모드 v 를 눌러 현재 위치에서 선택을 시작할 수 있으며, ESC를 눌러 Normal Mode로 돌아갈 수 있다. |
|||||
Command-Line Mode (명령행 모드) | 파일 저장, 종료, 검색 등 다양한 명령을 실행할 수 있는 모드 : 를 눌러 현재 위치에서 명령을 입력할 수 있으며, 명령 실행 후 다시 Normal Mod e로 돌아갑니다. |
입력모드
i | 현재 커서 앞부터 입력 (insert) | ||
a | 현재 커서 다음부터 입력 (append) | ||
o | 다음 줄 첫 줄부터 입력 | ||
I | 현재 line 처음에 추가 | ||
A | 현재 line 마지막부터 추가 | ||
O | 현재 line 한 줄 위에 추가 | ||
cc | 현재 line 삭제 후 insert | ||
cw | 단어 삭제 + insert |
시작과 종료
$vi aa.c | aa.c 라는 이름으로 vi 편집기 실행 | ||
:w | write, 저장 | ||
:w bb.c | bb.c 라는 이름으로 저장 (다른 이름으로 저장) | ||
:wq , :x , ZZ | 저장 후 종료 | ||
:wq! | 저장 후 강제 종료 (! : 강제) | ||
:q! | 저장하지 않고 강제 종료 |
line, 단어, 문자 단위 작업
yy | 라인 복사 | ||
dd | 라인 잘라내기 | ||
p | 붙여넣기 | ||
yw | 단어 복사 | ||
dw | 단어 잘라내기 | ||
P | 윗 줄에 붙여넣기 | ||
u | undo | ||
^r | redo | ||
R | Replace | ||
~ | 대 / 소문자 변환 | ||
x | 한 문자 삭제 | ||
J | 두 줄 합치기 | ||
x , dl | 현재 위치 한 문자 삭제 | ||
X , dh | 이전 위치 한 문자 삭제 | ||
d0 | 현재행의 처음까지 삭제 | ||
D , d$ | 현재행의 끝까지 삭제 | ||
dj | 현재행과 다음행 삭제 | ||
dk | 현재행과 이전행 삭제 |
커서의 이동
h | 좌 | ||
j | 하 | ||
k | 상 | ||
l | 우 | ||
[[ | 처음으로 | ||
]] | 끝으로 | ||
gg | 처음으로 | ||
G | 끝으로 | ||
:20 | 20번째 행으로 | ||
:35 | 35번째 행으로 | ||
:10 | 10번째 행으로 | ||
15G | 50번째 행으로 | ||
30G | 30번째 행으로 | ||
^ , 0 | 행의 맨 앞으로 | ||
$ | 행의 맨 끝으로 | ||
w | 단어 단위 이동. 다음 단어 | ||
b | 단어 단위 이동. 이전 단어 | ||
^D | 반 화면 아래로 | ||
^U | 반 화면 위로 | ||
^F | 한 화면 아래로 | ||
^B | 한 화면 위로 |
* /etc : 편집기 내에서 etc 검색
/5 : 편집기 내에서 5 검색
?korea : 편집기 내에서 korea 검색
: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
:1,$ s/aa/AA : 처음부터 끝까지
:% s/aa/AA : 전체
* 같은 단어 찾기 : 단어 위에서 Shift + 8
* manual 보기 : 단어 위에서 Shift + k
환경설정, 기타
:set | 설정 내용 보기 | |||
:set all | 전체 설정 | |||
:f | 현재 파일 | |||
:set number | 번호 붙이기 | |||
:set nonumber | 번호 해제 | |||
:se nu | 번호 붙이기 단축 명령 | |||
:se nonu | 번호 해제 단축 명령 | |||
:se ai | auto indent | |||
:se noai | auto indent 끄기 | |||
:se ts=5 | tab stop | |||
:!bash | bash 명령 | |||
:r ! date | date 경과를 파일에 삽입 | |||
:20 r ! cal | 20라인에 cal 삽입 | |||
:set cursorline | 커서 있는 라인에 줄 표시 |
set mouse=a 마우스 설정
set mouse=r 마우스 설정 해제
mouse 설정 지정하면 자동으로 Visual mode로 전환
$vi ~/.vimrc //vim 기본 설정 파일
1 se nu ai ci si
2 se ts=4 sw=4
3 se ruler title showmatch
4 syntax on
5 hi comment ctermfg=red
#리눅스를 설치한 뒤 가장 먼저 해주는 설정 중 하나
창 분할
:vs aa # 세로로 분리
:sp bb # 가로로 분리
^WW # 창전환
C Compile 해보기
[root@kwc ~]# vi Ctri.c
1 #include <stdio.h>
2
3 int main() {
4 int i, j, k;
5
6 for (i = 1; i <= 5; i++) {
7 for (j = i; j < 5; j++) {
8 printf(" ");
9 }
10 for (k = 1; k < 2 * i; k++) {
11 printf("*");
12 }
13 printf("\n");
14 }
15
16 return 0;
17 }
:wq
[root@kwc ~]# vi Ctri.c
[root@kwc ~]# gcc Ctri.c -o ctri
[root@kwc ~]# ./ctri
*
***
*****
*******
*********
C++ Compile 해보기
[root@kwc ~]# vi C++tri.cpp
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int n;
6 cout << "Enter the number of rows: ";
7 cin >> n;
8
9 for (int i = 1; i <= n; i++) {
10 for (int j = 1; j <= n - i; j++) {
11 cout << " ";
12 }
13 for (int k = 1; k <= 2 * i - 1; k++) {
14 cout << "*";
15 }
16 cout << endl;
17 }
18 return 0;
19 }
:wq
[root@kwc ~]# g++ -o c++tri C++tri.cpp
C++tri.cpp: In function ‘int main()’:
C++tri.cpp:13:37: error: expected primary-expression before ‘=’ token
13 | for (int k = 1; k < = 2 * i - 1; k++) {
| ^
# 이번에도 오류가 났다. 사소한 오타가 정말 많이 나는구나..
[root@kwc ~]# g++ -o c++tri C++tri.cpp
[root@kwc ~]# ./c++tri
Enter the number of rows: 6
*
***
*****
*******
*********
***********
Java Compile 해보기
[root@kwc ~]# vi Jtri.java
1 public class Jtri {
2 public static void main(String[] args) {
3 int n = 5;
4 for (int i = 0; i < n; i++) {
5 for (int j = 0; j < n - 1; j++) {
6 System.out.print(" ");
7 }
8 for (int j = 0; j < 2 * i + 1; j++) {
9 System.out.print("*");
10 }
11 System.out.println();
12 }
13 }
14 }
:wq
[root@kwc ~]# javac Jtri.java
[root@kwc ~]# java Jtri
*
***
*****
*******
*********
홈 디렉터리와 환경설정
Home 디렉토리
Multi user 시스템이기 때문에 자신의 데이터는 보호받아야 하고 남의 집에 허락 없이 침입해서는 안 된다.
시스템의 중요한 파일들은 일반 사용자가 함부로 수정, 삭제할 수 있게 해서는 안 된다.
개인은 자신의 홈 디렉터리에서만 필요한 작업들을 할 수 있다.
Shell이란?
사용자들이 내리는 명령어들을 해석하여 기계어로 번역한 다음 운영체제인 Kernel에게 전달해 주는 역할을 한다.
커널과는 별도로 운영되며 사용자가 입력한 명령어가 잘못되었거나 해석하지 못했을 경우, Kernel에 전달되지 않고 Shell 차원에서 미리 예약된 메시지를 보낸다.
SHELL 관련 명령어
$echo $SHELL | 현재 쉘 | ||
$env | 환경 변수 | ||
$chsh -l | 사용 가능한 shell 보기 | ||
$enable | 내부 명령어 보기 | ||
$!100 | 이전에 실행한 명령어 중에서 100번째로 실행한 명령어를 다시 실행함 | ||
$!! | 이전에 실행한 명령어를 다시 실행함 | ||
$alias | 현재 시스템에 등록된 alias 목록을 출력함 | ||
$unalias [alias 별칭] | 해당 alias 삭제 | ||
$unalias -a | 현재 세션에서 설정된 모든 alias를 삭제하는 명령어. 별도의 확인 메세지 없이 모든 alias가 삭제되기 때문에 주의해야함. |
alias : 명령어에 대한 별칭이다. 명령어가 긴 경우, 짧고 알기 쉽게 별칭을 부여하여 사용하는 것이다.
SHELL 지역변수 환경변수
지역변수 : set
시스템이 가지고 있는 설정 값들을 의미하며, 다시 로그인해도 그 값을 유지
환경변수 : env
현재 로그인한 터미널에서만 적용되는 변수로, 다시 로그인하면 소면. 현 세션에서만 유효
Bash 경로 설정하기
bash는 현재 경로에 실행파일이 존재하더라도 PATH 변수에 경로가 등록되어 있지 않다면 command not found 에러를 발생시킨다. 그래서 현재를 나타내는 ./를 붙인 후에 실행해야 명령어를 인식한다.
./을 생략해도 실행 가능하게 하기 위해서는 설정이 필요하다. 기타 실행 파일은 ~/bin 디렉터리를 생성하고 그곳에 모아두면 된다.
> 현재 경로 PATH 환경변수에 추가하기
$PATH=$PATH:.
$echo $PATH
History
bash는 가장 최근의 명령 1000개를 저장하고 있다.
logout 하면 Memory에 있는 history를 .bash_history에 저장한다.
$echo $HISTSIZE : 현재 shell에서 기억하는 최대 명령어 개수를 출력
$history -a : 현재까지 실행한 명령어 리스트를 .bash_history 파일에 저장한다. logout 하고 다시 실행하더라도 이전에 실행했던 명령어를 불러올 수 있다.
$history -c : 현재까지 실행한 명령어 리스트를 모두 삭제한다.
$nl ~/.bash_history : 파일에 저장된 모든 명령어들을 출력한다. shell 세션을 종료하고 다시 시작하더라도, 이전에 실행한 모든 명령어들을 볼 수 있다.
자동 완성 기능 Tab
tab키를 이용하여 명령어나 경로를 쉽게 작업할 수 있다.
시간절약과 오타를 줄일 수 있다!
Shell Script 연습
[root@kwc ~]# vi k.sh
1 #!/bin/bash
2
3 echo
4 echo -n 이름은:
5 read A
6
7 echo -n 나이는:
8 read B
9 echo 이름 : $A, 나이 : $B
10
11 echo "현재 시스템 사용자 목록"
12 who | sort | nl
13
14 echo Good-Bye!
15 echo
:wq
[root@kwc ~]# bash k.sh
이름은:꼬마돌
나이는:27
이름 : 꼬마돌, 나이 : 27
현재 시스템 사용자 목록
1 root pts/0 2023-04-29 12:41 (10.0.2.2)
2 root tty1 2023-04-29 12:40
Good-Bye!
[root@kwc ~]# ./k.sh
-bash: ./k.sh: Permission denied # 권한이 없어서 허가 거부
[root@kwc ~]# chmod 755 k.sh # 권한 모드 변경
[root@kwc ~]# ./k.sh
이름은:꼬마돌
나이는:27
이름 : 꼬마돌, 나이 : 27
현재 시스템 사용자 목록
1 root pts/0 2023-04-29 12:41 (10.0.2.2)
2 root tty1 2023-04-29 12:40
Good-Bye!
반응형
'[네이버클라우드] AIaaS 개발자 과정 > Linux' 카테고리의 다른 글
[네이버클라우드캠프] 2023.4.26 Linux(3) - RockyLinux 설치 (파티션 분할), 설치 후 기본 설정 (0) | 2023.04.30 |
---|---|
[네이버클라우드캠프] 2023.4.26 Linux(2) - 다양한 명령어, 막강한 CLI (0) | 2023.04.30 |
[네이버클라우드캠프] 2023.4.26 Linux(1) - 파일 분류 권한의 이해 (0) | 2023.04.30 |
[네이버클라우드캠프] 2023.4.25 Linux(1) - 로그인과 기초 사용법, 절대경로와 상대경로 (0) | 2023.04.29 |
[네이버클라우드캠프] 2023.4.24 Linux - 운영체제와 리눅스. RockyLinux와 PuTTY설치 및 실습 (0) | 2023.04.27 |