##유닉스 커멘드
#유닉스커멘트?

-마우스로 컴퓨터를 사용 → ‘graphical user interface’ [GUI]
-검은화면에 키보드로 입력하는게 ‘커맨드’ = 명령어
-커맨드로 컴퓨터를 사용 → ‘커맨드 라인’
개발자들은 커맨드라인을 압도적으로 많이 활용합니다.
이를 잘 활용하기 위해서는 기본 커맨드에 대해 잘 알고 있어야 겠죠?
기본 커맨드인 유닉스 부터 시작해보죠
유닉스는 1970-년대 초반에 개발된 운영체제 입니다. 소프트웨어를 개발하고 실행할 수있는 플랫폼 제공을 위해 만들어졌습니다. 당시 매우 인기가 있었고, 다양한 버전으로 발전도 했습니다. 이를 수정하기 위한 C언어도 인기를 끌었죠. 하지만 사용 및 변형에 있어서 라이센스료 지불이 있었기 때문에 GNU/LINUX , 리눅스라는 무료판이 나오게 되면서 인기가 폭발하게 되죠.
이처럼 시간이 지나면서 유닉스가 발전되고 다양한 파생 운영체제들이 나왔습니다.요즘 자주 사용하는 맥, linux, 우븐트 등 윈도우즈를 제외한 거의 모든 체제에 해당하죠. 이러한 것들을 묶어서
‘유닉스 운영체제’ 라고 부르기도 합니다. 이들은 출발점이 똑같기 때문에, 사용하는 커맨드도 유사합니다.
개발자들은 윈도우즈 커맨드보다 유닉스 커맨드를 자주 사용하기 때문에 이에 익숙해지는 것이 필수적입니다. 웹배포, 서버 관리 모두 이를 활용하기 때문이죠.
#설치

윈도우즈는 기본 세팅이 필요합니다.
1.검색 powershell을 한뒤 관리자 권한으로 실행
2. dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
붙여넣기
3. 마이크로소프트 스토어 에서 ‘UBUNTU’ 설치
4. 관심없음 - 시작
5. 사용자이름 , 비밀번호 입력
# 터미널
(실행은 우분트를 실행하면 됩니다)
커맨드 입력창인 검정색 창을 ‘터미널’ 이라고 부릅니다.
안에 있는 내용은 ‘프롬프트’ 라고 합니다.
맨앞의 @부분은 로그인 됨 을 의미하고
~ 은 지금 위치한 폴더
#($) 는 프롬프트의 끝을 의미하게 됩니다.
마지막에 커맨드를 넣으면 출력이 됩니다.
date 나 cal 을 쓰면 명령이 실행되는 걸 볼수 있죠.

터미널과 비슷한 용어들을 알아보고 차이점도 알아보겠습니다.
먼저
terminal 은 인풋을 받고 아웃풋을 출력합니다.
shell 은 커맨드를 해석해줍니다. 예를들어 cal 을 컴퓨터가 이해하게끔 해석해주는 거죠
bash는 가장 기본적인 shell의 한 종류 입니다. 그냥 터미널과 동일하다로 이해해도 괜찮습니다.
# 커맨드 기본 형태
[커맨드 -옵션 아규먼트]
cal 을 통해 특정 달을 보고 싶으면
[cal 10 2024 ]
이렇게 작성하면 되는데요, cal 뒤에 붙은 요소를 ‘argument 또는 인자’ 라고 부릅니다.
앞에 커맨드에 대한 대상을 정해주는거죠
‘option’ 이라는걸 붙일수도 있는데요 , 사용방법은 ‘-알파벳’ 입니다.
커맨드의 실행 방법을 정합니다.
[cal -j 10 2024 ]
이렇게 작성하면 1월1일부터 몇번째 날짜인지를 통해 달력을 보여줍니다.
[cal -y 2024] 를 작성하면 2024 달력 전체를 보여줍니다.
옵션을 여러개 사용도 가능한데요, 붙여서 사용하면 됩니다.
[cal -yj 2024]
# 매뉴얼 활용하기
그럼 위와같은 모든 옵션과 아규먼트를 외워야 할까요? 아닙니다.
미리 작성된 매뉴얼을 보면 되죠.
manual 의 줄임말인 ‘man’ 과 궁금한 커맨드를 넣으면 매뉴얼이 나옵니다.
나오는 방법은 q 입니다.
[man cal]

(방향키 / f b 로 페이지 조절 )
매뉴얼을 하나씩 보겠습니다.
먼저
name 에는 커맨드의 이름, 의미를 보여줍니다.
synopsis 는 커맨드문법을 정리해줍니다. 아규먼트와 옵션이 여기서 보여지죠
여기서 [ ] 안에 든거는 선택사항, 밖에 있는거는 필수사항으로 보면됩니다.
-붙으면 옵션, 안붙으면 아규먼트죠
cal 시놉시스 첫줄을 자세히 볼게요
| [-A number] | A라는 옵션인데, number 아규먼트가 필수입니다. |
| [ [month] year] | year아규먼트인데, month는 생략가능입니다. |
description 부분에서는 각 옵션에 대해 설명이 있습니다.

# 유용한 꿀팁
#폴더구조
유닉스 체제에서는 폴더를 ‘디렉토리’ 라고 부릅니다.
유닉스 디렉토리 구조에 대해 알아 보겠습니다.
먼저 최상위에 root (최상위 디렉토리)
바로 하위에 여러 디렉토리 - 그 하위에 다시 여러 디렉토리 처럼
나무형식으로 뻗어 나가는 형식을 가지고 있습니다.
바로 위 디렉토리는 상위 혹은 부모 디렉토리
바로 아래 디렉토리는 하위 혹은 자식 디렉토리라고 부릅니다.
중요한 디렉토리를 하나 보고 넘어가겠습니다.
바로 사용자의 홈 디렉토리 인데요, 로그인 한 계정의 폴더 처럼 개인 사용자의 폴더를 의미하죠.
안에는 파일, 바탕화면, 다운로드 파일 등등이 들어있습니다.
root 안에 home 또는 users 디렉토리 안에 들어있습니다. 사용자의 개인파일은 홈 디렉토리에,
그 외 컴퓨터에 필요한 파일은 바깥에 위치하게 됩니다.
# 파일 경로 표시법
-루트 부터 차례대로 써주면 되고 루트는 / 로 표기합니다

-> /usr/bin/python3
-> 홈디렉토리는 ~ 로 표현가능합니다
-> /home/codeit/Desktop ⇒ ~/Desktop
# 파일 둘러보기 커맨드
현재 위치한 디렉토리는 워킹디렉토리라고 표현합니다. (working directory)
이를 확인하는 커맨드가 pwd 입니다. (print working directory)

# 절대경로 와 상대경로


상대경로에서 상위 폴더를 표현하려면 // 위에 갔다가 내려가려면


| Pycharm-Projects 까지 내려가기 | cd ./Documents/Pycharm-Projects (Documents/Pycharm-Projects 동일) |
|
| django-coplate 까지 내려가기 | cd django/django_coplate | |
| django_costaurant 이동 | cd ../django_costaurant | |
| pictures 로 이동 (상대보다 절대가 유리 - 너무 길어짐) |
cd ~/Pictures |
**주의사항 : -파일명에 띄어쓰기 있을경우 : ‘’ , “” , \ 활용
# ls에서 자주쓰는 옵션
유닉스에서 .으로 시작하는 폴더는 숨김처리가 됩니다. 그래서 일반적으로 ls를 쓰면 안보이죠.
하지만 ls -a 를 쓰면 숨겨진 모든 파일을 볼수 있습니다.


# 디렉토리와 파일 만들기
*디렉토리를 만들려면 mkdir 새로만들경로 (절대나 상대 둘다 가능) 를 지정해주면 됩니다.
홈에 unix파일을 만들려면
절대 : mkdir ~/unix
상대 : mkdir unix
이후 홈에서 ls해보면 unix가 생성된걸 볼수 있습니다.
cd로 unix 이동 후 동일 방식으로 파일을 계속 추가할 수 있습니다.
그리고 월별데이터 같은걸 만들 때, 한번에 아규먼트를 줘서 만들수 도 있습니다.
mkdir jan feb mar
* 파일을 만들려면, touch 파일경로
먼저 cd jan 으로 이동한 다음
touch finance.txt performance.txt
이렇게 하면 두 파일이 추가 됩니다.
나머지 월은 상위 폴더로 이동 한 다음 경로지정으로 만들어 줄수 있겠죠
cd ..
touch feb/finance.txt feb/performance.txt
# 파일 내용작성
GUI 환경에서는 워드나 VS코드 등을 활용해서 내용을 작성하듯이
CLI 환경에서는 VIM을 활용해서 내용을 작성합니다.
vim
이라고 입력하면 새로운 파일을 만드는 거고
vim 파일명
하면 해당 파일을 수정하는 것 입니다.
vim 으로 새로운 파일을 만들면 이런 화면이 나오게 됩니다.

빔에는 네가지 사용모드에 따라 사용법이 다른데요, 사용모드에 대해 알아보겠습니다.

빔을 처음 키면 항상 일반모드로 시작이 됩니다. 그리고 다른 모드를 가려면 필수적으로
일반모드를 거쳐야합니다. 스틱운전의 기어 중립역할이라고 보면 될것 같습니다.

일반 모드에서 각각에 해당하는 명령어를 입력하면 해당 모드로 진입 가능합니다.
일반모드는 esc입니다.
# vim 활용
*복사/잘라내기
먼저 i 입력모드에서 내용을 작성하고 일반모드로 나오겠습니다 (esc)

다음 텍스트 복사나 잘라내기는 비주얼모드에서 합니다 v
복사하고 싶은 줄에서 비주얼모드 전환 후
줄 복사는 V
글자 복사는 v 를 활용합니다
원하는 대상을 선택한 뒤 y 를 누르면 복사가 완료됩니다.
붙여넣기는 원하는 줄 바로 윗줄에 커서를 두고 p를 누르면 붙여넣기가 됩니다.
잘라내기는 동일방식에서 y복사 대신 d를 눌러서 진행합니다. p로 붙이기
*텍스트를 한줄 씩 복사/잘라내기는 간단하게 가능합니다
yy 복사 / dd 잘라내기로 바로 가능하죠
*파일 저장
먼저 커맨드모드 : 로 진입합니다.
다음 w는 파일저장
q는 vim 종료입니다.
새로운 파일은 종료가 안되기 때문에 저장 후 종료합니다
:w hello.txt 하면 저장이 완료되고 :q 누르면 vim이 종료됩니다.
저장과 종료를 동시에 하려면
:wq 를 입력하면 됩니다.
변경사항을 저장하지 않고 종료하려면
:q! 를 사용하면 됩니다.

#파일내용살펴보기
# 파일,디렉토리 옮기기 와 이름변경

path2가 이미 존재하는 디렉토리 경로면 이동하고 , 아니면 이름변경
-이름변경
이름변경 하고싶은 애 있는 폴더로 이동 후 (cd활용)
mv finance finance2
finance 파일이름이 finance2로 이름 변경됩니다.
디렉토리도 동일한 방법으로 적용됩니다 (r안씀)
-이동
month 디렉토리 안에 jan feb mar 있는 상태에서
mv jan feb
하면 이미 feb가 존재하기 때문에 이름변경이 아닌,
jan 이 feb 안으로 이동하게 됩니다.
다시 feb를 꺼내려면, 꺼내올 대상의 위치경로를 적고, 현재위치 (.으로표현가능) 를 적어주면
현재위치로 feb이 다시 나오게 됩니다.
mv jan/feb .
파일도 동일한 방법으로 이동 시킬수 있습니다.
mv finance.txt feb
*주의사항
mv는 똑같은 이름의 파일이 목적지에 있으면, 그 파일을 덮어 써버립니다.
예를들어, feb 폴더에 text1.txt 와 text2.txt 가 있는 경우
mv text1.txt text2.txt
를 실행시키면 원래는 1의 이름이 2로 변경되어야 하지만, 경로에 이미 그 파일이 있기 때문에
text2파일을 없애고 text1파일의 이름이 text2가 되면서 자리를 대신 차지하게 됩니다.
(기존 text1은 새로운 text2 , 기존 text2는 소멸)
이를 방지하려면
i를 활용해야 합니다 (interactive)
이는 충돌 발생 시 사용자에게 물어보는 역할을 합니다.
mv -i text1.txt text2.txt
를 해보면
overwrite (y/n) 의 내용이 출력되면서 사용자에게 물어봅니다
y는 위내용 반복 / n은 취소가 됩니다.
mv를 안전하게 사용하려면 i 를 같이 활용하는 걸 추천드립니다.
# 파일.디렉토리 복사 붙여넣기
cp 를 통해서 복붙 가능합니다.

path2가 이미 존재하면 그 안으로 복사되고
존재하지 않으면 해당 하는 이름으로 파일,디렉토리가 생성됩니다.
*파일복사
같은 디렉토리로 복사하려면
cp finance.txt finance2.txt
하면 동일 폴더에 finance2가 생성됩니다.
다른 디렉토리로 복사하려면
cp finance.txt ../feb
finance파일을 상위이동 후 feb 디렉토리로 복사하라는 명령입니다.
여기서 조심할게 cp도 mv와 동일하게 같은 파일이 있으면 덮어버리는 성질을 가지고 있습니다.
그래서 -i를 써주는게 안전합니다
cp -i finance.txt ../feb
*디렉토리 복사
디렉토리의 경우 동일한 방법으로 하면 오류가 납니다
r 을 써줘야지만 정상 작동합니다 ( recursive )
cp -r feb feb_copy
현재 디렉토리에 feb디렉토리 카피본을 추가해라는 명령입니다,
# 파일.디렉토리 삭제하기
rm을 통해서 삭제가능합니다 ( remove )

*파일 삭제
현재 디렉토리에 text1 text2 text3 있습니다.
rm text3.txt
하면 3이 날라가고 나머지 1 2 만 현재 디렉토리에 남습니다.
*디렉토리 삭제
cp와 동일하게 r을 써야지만 삭제가 가능합니다
rm -r feb
-이전에 본 i 도 활용이 가능합니다.
rm -ri feb
그러면 삭제 전에 feb 디렉토리에 든 내용을 확인할건지에 대한 창이 나옵니다.
y를 누르면 각 파일 마다 삭제를 정할수있습니다.
(참고로 CLI 에서 삭제는 휴지통이 아닌 영구적 삭제입니다)
-반대로 f 옵션을 쓰면 어떠한 상황에서든 묻지 않고 삭제합니다
# 외부 프로그램 설치
GUI에서는 프로그램을 설치하려면 해당 홈페이지로 이동 후 다운을 합니다.
CLI에서는 방식이 조금 다릅니다.
우분트에서는 apt, 맥에서는 homebrew 커맨드를 이용해서 다운을 합니다.
*기본 설정
제일 먼저 apt update 를 적어 줌으로써 최신정보를 업데이트 해줍니다.
이는 매 프로그램을 설치할 때 마다 해주시면 됩니다.
실행을 해보면 오류가 납니다. 그 이유는 현재 권한이 없기 때문입니다. 설치를 위해서는 관리자 권한이 필요하기 때문이죠.
일시적으로 관리자권한을 받는 커맨드는
sudo
입니다. 이를 붙여서 사용하면
sudo apt update 를 적으면 정상적으로 업데이트가 완료됩니다. (우분트 비번적으면 됨)
이제 설치할 준비가 된 겁니다.
*설치하기
sudo apt install 설치할프로그램
을 적으면 설치가 시작됩니다.
sudo apt install mc 를 통해서 mc프로그램을 설치 할 수있습니다 (GUI처럼 보여주는 프로그램)
프로그램 제거는 install 대신 remove를 써주시면 됩니다.
*C드라이브 찾기
WSL을 사용하면 윈도우 파일에 접근이 쉬워집니다.
/mnt /c
를 사용하면 윈도우의 c드라이브에 접근이 가능해집니다.\
사용자 홈 디렉토리는
/mnt /c /Users / username
에 위치하는 거죠
*POWERSHELL?
시스템관리, 자동화, 개발 등 다양한 작업 및 기본 유닉스 커맨드도 지원하는 툴입니다.
참고 - https://dev.to/heytimapple/linux-commands-that-work-in-powershell-by-default-17gd





