
오픈 소스 비영리 기관 'Open Source Initiative'의 로고. https://opensource.org/
본 글은 학교 '오픈소스 소프트웨어 입문' 과목을 수강하며 실습(또는 공부)한 내용을 정리한 글입니다.
개인 기록 용도로 작성한 글이라, 직접 이 글을 보고 실습을 따라하기엔 어려움이 많을 것으로 예상됩니다.
혹시 본 글을 보며 Linux를 공부하실 목적이라면, 일단 키워드 위주로 AI에게 물어봐가면서, 본인의 Linux 터미널에서 직접 타이핑해가며 공부하시기를 추천드립니다.
질문이나 의견이 있다면 자유롭게 댓글 달아주세요!
교수가 ls -al 해놓고, 다음과 같을 때,
test라는 파일에 대해 소개하라 시험 나옴.
total 12
drwxr-xr-x 3 foss110 foss 4096 Mar 18 10:36 .
drwx------ 9 foss110 foss 4096 Mar 18 10:36 ..
drwxr-xr-x 2 foss110 foss 4096 Mar 18 10:36 test
**!시험문제!**
test는 디렉토리인데, 해당 파일의 소유자 foss110은 read, write, execute할 수 있다.
또한, foss에 속해있는 사용자 중, foss110을 제외한 사용자들은 read, execute할 수 있다.
또한, 다른 사용자들 중 foss그룹에 속해있지 않는 사용자들은 read, execute할 수 있다.
그리고 링크 카운트가 2이며,
이 파일은 소유자가 foss110이고, foss그룹에 속해 있다.
그리고 last modification date는 3월 18일 10시 36분이다.
그리고 파일 이름은 test이다.
그룹 목록은 /etc/group 보면 됨.
이 때, foss group은 3000이라는 번호로 관리되고 있는데,
리눅스에서는 (자원, 장치, 유저 등을 포함한 모든 파일은) 번호로 관리됨.
이 번호(숫자)는, inode임. 파일은 리눅스에서 inode로 관리됨.
/etc/passwd 기억남? 거기 사용자 명이랑 비번(x로 표시됨), userid, groupid 등이 표시되어 있잖음.
리눅스는 이 /etc/passwd를 읽고 유저 그룹 등을 판별함.
userid = 0, groupid = 0인 유저를 슈퍼 유저(시스템의 관리자)라고 함.
chmod 172 test
d--xrwx-w- 2 foss110 foss 4096 Mar 18 10:36 test
chmod a+r test
dr-xrwxrw- 2 foss110 foss 4096 Mar 18 10:36 test
**!시험문제!**
여기서, 저 test 권한을 아래처럼 만들어주는 명령어를 쓰시오!
-> chmod 575 test를 써야 함.
참고) chmod는 쓰기(w)나 실행(x) 권한이 아니라, 파일의 소유권(owner)이 중요함!
해당 파일의 소유자만이 chmod로 권한 변경 가능.
근데, 여기서 교수가 자기꺼 test디렉토리 지우려 하면, 안 지워짐. 교수는 쓰기 권한이 없거든.
그럼 디렉토리의 퍼미션을 700으로 바꾸면 되지.
**!시험문제!**
이 permission들은 super user에게는 아무 영향이 없다. super user은 permission에 상관없이,
모든 파일에 read, write, execute 가능.
user은 두 종류가 있음.
첫 번째: 일반 유저(관리자라고도 말함.)
cd ~foss110: foss110의 홈 디렉토리로 이동함.
링크란?
윈도우에서는 링크를 '바로가기'라고 부름.
근데 리눅스에서는 아님. 리눅스에서 링크는 여러 이름 부여, 바로가기는 '심볼릭 링크(소프트 링크)'임.
이제 링크를 두 가지로 얘기할 거임. 소프트 링크, 하드 링크.
근데 아무 말 없이 링크라고 하면, 하드 링크.
echo는 echo 다음에 오는 인자를 stdout으로 출력해 줍니다.
echo ~ > !하면, ~이 stdout으로 출력되는 걸 !로 리다이렉션해 줍니다.
ln file hlink -> file로 가는 hlink(하드 링크)를 생성.
total 20
drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:13 .
drwx------ 9 foss110 foss 4096 Mar 18 10:36 ..
-rw-r--r-- 2 foss110 foss 12 Mar 18 11:11 file
-rw-r--r-- 2 foss110 foss 12 Mar 18 11:11 hlink
dr-xrwxrw- 2 foss110 foss 4096 Mar 18 10:36 test
이러면, file의 링크 카운트가 1에서 2로 변했음.
또한, file의 last modification time이 최근으로 바뀌었음.(hlink와 동일)
**-> file과 hlink는 동일한 파일로 취급받기 때문.
동일한 파일(데이터 블록)을 이름만 두 가지로 다르게 부르는 거임.**
foss110@ajousw:~/lab0318$ echo (검열) >> hlink
foss110@ajousw:~/lab0318$ cat hlink
(검열)
(검열)
foss110@ajousw:~/lab0318$ cat file
(검열)
(검열)
foss110@ajousw:~/lab0318$
>>는 stdout로 출력되는 내용을 우측의 기존 파일에 추가(append)하는 리다이렉션 기능을 함.
foss110@ajousw:~/lab0318$ ls -li
total 12
2512130 -rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 file
2512130 -rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 hlink
2511979 dr-xrwxrw- 2 foss110 foss 4096 Mar 18 10:36 test
ls -i: inode 번호를 출력.
ls -li
하드 링크는 원본 파일과 동일한 inode 번호를 가짐.
foss110@ajousw:~/lab0318$ ls -i
2512130 file 2512130 hlink 2511979 test
foss110@ajousw:~/lab0318$ touch file2
foss110@ajousw:~/lab0318$ ls -i
2512130 file 2512207 file2 2512130 hlink 2511979 test
foss110@ajousw:~/lab0318$ ls -i file2
2512207 file2
foss110@ajousw:~/lab0318$ ln file2 hlink2
foss110@ajousw:~/lab0318$ ls -i hlink2
2512207 hlink2
foss110@ajousw:~/lab0318$ ls -i
2512130 file 2512207 file2 2512130 hlink 2512207 hlink2 2511979 test
foss110@ajousw:~/lab0318$
여기서, 중요한 게, 리눅스의 파일 시스템은, 어떤 파일의 파일 이름을 가지고 있지 않음.
그냥 inode 번호, permission 등의 정보들만 가지고 있는데,
그런 메타 데이터들을 inode가 관리함.
inode가 실제 데이터가 들어있는 disk block의 주소를 관리하고 있는 애임.
그래서, 링크 카운트는 '아 이 파일을 가리키고 있는 inode(파일) 또는 **링크가 2개 있구나**!'하고
생각하면 되는 것.
foss110@ajousw:~/lab0318$ ln -s file slink
foss110@ajousw:~/lab0318$ ls -al
total 20
drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:27 .
drwx------ 10 foss110 foss 4096 Mar 18 11:24 ..
-rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 file
-rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 file2
-rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 hlink
-rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 hlink2
lrwxrwxrwx 1 foss110 foss 4 Mar 18 11:27 slink -> file
dr-xrwxrw- 2 foss110 foss 4096 Mar 18 10:36 test
foss110@ajousw:~/lab0318$
ln -s를 하면 소프트링크를 만듦.
foss110@ajousw:~/lab0318$ls -al slink
lrwxrwxrwx 1 foss110 foss 4 Mar 18 11:27 slink -> file
이거 시험문제임. ls -al slink 결과 써라.
채점하는 포인트들)
1. 맨 앞에 파일 타입이 l인지.
(저거 권한 777은 채점하지 않음. 왜냐하면 생성 시 옵션으로 다른 권한으로 바꿀 수 있기 때문.)
(저 last modification time은 채점하지 않음.)
2. 저거 중간에 '4'라고 적혔는지. -> 4 바이트
3. 마지막에 slink -> file 적었는지.
4. ?? 확인 1시간 - 아마 링크 카운트나 그룹?
저거 왜 근데 소프트 링크가 4바이트??
-> 글자 개수임.
foss110@ajousw:~/lab0318$ ln -s ../lab0318/file slink
foss110@ajousw:~/lab0318$ ls -al slink
lrwxrwxrwx 1 foss110 foss 15 Mar 18 11:31 slink -> ../lab0318/file
이거 일단 15글자가 됐음. ../lab0318/file가 15글자니까.
이걸 하는 이유는, 훗날을 대비하는 거임.
foss110@ajousw:~$ cp -r lab0318 backup0318
foss110@ajousw:~$ cd backup0318
foss110@ajousw:~/backup0318$ ls -lai
total 20
2512562 drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:33 .
2506276 drwx------ 11 foss110 foss 4096 Mar 18 11:33 ..
2512564 -rw-r--r-- 1 foss110 foss 22 Mar 18 11:33 file
2512566 -rw-r--r-- 1 foss110 foss 0 Mar 18 11:33 file2
2512565 -rw-r--r-- 1 foss110 foss 22 Mar 18 11:33 hlink
2512567 -rw-r--r-- 1 foss110 foss 0 Mar 18 11:33 hlink2
2512568 lrwxrwxrwx 1 foss110 foss 15 Mar 18 11:33 slink -> ../lab0318/file
2512563 dr-xr-xr-- 2 foss110 foss 4096 Mar 18 11:33 test
위 처럼 cp로 백업을 해 두니까, slink는 ../backup0318/file이 아닌,
원래 디렉토리의 파일을 가리키고 있음!! 저게 필요할 때가 있음.
근데, 보면 file과 hlink의 하드 링크 관계가 깨졌음!!(inode가 다름)
foss110@ajousw:~/backup0318$ls -lai ../lab0318
total 20
2511929 drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:32 .
2506276 drwx------ 11 foss110 foss 4096 Mar 18 11:33 ..
2512130 -rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 file
2512207 -rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 file2
2512130 -rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 hlink
2512207 -rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 hlink2
2512360 lrwxrwxrwx 1 foss110 foss 15 Mar 18 11:31 slink -> ../lab0318/file
2511979 dr-xrwxrw- 2 foss110 foss 4096 Mar 18 10:36 test
보면, 원본이랑 비교가 가능.
복사본에는 하드 링크 관계가 깨져 있다.
foss110@ajousw:~/lab0318$ln -s myname mynamelink
foss110@ajousw:~/lab0318$ ls
file file2 hlink hlink2 mynamelink slink test
foss110@ajousw:~/lab0318$ ls -lai
total 20
2511929 drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:37 .
2506276 drwx------ 11 foss110 foss 4096 Mar 18 11:33 ..
2512130 -rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 file
2512207 -rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 file2
2512130 -rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 hlink
2512207 -rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 hlink2
2512995 lrwxrwxrwx 1 foss110 foss 6 Mar 18 11:37 **mynamelink -> myname**
2512360 lrwxrwxrwx 1 foss110 foss 15 Mar 18 11:31 slink -> ../lab0318/file
2511979 dr-xrwxrw- 2 foss110 foss 4096 Mar 18 10:36 test
**!시험문제!**
이거 myname이 없는데도 ln -s 하면 에러날 것 같지만, 안남!!
대신, 소프트 링크 표시가 빨간색으로 되어 있음.
근데 하드링크 생성을 저렇게 없는 파일갖고 하면 에러남.
하드링크를 만드려면 대상 파일이 존재해야 함.
foss110@ajousw:~/lab0318$ echo (검열) > myname
foss110@ajousw:~/lab0318$ ls -al
total 24
drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:39 .
drwx------ 11 foss110 foss 4096 Mar 18 11:33 ..
**-rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 file**
-rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 file2
-rw-r--r-- 2 foss110 foss 22 Mar 18 11:15 hlink
-rw-r--r-- 2 foss110 foss 0 Mar 18 11:20 hlink2
-rw-r--r-- 1 foss110 foss 4 Mar 18 11:39 myname
lrwxrwxrwx 1 foss110 foss 6 Mar 18 11:37 mynamelink -> myname
lrwxrwxrwx 1 foss110 foss 15 Mar 18 11:31 slink -> ../lab0318/file
dr-xrwxrw- 2 foss110 foss 4096 Mar 18 10:36 test
foss110@ajousw:~/lab0318$ cat myname
(검열)
foss110@ajousw:~/lab0318$ cat mynamelink
(검열)
위처럼, echo로 myname을 생성하며 (검열)을 넣으면,
해당 심볼릭(소프트) 링크로 접근하면 myname가 출력됨.
즉, 존재하지 않는 파일에 대한 심볼릭 링크를 생성하는 것이 가능함.
참고로, 위에 저거 echo (검열) > mynamelink해도 똑같음.
foss110@ajousw:~/backup0318$ ln ../lab0318/file backuplink
foss110@ajousw:~/backup0318$ ls -ali
total 24
2512562 drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:42 .
2506276 drwx------ 11 foss110 foss 4096 Mar 18 11:33 ..
2512130 -rw-r--r-- 3 foss110 foss 22 Mar 18 11:15 backuplink
2512564 -rw-r--r-- 1 foss110 foss 22 Mar 18 11:33 file
2512566 -rw-r--r-- 1 foss110 foss 0 Mar 18 11:33 file2
2512565 -rw-r--r-- 1 foss110 foss 22 Mar 18 11:33 hlink
2512567 -rw-r--r-- 1 foss110 foss 0 Mar 18 11:33 hlink2
2512568 lrwxrwxrwx 1 foss110 foss 15 Mar 18 11:33 slink -> ../lab0318/file
2512563 dr-xr-xr-- 2 foss110 foss 4096 Mar 18 11:33 test
foss110@ajousw:~/backup0318$
여기서 vi로 backuplink에 내용 추가하면, ../lab0318/file에도 내용이 추가됨. 하드 링크니까.
inode에 파일에 대한 모든 정보가 다 들어있음.
foss110@ajousw:~/backup0318$ chmod 777 backuplink
foss110@ajousw:~/backup0318$ la -al
total 24
drwxr-xr-x 3 foss110 foss 4096 Mar 18 11:42 .
drwx------ 11 foss110 foss 4096 Mar 18 11:33 ..
-rwxrwxrwx 3 foss110 foss 22 Mar 18 11:15 backuplink
-rw-r--r-- 1 foss110 foss 22 Mar 18 11:33 file
-rw-r--r-- 1 foss110 foss 0 Mar 18 11:33 file2
-rw-r--r-- 1 foss110 foss 22 Mar 18 11:33 hlink
-rw-r--r-- 1 foss110 foss 0 Mar 18 11:33 hlink2
lrwxrwxrwx 1 foss110 foss 15 Mar 18 11:33 slink -> ../lab0318/file
dr-xr-xr-- 2 foss110 foss 4096 Mar 18 11:33 test
하나의 하드 링크에 대해 chmod 명령어로 권한을 변경하면
그 파일의 모든 링크(원본 파일 포함)의 권한이 변경됨.
**!시험문제!**
foss110@ajousw:~/backup0318$ rm backuplink
foss110@ajousw:~/backup0318$ ls -l ../lab0318/file
이거 출력결과??
-rwxrwxrwx 2 foss110 foss 22 Mar 18 11:15 ../lab0318/file
foss110@ajousw:~/backup0318$
저 링크 카운트가 아까 2에서 3 됐다가 다시 2가 되는 게 핵심.
3 -> 2 -> 1 , 1에서 그게 삭제되면 파일이 사라졌단 거.
삭제되지 않음: 파일을 삭제할 때, 링크된 이름이 하나씩 사라지며
모든 링크가 삭제되어야 실제 파일 데이터가 삭제됩니다.
즉, 하나의 하드 링크가 삭제되어도 파일 데이터는 여전히 다른 링크에서 참조하고 있으면 삭제되지 않습니다.
chown user:group files : 파일 소유자와, 파일 그룹을 변경
파일은 그 파일을 소유자가 그 파일 용량을 차지함.
슈퍼유저만 가능(uid가 0번이며, user 이름이 root인 사람)
sudo su <- 슈퍼유저가 되는 명렁어 (su: setuid)
ls A* 에 저 *가 중간고사에서 한 챕터, 20점 차지함.
*는 별표나 와일드카드라 읽는 게 아니라, 'globbing'이라고 읽음.
shopt에서 globstar, globasciiranges, failglob, nullglob와 같은
globbing 관련 설정들을 바꿀 수 있음.
**!시험문제!**
hwan은 hwangroup 그룹에 속해져 있다. Att0313.sh 파일의 퍼미션을 설명하시오.
-rwxr-x--- 1 hwan hwangroup ...
**> Att0313.sh파일의 소유자는 hwan이고 있고, 이 파일이 속해 있는 그룹은 hwangroup입니다.
> 이 파일의 소유자 hwan은 ~~ 할 수 있습니다.
> 이 파일이 속해 있는 그룹 hwangroup 중 소유자 hwan을 제외한 사용자는 ~~ 만 할 수 있습니다..
> 그리고 소유자 hwan 및 그룹 hwangroup에 속하는 사용자를 제외한 사용자들은 ~~만**
윈도우즈 파일 시스템은 트리 구조가 아님. 리눅스는 맞음.
트리 구조이려면, 루트에서 시작해서 모든 노드와 연결되어 있어야 함.
그러나, 윈도우즈에서는 여러 개의 트리가 있음. A B C D 등
그래서, 내 컴퓨터라는 가상의 장치를 만들어서 거기에 A B C D를 연결해 둠.
근데 파일 시스템 상에선 연결된 게 아님.
**이렇게, tree가 여러개 있는 tree들을 forest라고 부름.(시험x)**
우리는 디렉토리의 권한에 따라 그 디렉토리 이름 변경 등이 가능한 거.
실습
foss110@ajousw:~/lab0320$ ls -alF
total 8
drwxr-xr-x 2 foss110 foss 4096 Mar 20 09:22 ./
drwx------ 12 foss110 foss 4096 Mar 20 09:22 ../
echo : 그 이후 꺼를 stdout로 출력
foss110@ajousw:~/lab0320$ echo ls -alF > comm
comm은 8바이트임(l, s, 공백, -, a, l, F, \\n)
-> 이거 원래 파일면 그냥 입력하면 실행 돼야하는데, comm이라는 명령어가 이미 있어서 그게 실행됨.
foss110@ajousw:~/lab0320$ comm
comm: missing operand
$ which comm
/usr/bin/comm
즉, 저 comm이 실행된 거.
그래서 현재 디렉토리의 comm을 실행하자.
./comm -> 권한이 없음.
chmod u+x comm
u,g,o,a : 소유자(u), 그룹(g), 그 외 사용자(o), 모든 사용자(a) 지정.
+,-,= : 현재 모드에 권한 추가(+), 현재 모드에서 권한 제거(-), 현재 모드로 권한 지정(=)
r,w,x : 읽기 권한(r), 쓰기 권한(w), 실행 권한(x)
foss110@ajousw:~/lab0320$ ls -lF
total 4
-rwxr--r-- 1 foss110 foss 8 Mar 20 09:23 comm*
-F하면, 실행 파일이면 저 별표가 붙음.
그리고 그냥 실행 파일이면 저거 F 안해도 원래 초록색이고.
이제 ./comm 하면 실행이 됨.
vi는 쓸 줄 알아야 함.
vi hello.c
저 물결 상태가 노말 상태.
저기서 뭘 입력하려면 i 또는 a를 누름.
원하는 위치 커서의 앞에는 i, 뒤에는 a로 넣겠다는 거임.
i 누르면 인서트 모드.
입력 끝낫으면 esc -> 노말 모드.
이제 방법이 여러 개가 있는데,
: 눌러서 커맨드 모드로 가서, :wq!하면 저장하고 끝냄.
<이제 실행하는 단계>
1. 소스 코드를 컴파일 해서 실행 파일 a.out을 만듦
gcc hello.c
그럼 ./a.out하면 실행이 됨.
!v는 내가 이전에 했던 명령어들 중에, v로 시작하는 사장 최근에 했던
명령어를 실행함.
!c는 가장 최근에 시작한 c로 시작하는 명령어 실행.
!g도 마찬가지.
만약 !c에서 cat를 제외하고 싶으면 !cc.
저번에 file 명령어 배웠음. -> 해당 파일의 타입을 알려줌.
foss110@ajousw:~/lab0320$ file *
a.out: ELF 64-bit LSB shared object,
x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=dc35fc3d1674f1a20f64a3652aadbbc6054d25
Linux 3.2.0, not stripped
comm: ASCII text
hello.c: C source, ASCII text
이거 다 이해해야함 실코2 등등
a.out: ELF 64-bit LSB shared object,
< 가장 낮은 위치의 bit이 LSB잖음? 그 메모리가 낮은 곳부터 시작하는 그 형식이라함(복습)
x86-64, < 인텔 계열 CPU 용으로 컴파일이 됐다.
version 1 (SYSV),
dynamically linked, < printf 같은 걸 동적으로 링킹하겠다. 아직 a.out엔 안 들어 있다.
interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=dc35fc3d1674f1a20f64a3652aadbbc6054d25
Linux 3.2.0, not stripped < strip 안 된 파일이다.
comm: ASCII text
hello.c: C source, ASCII text
strip : 쓸데없는 정보를 제거해 달라. 심볼 데이터같은 걸 파일에서 좀 지워줌.
# 주석
ls -alF # 디렉토리에는 뒤에 /붙음
comm에 주석 한글로 추가하자.
foss110@ajousw:~/lab0320$ file *
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=dc35fc3d1674f1a20f64a3652aadbbc6054d250f, for GNU/Linux 3.2.0, stripped
**comm: UTF-8 Unicode text < 한글 포함되니까 UTF-8로 바뀜.**
hello.c: C source, ASCII text
우리가 밖에서 "(PPT 등) 적은 다음에 vi에디터로 복붙 하면,
전혀 다른 "가 나옴.
그래서, hello.c에 그 복붙한 " 넣고 다시 file * 해보면,
hello.c가 ASCII test가 아닌 Unicode test로 나옴. 저 "는 아스키에 속해있지 않는 "
저 변형된 "를 left double quo~, right double quo~ 라고 부름
근데 왜 ppt에 저 쌍따옴표가 입력됐나요? -> PPT 언어 교정 어쩌고 들어가서 바꾸면 됨.
printf("Hello World!\\n");
return 0;
”tilities”
}
이런 식으로.
foss110@ajousw:~/lab0320$ mv hello.c hello.java
foss110@ajousw:~/lab0320$ file hello.java
hello.java: C source, UTF-8 Unicode text
보면, 저 file은 그냥 파일 확장자를 보고 답하는 게 아님.
소스 코드 안쪽까지 보고 판단함.
vi에디어 노말 모드에서 dd 누르면 한 줄 지워짐.
참고로, vi 에디터로 hello 짜라고 하면, 이렇게 짜야 정석임.
#include <stdio.h>
int main()
{
printf("Hello World\\n");
return 0;
}
근데 교수님, 저 리턴 값을 어디에 씁니까?
main함수의 리턴 값을 엣지 스테이터스라고 부름.
그 값은 0이 정상.
다른 리턴값 9같은거 주고 저거 컴파일 후 ./a.out 실행 후
echo $? 해보면 값이 9로 다르게 나옴.
**!중간고사!
ls a.out b.out했을 떄,**
foss110@ajousw:~/lab0320$ ls a.out b.out
ls: cannot access 'b.out': No such file or direct
a.out
첫 출력은 stderr, 둘째 출력은 stdout로 출력된 것임.
echo $?는, 바로 직전에 시전한 명령어의 엣지 스테이터스를 출력함.
echo $? 연속 2번으로 하면 두 번째는 0 나오는데,
그건 방금 실행한 echo $?가 정상적으로 종료됐단 거임.
'Developments > Linux' 카테고리의 다른 글
[Linux 실습] Ch8.1. 리다이렉션 기본(Redirection Basic) (0) | 2025.03.27 |
---|---|
[Linux 실습] Ch7. 파일 유틸리티들(File Utilities) (0) | 2025.03.27 |
[Linux 실습] Ch5. 파일 관리와 파일 명령어들(File management and General File commands) (0) | 2025.03.27 |
[Linux 실습] Ch4. Linux의 디렉토리(Linux Directory) (0) | 2025.03.27 |
[Linux 실습] Ch3. 완전 기본적인 명령어들(Very basic commands) (0) | 2025.03.27 |