쉘의 구성
root@e7f17962cb98:/home/ubuntu#
- root: 사용자 이름
- @e7f17962cb98: 호스트 이름
- /home/ubuntu: 현재 디렉토리
- #: 사용자 구분, $는 일반 사용자, #은 루트 사용자.
파일(* File)
리눅스는 모든 것을 파일로 취급합니다. 컴퓨터의 연결되는 장치(* device)또한 파일로 취급합니다.
숨김 파일은 .(* dot)으로 시작합니다. 예를 들어 .hidden_file은 숨김 파일입니다.
디렉토리(* Directory)
윈도우의 폴더의 개념과 같습니다.
- /: 최상위 디렉토리, 절대경로의 시작점
- /root: root 계정의 홈 디렉토리
- /home: 일반 사용자 계정의 홈 디렉토리
디렉토리 경로는 slash(/)로 구분하여 계층적으로 표현합니다. 이때 경로를 표현하는 방식에는 두 가지가 존재합니다.
- 절대 경로
- 최상위 디렉토리(/)를 기준으로 한 경로
- 현재의 디렉토리와 상관없이 변하지 않는 경로
- ex) /home/sslab/hello.txt
- 상대 경로
- 현재 디렉토리(.)을 기준으로 한 상대적인 경로
- .: 현재 디렉토리를 의미
- ex) ./hello.txt: 현재 디렉토리에 있는 hello.txt 파일
- ..: 현재 디렉토리의 상위 디렉토리를 의미
- ex) ./../hello.txt: 현재 디렉토리의 상위 디렉토리에 있는 hello.txt 파일
파일/디렉토리 목록 출력
현재 위치한 디렉토리의 파일 및 디렉토리 목록의 출력은 다음과 같은 명령어를 이용합니다.
ls [옵선] [경로]
[옵션] 에는 다양한 값이 들어갈 수 있습니다.
- [root@localhost~]# ls: 경로가 없다면 현재 디렉토리를 출력
- [root@localhost~]# ls -a: 모든 파일 출력(* 숨김 파일 포함)
- [root@localhost~]# ls -s: 크기를 함께 출력
- [root@localhost~]# ls -l: 파일의 모든 정보 출력
- [root@localhost~]# ls -al: 모든 파일의 정보 출력
- [root@localhost~]# ls /usr: /usr 디렉토리의 정보 출력
디렉토리 이동
디렉토리의 이동을 위한 명령어는 다음과 같습니다.
cd [경로]
경로에 들어가는 값에 따라 동작이 달라집니다.
- [root@localhost~]# cd: 홈 디렉토리로 이동
- [root@localhost~]# cd ~: 홈 디렉토리로 이동
- [root@localhost~]# cd ..: 상위 디렉토리로 이동
- [root@localhost~]# cd /usr/bin: /usr/bin 디렉토리로 이동
현재 디렉토리 경로 출력
시스템 내에서 작업을 수행하는 현재 위치의 디렉토리를 출력합니다.
출력되는 디렉토리는 루트 디렉토리를 기준으로 한 절대 경로의 형태를 보여줍니다.
명령어는 다음과 같습니다.
pwd
디렉토리 생성
생성된 디렉토리는 명령어를 수행한 사용자의 소유입니다.
명령어는 다음과 같습니다.
mkdir [옵션] [경로]
파일 관련 명령어들
mv 명령어
파일을 다른 디렉토리로 이동하거나, 이름을 변경할 때 사용합니다.
mv ./file1.txt ./hello.txt: file1.txt 파일을 hello.txt 이름으로 변경
mv ./file1.txt ~: file1.txt 파일을 홈 디렉토리로 이동
cat 명령어
텍스트 파일을 읽어서 화면에 출력해줍니다.
root@e7f17962cb98:/home/ubuntu# cat ./fork17.c
#include <stdio.h>
#include <unistd.h>
void fork17(){
pid_t pid = fork();
if (pid == 0) {
/* Child */
printf("Child: pid=%d pgrp=%d\n", getpid(), getpgrp());
while(1);
} else {
/* Parent */
printf("Parent: pid=%d pgrp=%d\n", getpid(), getpgrp());
while(1);
}
}
int main(){
fork17();
return 0;
}
root@e7f17962cb98:/home/ubuntu#
tail 명령어
텍스트 파일 마지막 부분을 읽어서 화면에 출력해줍니다.
tail ./file.txt
rm 명령어
파일 또는 디렉토리 제거. 단, 디렉토리를 제거할 때는 -r 을 붙여줘야 합니다.
rm ./file.txt: file.txt 삭제
rm -r ./dir: dir 디렉토리와 그 안에 있는 데이터 삭제
cp 명령어
파일 복사를 수행하는 명령어입니다. rm 명령어와 마찬가지로 디렉토리안에 있는 내용을 복사하고 싶다면 -r을 붙여줘야 합니다.
cp ./file1.txt ./file2.txt: file1.txt 파일을 file2.txt 이름으로 복사
cp -r ./dir ./copy-dir: dir 디렉토리와 그 안에 있는 데이터를 copy-dir 이름으로 복사
파일 권한
파일에 대한 제어 권한은 크게 읽기(* read), 쓰기(* write), 실행(* execute) 권한이 있습니다.
이를 8진수를 사용하여 표현하는데, 각각의 값은 다음과 같습니다.
- read, r: 4, write, w: 2, execute, x: 1
- ex) 읽고, 실행만 가능(* read + execute) = 5(* r-x), 쓰고 실행만 가능(* write + execute) = 3(* -wx)
chmod 명령어를 통해 파일의 권한을 변경할 수 있습니다.
이때 파일에 대한 권한은 ls -l이나 ls -al을 통해 볼 수 있습니다.
- 소유자(* user), 그룹(* group), 제 3자(* other) 필드의 권한을 설정할 수 있습니다.
- 각 권한은 8진수를 사용하여 설정할 수 있습니다.
- ex) chmod 644 ./test.c: 소유자는 읽기 쓰기, 그룹과 제 3자는 읽기만 가능
- 필드를 명시적으로 입력하여 권한을 추가하거나 삭제할 수 있습니다.
- ex) chmod ug+r ./test.c: 소유자와 그룹에 읽기 권한 추가
- ex) chmod o-r ./test.c: 제 3자에 읽기 권한 제거
Man Page
리눅스에서 제공하는 메뉴얼입니다.
일반적인 프로그램, 라이브러리, 시스템 콜에 대한 전반적인 정보를 제공합니다.
명령어는 다음과 같습니다.
man [명령어 이름]
Vim Editor
Vi Editor는 터미널 상에서 텍스트를 편집하기 위한 에디터입니다.
Vim을 시작하려면, shell 상에서 vim 명령어를 입력해야 합니다.
vim [filename]
Vim editor는 명령 모드, 편집 모드, 콜론 모드로 나뉩니다.
i(insert) 키를 입력하면 편집 모드로 전환되고,
esc키를 이용하여 명령(일반) 모드로 전환할 수 있습니다.
명령(일반) 모드에서 :(colon) 키를 입력하여 콜론(ex)모드로 전환할 수 있고,
esc키를 이용하여 명령(일반) 모드로 전환할 수 있습니다.
각 모드에서 사용할 수 있는 명령어는 정말 많으므로 아래의 글을 참고!
https://m.blog.naver.com/zbqmgldjfh/222086097819
컴파일
컴파일 과정은 이전 글에서 설명
2024.09.13 - [학교 수업/시스템 프로그래밍] - [시스템 프로그래밍] Linux Installation
GNU 컴파일러 모음(* GNU Compiler Collection, GCC)는 GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러 입니다.
GCC는 C만을 지원했던 컴파일러였지만, 후에 C++, java등의 언어도 컴파일 할 수 있게 되었습니다.
C언어 컴파일 방법은 다음과 같습니다.
gcc [filename] -o [exefile_name]
만약 -o 뒤에 실행 파일 이름을 설정하지 않는다면 a.out파일이 생성됩니다.
(* 파일의 이름을 설정하는 습관을 들이자!!)
GCC 옵션
GCC에는 다양한 옵션이 있습니다.
- -o: output option
- 출력(output) file 명을 정하는 option
- ex) $ gcc -o helloworld helloworld.c
- ex) $ gcc helloworld.c -o helloworld
- -D: macro option
- gcc의 command line에서 macro를 define할 수 있도록 하는 option
- ex) $ gcc -o helloworld -DMAXLEN=255 helloworld.c
- -DMAXLEN=255 는 #define MAXLEN 255 와 같음
- -E
- gcc의 컴파일 과정 중에서 C preprocessing까지만 처리하고 나머지 단계는 처리하지 말라는 것을 지시
- ex) $ gcc -E -o helloworld.i helloworld.c
- -S
- 파일을 어셈블리 파일로 컴파일까지만 수행
- ex) gcc -S helloworld.c
- helloworld.s 생성
- -c
- 컴파일(* compile) 작업만 할 경우
- 오브젝트 파일(* helloworld.o)이 생성됨
- ex) $ gcc -c helloworld.c
- I? l?
- -g
- 디버딩 모드로 컴파일
- 오류가 발생했을 경우, 소스코드 단위로 Tracing할 수 있도록 추가적인 데이터를 삽입
- gdb 프로그램으로 디버깅할 때 보다 수월하게 디버깅 가능
- ex) $ gcc -g helloworld.c
실행 파일 실행
실행 파일의 실행은 다음과 같은 명령어를 통해 수행합니다.
./[exefile_name]
'[학교 수업] > [학교 수업] 시스템 프로그래밍' 카테고리의 다른 글
[시스템 프로그래밍] Signal Programming (0) | 2024.09.24 |
---|---|
[시스템 프로그래밍] Signals (0) | 2024.09.20 |
[시스템 프로그래밍] Linux Installation (0) | 2024.09.13 |
[시스템 프로그래밍] Multi-process Programming (0) | 2024.09.11 |
[시스템 프로그래밍] Processes (0) | 2024.09.05 |