TIL - 02.22~02.25
#Unix command(1)
@Linux(Unix) 필수 명령어
CLI command : 터미널 명령어
-명령어를 외우는거 x, man 페이지 활용
man 해당 명령어(help같은 느낌)
tap을 활용한 명령행 완성 기능 활용(auto-completion), command compeletion
-더블탭 : 사용할 목록을 보여줌
i18n : 문자와 관련된 것, LANG 환경변수 설정에 영향받음.
-연습할 때에는 en_US 로케일 사용하는 편이 좋음
-locale : 언어셋
*regex : 정규표현식
가장 많이 쓰는 명령어
vmstat
vim
grep
apt
ss
nmcli
lsof
sysctl
git
*editor : vim 무조건 다뤄야함.
*약어의 원어를 알면 명령어가 더 잘 외워짐
*~ : 틸드
절대/상대 경로
absolute path(절대경로) : /로 시작하는 경로
relative path(상대경로) : .으로 시작하는 경로(.생략 가능)
ls 명령어는 ls –al, ls –l로 많이 한다.
*옵션을 연결해서 쓸 때에는 합쳐서 사용
ls –a –l => ls –al
*Linux에서는 exe파일이 없다, 권한이 실행이면 실행하는 것
mkdir –p work/testdir : -p가 붙어서 2개의 디렉토리가 동시에 만들어짐
(work, 그 안의testdir)
echo : 화면에 출력하는 것.
cat txt파일 : txt파일 안에 내용 출력
#vim editor
설명 / 명령어 // 추가 설명
[.vimrc에 저장해야 하는 것들]
각종 설정 : set _ // :set all로 옵션사항들 확인
encoding list 설정 : set fencs
function 기능 저장 : nmap, imap ....
단축어 : ab, ia, ca ...
+a 에디터 custom : colorscheme _ // https://vim-bootstrap.com/
...
[저장]
저장 / :w // 처음 저장할 때, :w [파일이름] 하면 해당이름으로 저장됨.
저장하면서 종료 / :x, ZZ
저장안하고 종료 / :q!
다른이름으로 저장 / :sav [파일이름]
[새창 열기]
vim으로 디렉터리 열기 / :e [디렉터리], Ctrl + ^
vim에서 다른 파일 열기(새창) / :e [파일이름]
다른 창으로 이동 / CTRL + ^
diff 기능, 소스코드 비교할 때 / vim –d [파일1] [파일2] ...
코드 안 파일 열기 / 커서 옮기고, gf
분할로 파일 열기 / CTRL+W + f
[탭으로 열기]
vim –p [파일1] [파일2] ...
Ctrl + z / U
[단어 경계 이동]
단어의 (앞,뒤)에서 멈추기 / (w,e), ([[, ]])
괄호 짝 단위로 이동 / %
[단축어 설정] - .vimrc에 저장해 놓아야함.
ab [단축어] [단축하고자하는어]
ca [한글] [오타] ; ex. ca ㅈ w -> :ㅈ 쳐도 :w로 됨.
[function에 기능 부여] - .vimrc에 저장해 놓아야함.
normal모드 작동 / nmap <단축키> <명령>
insert모드 작동 / imap <단축키> <명령>
0map 에 앞에 단어를 넣으면 그 모드의 단축키 명령어로 저장됨.
[Linux -> Window로 텍스트 가져갈 때]
:set ff=dos
:set fenc=korea
:wq // 만약 다른이름으로 저장해야한다면? :sav new_dosfile.txt
[Window -> Linux로 텍스트 가져갈 때]
fencs 설정 되있으면 자동으로 됨.
안될 때
:set ff=unix
:set fenc=utf8
:wq
[프로그래머를 위한 기능]
들여쓰기 다시 해주기 / gg -> = -> G //전체, 비주얼모드(V) -> 색칠 -> = //부분
탭 -> 공백 4칸으로 전환 / :set et ts=4 ; :ret
공백 4칸 -> 탭 전환 / :set noet ts=4 ; :ret!
자동완성 / CTRL + N
특수문자 포함 자동완성 / CTRL + X
#Linux package manager
[이론]
Package[패키지] : 미리 컴파일 된 묶음.
// 옛날에 소스코드를 받아서 하나하나 빌드했는데 시간도 빌드하는 환경도 만들어야 돼서 쉽지않았음 -> 패키지 등장
패키지 매니저 : apt(주력), dpkg(보조)
파일이름 : [패키지이름]_[버전]_[릴리즈]_[아키텍쳐].deb
[dpkg] - 검색, 확인시 씀
패키지 리스트 확인 / dpkg –l strace
패키지 상태 확인 / dpkg –s
패키지 검색 / dpkg –S [파일명] // dpkg –S ‘*trace’ 하면 trace로 끝나는 패키지 검색
----------------------------------------------
#apt – 요즘에 쓰는 툴
*binary : 명령어
*apt-get으로 되있는 문서는 옛날게 많음.
@sources list
apt가 package를 가져오는 곳(다운 받는 곳의 정보)
/etc/apt/sources.list.d/에 *.list 파일명으로 추가할 것.
-> apt edit-sources
[networking]
# - root 범위에서 실행
[apt] -ubuntu mirror 꺼 사용
sudo select-editor > 2
apt edit-sources kakao.list > ppt자료에 3개 입력하고 저장(틀리면 안되니 복사사용)
*yy : 복사, p: 다음행에 붙여넣기
sudo apt update
[패키지 검색]
apt search <검색어>
apt search –n <검색어> : 중간에 있어도 검색함
[패키지 정보]
apt show <검색어>
[패키지 삭제]
패키지만 삭제(설정은 그대로) / apt remove <패키지명>
완전 삭제 / apt purge <패키지명>
버전 관리로 쓰이지 않는 패키지 자동 삭제 / apt autoremove <패키지명>
*apt –y install ... : 무조건 ‘yes’하라는 설정
*dependency error 해결(종속성 문제) -ppt 그림 참고
다운 못받는 파일의 필요한 버전 확인 / apt list —all-versions [다운받을 것]
문제 있는 버전 다운그레이드 / apt install curl [문제있는 것]=[필요한 버전]
---------------------------------------------
#네트워크
[이론]
TCP/IP : IP 주소
Wired Network : 유선 네트워크
Wireless Network : 무선 네트워크
localhost : 자기자신 주소 ( I hacked 127.0.0.1 자기자신을 해킹한다는 재밌는 일화)
=> 자기 자신 주소는 IPv4 표현식으로 127.0.0.1 이다.
[설정] - NetworkManager(네트워크 설정관리)
*eth0라는 말, ifcfg-, ifup, ifdown 편집하는 내용이 나오면 거르기
NetworkManager를 사용 할 것.
[nmcli]
root 권한으로 할 것
현재 상태 확인 / nmcli g
네트워크 끊고 연결 / nmcli n on(or off) // 네트워크 안될 때 nmcli n 으로 조회한번 해볼 것
네트워크 장치 조회 / nmcli d
특정 네트워크 속성보기 / nmcli c s <커넥션이름>
// 소문자 : 설정된 값(offline도 보임), 대문자 : 할당된 값(online일 때만 보임)
nmcli 옵션들 : g, n, r, c, d
커넥션 연결 끊기 / nmcli con down <커넥션이름>
커넥션 연결 하기 / nmcli con up <커넥션이름>
커넥션 이름 변경 / nmcli con modify <기존이름> connection.id <새이름>
*connection과 관련된 명령어는 nmcli 앞에 con이 붙는다.
*IP, Gateway값 메모할 것.
Gateway주소 추가 / nmcli c mod <커넥션이름> ipv4.method manual ipv4.addr <기존ip> ipv4.gateway <Gateway주소> +ipv4.dns <새Gateway주소>
IP 추가 / nmcli c mod ens33 +ipv4.addr <새 IP주소>
IP 삭제 / +대신 -사용
변경 반영하기 / nmcli c down <커넥션이름> && nmcli c up <커넥션이름>
설정 추가 / +
설정 삭제 / -
설정이 꼬여서 초기화 하고플 때
nmcli c del <커넥션이름>
nmcli c add con-name <커넥션이름> ifname <디바이스네임> type ethernet ip4 <IP주소>
nmcli c mod ens33 +ipv4.dns 8.8.8.8
nmcli c s ens33 | egrep ‘(ipv4.addr|ipv4.gateway|ipv4.dns)’
device 자체가 올라오지 않을 때 1 / nmcli dev connect <커넥션이름>
device 자체가 올라오지 않을 때 2 / nmcli g 해서 STATE가 asleep인지 확인.
[Consistent Network Device Naming]
원래 EL6이전에 자주 쓰이던 방식인 eth0, eth1, eth0:0, eth0:1 ...처럼 사용했지만 지금은 새로운 네이밍 방법이 생겼다. 이유는 메인보드 슬롯에 이더넷 카드를 두 개를 장착한 후 각각 IP를 할당했는데, 하나를 고치기 위해서 넘버를 보는데 이더넷 카드 회사가 둘다 같다면 둘다 번호가 같아서 뜯기 전에는 모른다. 이를 방지하기 위해 enp5s0, eno1과 같은 새로운 네이밍이 나왔다.
ex. enp5s0 -> en / p5 / s0 -> 이더넷 / PCI 5번 / 0번 슬롯
[network tool] - ss(socket statistics)
netstat -> ss // ss를 사용하자