728x90

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

25강 명령어 역사(history)

 

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

 

↑: ctrl p, 이전 입력 명령어 호출

↓: ctrl n, 다음 입력 명령어 호출

 

명령어 목록 조회

[j@hj0216 ~/dd]$ history
    1  who am i
    2  whoami
    3  exit
    4  who
    5  whoami
[j@hj0216 ~/dd]$ history 3
  170  c
  171  gcc k.c -o k
  172  history 3

history 3: 최근 입력된 명령어 3개 조회

 

명령어 history 번호를 통한 명령어 실행

[j@hj0216 ~/dd]$ !1
who am i
j        pts/0        2023-02-03 22:51 (gateway)

 

이전 명령어 재실행

[j@hj0216 ~/dd]$ !!
who am i
j        pts/0        2023-02-03 22:51 (gateway)

 

특정 문자로 시작하는 명령어 중 가장 최근 실행한 명령어

[j@hj0216 ~/dd]$ !g
gcc k.c -o k

 

history 명령어 최대 저장 사이즈 조회

[j@hj0216 ~/dd]$ echo $HISTSIZE
1000

 

history에서 명령어 및 입력시간 조회

[j@hj0216 ~/dd]$ HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
[j@hj0216 ~/dd]$ history
    1  2023-02-03 22:51:08 who am i
    2  2023-02-03 22:51:08 whoami
    3  2023-02-03 22:51:08 exit

 

history 목록 초기화

[j@hj0216 ~/dd]$ history
    1  2023-02-04 08:02:55 history

 

728x90
728x90

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

24강 명령어 별칭(alias)

 

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

 

1. alias 지정

[j@hj0216 ~/dd]$ alias c='clear'
[j@hj0216 ~/dd]$ alias h='history'

 

2. alias 목록 조회

[j@hj0216 ~/dd]$ alias
alias c='clear'
alias h='history'

 

3. alias 삭제

[j@hj0216 ~/dd]$ unalias c
[j@hj0216 ~/dd]$ c
-bash: c: command not found

 

4. alias 미 적용

[j@hj0216 ~/dd]$ alias
alias ls='ls --color=auto'

ls command 입력 시, alias에 따라 --color=auto 적용

 

alias 적용 제외 시, 파일 형식에 따른 색 변환 X

[j@hj0216 ~/dd]$ \ls /etc

 

⚠️ 단, 이렇게 설정한 alias는 터미널 종료 시, 초기화 됨

 

728x90
728x90

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

23강 하드 링크 심볼릭 링크

 

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

 

1. C언어 파일 생성 및 컴파일

[j@hj0216 ~/dd]$ vi k.c
#include <stdio.h>
int main(void)
{
        puts("Linux Study\n");
        return 0;
}

[j@hj0216 ~/dd]$ gcc k.c -o k

 

2. ll -i: dir list 조회

[j@hj0216 ~/dd]$ ll -i
합계 16
12991323 -rwxrwxr-x. 1 j j 8440  2월  4 06:33 k
12991324 -rw-rw-r--. 1 j j   74  2월  4 06:33 k.c

-i: index number, i-node* 조회

* uid: user id, 컴퓨터가 사용자를 관리할 때 붙이는 번호

* gid: group id, 컴퓨터가 그룹을 관리할 때 붙이는 번호

* i-node: index number 컴퓨터가 파일을 관리할 때 붙이는 번호

 

3. cp k ck: k파일을 ck파일로 복사

[j@hj0216 ~/dd]$ ll -i
합계 28
12989497 -rwxrwxr-x. 1 j j 8440  2월  4 06:40 ck
12991323 -rwxrwxr-x. 1 j j 8440  2월  4 06:33 k
12991324 -rw-rw-r--. 1 j j   74  2월  4 06:33 k.c

k파일 복사 시, i-node 새로 생성

 

4. ln k lk: k파일에 대한 link 파일 생성

[j@hj0216 ~/dd]$ ln k lk
[j@hj0216 ~/dd]$ ll -i
합계 40
12989497 -rwxrwxr-x. 1 j j 8440  2월  4 06:40 ck
12991323 -rwxrwxr-x. 2 j j 8440  2월  4 06:33 k
12991324 -rw-rw-r--. 1 j j   74  2월  4 06:33 k.c
12991323 -rwxrwxr-x. 2 j j 8440  2월  4 06:33 lk

i-node 동일, hard link수 증가

-> 육안상 파일은 2개이지만, 물리적으로는 파일이 1개

= 파일 1개의 여러개의 이름(Hard Link) 부여

 

5. ln -s k sk: k파일에 대한 symbolic link 파일 생성

[j@hj0216 ~/dd]$ ln -s k sk
[j@hj0216 ~/dd]$ ll -i
합계 40
12989497 -rwxrwxr-x. 1 j j 8440  2월  4 06:40 ck
12991323 -rwxrwxr-x. 2 j j 8440  2월  4 06:33 k
12991324 -rw-rw-r--. 1 j j   74  2월  4 06:33 k.c
12991323 -rwxrwxr-x. 2 j j 8440  2월  4 06:33 lk
12989498 lrwxrwxrwx. 1 j j    1  2월  4 06:49 sk -> k
[j@hj0216 ~/dd]$

symbolic link: 바로가기 아이콘(실행파일이 아닌 실행파일의 주소값을 갖고 있음),

i-node 변경, hardlink 수 변화 X

 

➕ symbolic link의 원본 file을 삭제할 경우,

[j@hj0216 ~/dd]$ rm -rf k
[j@hj0216 ~/dd]$ ll -i
합계 28
12989497 -rwxrwxr-x. 1 j j 8440  2월  4 06:40 ck
12991324 -rw-rw-r--. 1 j j   74  2월  4 06:33 k.c
12991323 -rwxrwxr-x. 1 j j 8440  2월  4 06:33 lk
12989498 lrwxrwxrwx. 1 j j    1  2월  4 06:49 sk -> k
[j@hj0216 ~/dd]$ file sk
sk: broken symbolic link to `k'

ll -i: 실행 시, symbolic link file 빨간색으로 변화

file sk: 조회 시, broken symbolic link 반환

 

728x90
728x90

이 글은 양주종의 코딩스쿨 리눅스(Linux) 기초 강좌 30강 모음 수강하며 정리한 글입니다.

 

22강 파일 분류

(일반 사용자 id: j, pw: j)

(관리자 id: root, pw: r)

 

 

File Classification

-: 일반 파일

d: directory

s: socket

p: named pipe

b: block

c: character

l: symbolic link

 

[root@hj0216 ~]# file /etc
/etc: directory
[root@hj0216 ~]# file /etc/bashrc
/etc/bashrc: ASCII text
[root@hj0216 ~]# file /usr/bin/date
/usr/bin/date: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=4fca2d42de39c5f177d7a21782e344776597ba32, stripped

/usr/bin/date: ELF 64-bit LSB executable, Excutable Linking Format, 64bit 실행(.exe) 파일

 

c언어 소스코드 파일 및 컴파일 파일 확인

[root@hj0216 ~]# vi k.c

#include <stdio.h>
int main(void)
{
        puts("Linux Study \n");
        return 0;
}

[root@hj0216 ~]# gcc k.c -o k
[root@hj0216 ~]# ./k
Linux Study
[root@hj0216 ~]# file k.c
k.c: C source, ASCII text
[root@hj0216 ~]# file k
k: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=5184afee87a2c1e03c5ab28a197f71a816dd0587, not stripped

k.c: C source, C 소스코드 파일

k: ELF 64-bit LSB executable, 64-bit exe 실행 파일

 

File의 종류

[root@hj0216 ~]# ll /dev
crw-------. 1 root root     10, 235  2월  3 22:50 autofs
drwxr-xr-x. 2 root root         160  2월  3 22:50 block
lrwxrwxrwx. 1 root root           3  2월  3 22:50 cdrom -> sr0
brw-rw----. 1 root disk    253,   0  2월  3 22:50 dm-0
srw-rw-rw-. 1 root root           0  2월  3 22:50 log
...

c: character device (입출력 장치: 프린터기, 키보드 등)

[root@hj0216 ~]# file /dev/autofs
/dev/autofs: character special

d: directory

[root@hj0216 ~]# file /dev/block
/dev/block: directory

l: symbolic link

[root@hj0216 ~]# file /dev/cdrom
/dev/cdrom: symbolic link to `sr0'

b: block device (저장 장치: SDA)

[root@hj0216 ~]# file /dev/dm-0
/dev/dm-0: block special

s: socket

: socket을 활용하여 같은 도메인 내에서 연결될 수 있고 프로세스들 사이의 통신을 할 수 있음

[root@hj0216 ~]# file /dev/log
/dev/log: socket

p: named pipe

: 전혀 모르는 프로세스들 사이에서 pipe로 통신을 할 경우, pipe에 이름을 지정해야하며, 이렇게 이름이 지정된 pipe를 named pipe라고 함

[root@hj0216 ~]# find / -type p
/run/systemd/initctl/fifo
[root@hj0216 ~]# ll /run/systemd/initctl/fifo
prw-------. 1 root root 0  2월  3 22:50 /run/systemd/initctl/fifo
[root@hj0216 ~]# file /run/systemd/initctl/fifo
/run/systemd/initctl/fifo: fifo (named pipe)

find / -type p: 최상위 dir(/)에서 type이 p인 file 탐색

 

 

 

➕ IPC: Inter Process Communication, 프로세스간 통신

Process의 경우, 완전히 독립된 실행 객체로써 다른 Process의 영향을 받지 않음

그로인해 서로간 통신이 어려워 Kernel 영역에서 IPC라는 내부 프로세스 간 통신을 제공

Process는 이러한 IPC를 통해 상호 통신을 함

-> IPC의 종류: PIPE, Named PIPE, Message Queue, Shared Memory, Socket 등

1. PIPE: 부모-자식 프로세스간 통신 시 사용

2. Named PIPE: 이름을 가진 PIPE를 통해서 부모-자식 관계가 아닌 프로세스간 통신 시 사용 가능

3. Memory Queue: 컨베이너 벨트 위 물건에 라벨을 붙이면서 동시에 다양한 물건을 다룰 수 있는 것과 같이 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있음

4. Shared Memory: 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당함으로써 이후 어떤 프로세스건 해당 메모리영역에 접근할 수 있음
공유메모리는 중개자가 없이 곧바로 메모리에 접근할 수 있기 때문에 다른 모든 IPC들 중에서 가장 빠르게 작동함

5. Socket: 같은 도메인 내에서 연결될 수 있고, process들간 통신을 가능하게 하는 범용적인 IPC

 

참고 자료

📑 14) named pipe, socket

📑 [운영체제] IPC 프로세스간 통신

 

728x90
728x90

이 글은 남궁성의 정석코딩 [자바의정석-기초편] 수강하며 정리한 글입니다.

 

🟣 기본 환경: IDE: Eclipse, Language: Java

 

 

증감 연산자

전위형(++i): 증가 후 대입

후위형(i++): 대입 후 증가

 

 

비교 연산자

 

숫자 비교 연산자

같음(==), 같지 않음(!=)

 

문자열 비교 연산자

같음(equals())

논리 연산자

그리고(&&), 또는(||), 크거나 같다(>=)

조건 연산자

x > y ? 참일 경우 결과값 : 거짓일 경우 결과값

대입 연산자

lvalue: 왼쪽 피연산자, 저장공간

rvalue: 오른쪽 피연산자

 

 

 

소스 코드

🔗 HJ0216/HJ0216/java-practice

 

 

728x90