복습 Day3

2023. 3. 16. 20:55AWS 기반 데이터분석 처리 고급 SW 클라우드 개발자 양성과정

Day-03


- 현재 위치 : /home/user

/          /            ../../
home /home  ../
boot  /boot  ../../boot
lib      /usr/lib ../../usr/lib
ls      /usr/bin/ls   ../../usr/bin/ls


# apt -y install ncal

# cal 12 9999

# id

# whoami

# who am i


## linux file time (리눅스가 파일이 가지는 시간)
ctime : create (생성시간)
mtime : modify (수정시간) 수정한 시간이 바뀌는 것 
atime : access (접근시간) Read Only 파일을 읽었을때 접근만 가

# touch test (테스트 파일 만듬)

# ll (파일 확인하면 시간이 바뀌어 있음, mtime & atime이 동시에 바뀐 것, mtime바뀌면 atime저절로 바뀜, bc 접근안하고 수정할 수 없으니)

# mkdir dir1 (dir1 디렉토리 만듬)
 

# ls (dir1 디렉토리 만들어진거 확인)

 

# cat > test2  (test2 파일 만듬, touch test == cat > test 와 같음)
hello
^d (eod) (end of 

 

# ls (test2 확인)


# mkdir dir2

 

#file test1 

test: empty (생성만하고 안에 내용은 없기 때문)


# file test2 

test2: ASCII text (hello 라는 char를 넣었기 때문, 문자 파일)

# cat test2

# file /usr/bin/passwd

/usr/bin/passwd: setuid ELF 64-bit pie executable (binary파일, )


# cat /usr/bin/passwd  (binary 파일을 읽으려고 cat으로 읽을 수 없음, 실행파일로 만들어져 있고  기계언어로 있기 때 / text파일은 읽을 수 있음, 그래서 cat 대신에 file로 내용을 확인)

# mkdir -p a/b/c/d/e/f/g (mkdir -p 1/2/3/) mkdir -p  = 여러 디렉토리를 만들 수 있

# cd a/b/c/d/e/f/g

# cd

# cp test1 dir1 (test1을 dir1 에 copy)

# cp test2 dir1/test2_cp => (cp & rename test2를 dir1에 copy하는데, 파일명을 test2_cp로 변경)

# cp test2 dir1/test2_mv => (cp & rename test2를 dir1에 copy하는데, 파일명을 test2_mv로 변경)

# cp test2 test3 (test2를 test3에 복사)

# cp test2 test4 (test2를 test4에 복사)

# ls *

# mv test4 dir2 (test4를 dir2에 move)

 

# ls dir2 (test4 들어갔는지 확인)

/ ../ test4

# mv test3 dir6  => rename (test3가 dir6(디렉토리가 X), test3 이름이 dir6로 바뀌고 옮겨진 것임)

 

# file dir6 (확인해보면 text파일임)

dir6: ASCII text


# mv dir6 dir2_mv => rename
dir2_mv: 파일임


# mv dir2_mv dir2/test3_mv  => mv & /rename

dir_mv(파일)을 dir로 옮기고 test3_mv 로 이름 바꿈

# rmdir dir5 (디렉토리 제거)

# rmdir dir4 (디렉토리 제거)

# rmdir dir3 (디렉토리 제거)

# rmdir dir2 

rmdir: 'dir2' 제거 실패: 디렉토리가 비어있지 않

# cd dir2 (dir2 폴더 들어가서 파일을 다 삭제해야함)

[root@ubuntu ~/dir2] # rm * (dir2에 있는 모든 파일 삭제)

# cd .. (상단으로 올라가기)

 

# rmdir dir2 


# rm -rf dir1 (rm은 파일은 명령을 지우는 명령어인데, rm -rf 는 디렉토리에 파일이 있어도 지워짐, 위험한 명령어임)

# rm -rf a test* (a 와 test로 시작하는 모든 파일 삭제)

### rm -rf / (모든 파일 삭제 절대 사용하지 말 것)


# cat > test1 (cat이 파일을 만든게 아니라 >(리디렉션)이 만든 것)
hello
^d

# cat 0< test1 (0은 입력)

# cat 1> test2 (1은 출력)
hello
^d

# cat test2

# ls dir1 (dir 1이 없어서 error가 뜸)

ls: 'dir1에 접근할 수 없음: 그런 파일이나 디렉터리가 없습니

# ls dir1 2> error (화면에는 암것도 안뜸)

# cat error (error를 열어봄) 

 

# who am i

root   pts/1 (pts는 화면을 나타냄, 츄도(가짜, 가) terminal system, 물리 터미널과 가상터미널을 Link지어논 것 = pts)

 

# ls /dev (tty가 보일 것, tty가 연결돼서 pts와 링크가 형성되는 것, 어떤 사용자가 pts0를 받고 싶으면,물리적인 장치(terminal)장치가 있어야 함.  사용자에게 할당을 해주고(너 이거 써) 사용자가 나가면 다시 반납이 됨)

# wc /etc/passwd (wc: word count)
50(line #) 89(문자 수)  2981(글자/단어수) /etc/passwd

 

# wc -l /etc/passwd (라인수만 출력) wc -line

50 /etc/passwd

# wc -w /etc/passwd (단어 수 출력) wc -world 

89 /etc/passwd


# wc -c /etc/passwd  (글자 수 출력) wc -character

2981 /etc/passwd

# cat -n /etc/passwd (라인의 상세한 내용 출력)

# grep bash /etc/passwd | cat -n   (cat -n 결과뒤에 grep bash /etc/passwd가 붙어있는 것)

1  root:x~~/bash

2  ubuntu /bash

(|(파이프)는 앞에 있는 명령어의 출력의 결과가 뒤에있는 명령어로 연결되는 것을 말함)

grep은 검색하는 것임,  grep=ctrl + f 생각하자

### bash라는 단어를 etc/passwd 디렉토리에서 찾겠다

 

#  cat -n /etc/passwd; clear (A;B 앞과 뒤의 명령어가 관계가 없고, 순차실행함)


# clear ; cat -n /etc/passwd

# more /etc/passwd (q로 빠져나가기, more은 page를 나타냄)

 

# more + 10 /etc/passwd (앞에 10줄 생략하고 보여줌)

 

# less /etc/passwd (q로 빠져나감)

# cp test1 test1cp 

# mkdir dir1

# cp test1 dir1

 

# ls dir1

./  ../  test1 (dir1에 test1이 있음)

 

# cp dir1 dir2  (dir1을 dir2에 복사하면 복사가 안됨, 디렉토리 안에 파일이 있으면 다른 폴더에 복사가 안됨)

cp: -r을 지정하지 않음, dir1 디렉터리 생략 (-R 사용해도 됨)


#  cp -R dir1 dir2 (dir1에 파일이 있어도 dir2로 복사됨 = dir1이라는 똑같은 파일이 dir2로 복사됨, dir는 따로 생성하지 않았음) (copy는 디렉토리 안에 파일이 있어도 -R로 복사할 수 있음)

# mv dir2 dir3 (dir2는 없어지고 dir3로 변경됨, dir3를 따로 생성하지 않음)

# mv dir3 dir1 (dir3는 dir1로 디렉토리에 들어감)

# ls dir1

 


# rm -rf dir1 test*  (test로 시작하는 모든 문자를 지울 것, * 은 메타문자임)

# mkdir /work (절대경로)

# cd /work (root/work로 들어갔음)

# touch test1 (test1을 만듬)

# ll > test2 (test2에 ll을 담음)

# cat test2 (test2 실행했더니 ll 쳤을때 값이 나옴), ll = 상세하게 길게 보여달

drwxr-xr-x   2  root  root  4096   3월  8   11:50  ./  

# ls -li (li에서 i 는 inode #를 확인하는 명령어임)
917509   drwxr-xr-x   2  root  root  4096   3월  8   11:50  ./     (inode # = 917509)

2            drwxr-xr-x   2  root  root  4096   3월  8   11:49  ../     (2 = root의 inode #)
917511   drwxr-xr-x   2  root  root  4096   3월  8   11:50  test1    (inode # = 917511)

917512   drwxr-xr-x   2  root  root  4096   3월  8   11:50  test2    (inode # = 917512)


### 파일시스템의 구성요소
- Boot block : booting strap code (파일시스템을 2개로 쪼개면 첫번째에도 boot block이 들어감, 2nd에도 boot block들어)

그렇게 할 필요가 없지만 함 b/c 요즘 컴터들은 멀티부팅을 지원함, 왼쪽에 첫번째 하드디스크로 부팅하다가 두번째 하드디스크로 부팅할수도 있을 것임, 부팅영역을 다르게 만들 수 있음.

그중에 첫번째 부트영역=master boot record라고함(MBR: 실제 부팅과 관련됨)

- Super block : filesystem info (아주 중요하게  파일시스템의 전체정보를 지니고 있음, 평상 시스템이 동작 중일때 슈퍼블록은 Ram에 상주함. 
- inode list : file info (inode가 링크가 된다는 것은 파일을 만든다는 것임)
- Data block : real data (하드디스크는 데이터를 Data Block에 저장함(0101010 2진수로) data가 기록이 되면 전체 주소를 어딘가에 저장해야함, 그게 inode list임)

FAT (윈도우 형식)
FAT32 - 4G (표준, 최대볼륨크기가 4G를 넘지 못함)
NTFS (호환성이 좋지 않음, 윈도우에서 만들었기 때문에)
Ext2, 3, 4 -  Linux (확장형 파일 시스템을 사용하는 것이 좋음)

# df -T  (disk free = 리눅스 시스템 전체의 (마운트된) 디스크 여유공간 확T: type) 

리눅스는 기본 ext4를 사용하고 있음



# ll -i

# cp test1 test1_cp (test1 파일을 test1_cp에 복사했는데 inode #가 다르다)


# ll -i

inode 넘버가 다르다, 같은파일이지만


# cat > test1 (test1 파일 만듬)
hello
^d

# cat test1 

hello

# cat test1_cp (아무것도 안뜸, 이미 복사한 이후에 test1만 따로 생성했으니)

# ln test1 test1_h (ln = link)

# ll -i 

test1과 test1_h의 inode #가 같음(link)

 

Hard LInk
# cat > test1
goodbye
^d
# cat test1
goodbye
# cat test1_h (cat test1과 test1_h는 이름만 다른 같은 inode #여서 goodbye값이 나옴)
goodbye
# ln -s test1 test1_s 

# ll -i

test1_s@ (링크가 된 파일)

Symbolic Link
# cat test1

goodbye
# cat test1_s
goodbye

 

#cat test1_h

goodbye

#cat test1_s

cat: test1_s: 그런 파일이나 디렉터리가 없습니다. (symbolic link임, 바로가기임, inode번호가 다름)


hard link vs symbolic link
————————————
inode 원본 과 같음  <> inode 원본 과 다름
file size 같음 <> 다름, 고정 5
이름만 다른 파일 <> 바로가기
같은 파일시스템에서만 생성 가능 <> 다른 파일시스템에서도 생성 가능..


## > vs >>
file 무 :  create <> create
file 유 : overwrite <> append

# cat > test1
hello
^d

# cat test1

# cat >> test1

goodbye
^d

# cat test1

$PS1 : first prompt
$PS2 : >

# cat -n << endtext > myenv
> my home is $HOME
> my prompt is $PS1
> current directory is `pwd`
> today is `date`
> endtext

# cat myenv



# rm -rf test1

# cat test1_h

# cat test1_s

# ln test1_h test1

# cat test1_s

# cd

# ln -s /var/log logs

# ls

# cd logs


# grep -c bash /etc/passwd

# grep bash /etc/passwd | wc -l

# grep -n bash /etc/passwd


# whereis passwd

# which passwd


## mac Users…

# cd Downloads/packages

# ls

# mv * ~/.atom/packages

# cd ~/.atom/packages

# ls


## .ftpconfig
{
  "protocol":"sftp",
  "host":"192.168.1.48",
  "port":22,
  "user":"root",
  "pass":"1234",
  "promptForPass":"false",
  "remote":"/work",
  "local":"",
  "agent":"",
  "privatekey":"",
  "passphrase":"",
  "hosthash":"",
  "ignorehost":"true",
  "connTimeout":10000,
  "keepalive":100000,
  "keyboardInteractive":"false",
  "keyboardInteractiveForPass":"false",
  "remoteCommand":"",
  "remoteShell":"",
  "watch":[],
  "watchTimeout":500
}

## well-known port
21 : ftp
22 : ssh
23 : telnet
25 : smtp
80 : http
110 : pop3
143 : IMAP


# cd /work

# rm -rf *

 

깃허브 remote .gitignore 파일에서

# .gitignore (첫줄에 입력)

## hello.c  (파일명) (Github에서 C언어로 만든 파일, remote) 
#include <stdio.h>

void main() {
  printf("Hello, World~!! \n");
}

 


# ls

# gcc -o hello hello.c (hello.c 파일 컴파일)

# ./hello (hello를 실행시킴)

# !gcc (리컴파일)

# ./hello (hello 실행)

Hello, World~!!


# mkdir c

# mv hello* c

# ls c
###stage all 무조건 하

a++  (왜 a++ 을 쓸까요? 속도의 차이가 심각하다, 아래로 내려갈수록 속도가 느려짐, 느려지는게 너무현저해짐, Ram은 빠른데 cash는 느림, 보조기억장치 너무느림, 변수를 할당하면, 램에 하나 장만함, CPU입장에서는 제일빠른 레지스터를 사용하고 싶지, 느린 Ram이나 Cash를 사용하고 싶어하지 않음)

a = a + 1

## 명령어 실행 사이클
fetch
decode
excute
save / store

f -> d -> e -> s
         f -> d -> e -> s
                  f -> d -> e -> s
                           f -> d -> e -> s

## 시스템의 정상적인 실행 방해하는 요소.

1. 잦은 입출력
2. 순환/반복문

while / for


# vi test
i : 현재 커서 입력. 키를 누르고 family name 입력
a : 현재 커서 다음.
I : 현재 라인 맨 앞.
A : 현재 라인 맨 끝
o : 현재 라인 아래
O : 현재 라인 위

h
j
k
l

:w 저장
:wq! 저장 후 종료

dd : 한줄 삭제
yy : 한줄 복사
3dd
4yy
p : 붙여 넣기, 커서 아래
P : 붙여 넣기, 커서 위

yG : 현재라인 ~ 파일 끝까지 복사
y$ : 현재 커서 ~ 라인 끝 복사


x : 한글자 삭제, del
X : 한글자 삭제, back space 

:0 : 0번 라인 이동

( : 현재 문단 처음
) : 현재 문단 끝

[
]

r : 한글자 교체


# cat /etc/passwd > test2

# shift + zz (강제종료)


/bash 순방향 검색
//

?? 역방향 검색

:1,$s/:/=/

:1,$s/:/=/g

:w

:%s/=/:/g

:%s/\/home/\/export\/home/g

:%s/\/export\/home/\/home/g


'AWS 기반 데이터분석 처리 고급 SW 클라우드 개발자 양성과정' 카테고리의 다른 글

Day11  (0) 2023.03.21
복습 Day4  (0) 2023.03.17
03-16  (0) 2023.03.16
복습 Day2  (0) 2023.03.15
3/15  (0) 2023.03.15