CLI 기본 명령어와 Linux 기초
<CLI와 GUI>
명령어로 컴퓨터를 제어하는 방식을 명령줄 인터페이스(Command-Line Interface, CLI)
일반이용자들이 컴퓨터를 사용할 때 적용되는 컴퓨터 제어 방식은 그래픽 사용자 인터페이스(Graphic User Interface, GUI)
CLI는 화면에 나타날 내용에 그래픽 작업을 거치지 않아도 되기 때문에 컴퓨터의 자원을 적게 사용, 더 빠르게 동작한다.
그렇기에 프로그래밍을 배운다면 CLI를 잘 다룰줄 알아야한다.
<CLI 기본 명령어> *키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 프롬프트(Prompt)라고 함.
pwd : print working directory 현재위치확인 (디렉토리=폴더)
mkdir : make directories 새폴더생성
ls : list 특정 폴더에 포함된 파일이나 하위 폴더의 리스트를 출력. 옵션으로 -a, -l, -al -la,
cd : chage directory 폴더 진입
touch : 새 파일 생성
echo : echo뒤의 내용을 화면(프롬프트)에 출력
cat : 파일 내용 터미널에 출력 (상황에 맞게 cat대신 head, tail, more, less 사용)
rm : remove 폴더나 파일삭제. 파일이 남은 폴더를 삭제하려면 rm 뒤에 옵션(-r, -f, -rf)을 추가해야함.
-r은 recursive의 약자로 특정 행동을 순환적으로 반복 -> 파일이 있는 폴더는 삭제가 안되지만 r을 붙이면 가능.
-f는 force의 약자로 어떤 행위를 강제 -> 보호되거나 존재하지 않는 파일도 강제로 삭제
mv : move 폴더나 파일이동. 명령어 mv 뒤에는 순서대로 [이동시킬 폴더나 파일의 이름] [도착 폴더의 이름]를 입력
[도착 폴더의 이름] 자리에 그 대신 변경하고자 하는 파일 이름!! 입력시 이름 변경/
cp : copy 폴더나 파일 복사. cp 뒤에 순서대로 [원본 파일 이름] [복사할 파일 이름] 입력. 옵션은 r과 f로 rm때와 동일
sudo : 관리자획득
+절대 경로와 상대 경로
경로는 명령어 pwd로 확인할 수 있는 절대 경로와, 현재 위치로부터 상대적인 위치를 나타내는 상대 경로로 나뉨.
절대 경로는 기준점으로부터의 절대적인 위치를 나타내는데, 이 기준점을 루트폴더(/)라고 함.
예) pwd 쳤더니 프롬프트에 /home/[username]/helloWorld/hello/ 라고 나왔다면
첫 시작 루트폴더(/)에는 폴더 home이 있고 거기에 진입하면, 폴더 [username] 있고 진입하면, 폴더helloworld 있고 진입하면, 폴더 hello가 있음.
상대 경로는 특정 폴더 또는 파일의 위치를 현재 위치를 기준점으로 나타냄.
현재 위치한 폴더는 점(.)으로 표현하고, 상위 폴더는 두 개의 점(..)으로 표현.
현재 폴더 아래의 폴더 hi로 진입하려고 한다면, 명령어 cd를 이용할 수 있지만,
점(.)은 현재 폴더를, 슬래시(/)는 폴더 내부를 나타냄. 따라서 다음 표현에 포함된 ./는 "현재 폴더 아래의 내부"라는 뜻임.
<패키지와 패키지매니저>
리눅스의 패키지는 여러 파일을 모아 하나의 파일로 저장하고 있는 압축파일. 파일의 구성으로는
1.프로그램 파일
2.프로그램 설치 파일
3.프로그램 설치 설명서
4.프로그램에 대한 정보를 담은 파일
패키지 매니저는 패키지의 설치, 변경, 삭제 등 관리를 편리하게 해주는 도구. 스마트폰으로 비유하면 앱 스토어.
스마트폰의 앱 스토어를 이용해 앱을 설치하는 것처럼, 리눅스 운영체제의 사용자도 패키지 매니저를 이용해 패키지를 설치.
<Linux Ubuntu 운영체제에서 사용하는 apt 패키지>
<주요명령어> *관리자 권한이 필요할 땐? sudo
1.apt update : 패키지를 다운로드할 수 있는 여러 저장소의 최신 정보를 업데이트 (관리자 권한 필요)
2.apt list --upgradable : 업그레이드 가능한 패키지 목록 출력
3.apt upgrade : 전체 패키지 업그레이드 (관리자 권한 필요)
4.apt --only-upgrade install 패키지이름 : 특정 패키지 업그레이드 (관리자 권한 필요)
5.apt install 패키지이름 : 패키지 설치 (관리자 권한 필요)
6.apt list --installed : 설치된 패키지 보기
7.apt search 검색어 : 패키지검색
8.apt show 패키지이름 : 패키지 정보 확인
9.apt remove 패키지이름 : 패키지 삭제 (관리자 권한 필요)
<사용권한>
ls -l 명령어를 통해 현재 폴더와 파일들의 사용권한을 확인할 수 있음.
예시로 아래와 같이 출력될 경우
-rw-r--r-- 1 username ------
drwxr-xr-x 2 username -----
먼저 표현의 첫 시작에 -는 not directory, d는 directory를 의미. 즉 -는 파일, d는 폴더
이어지는 rwx는 각각 read, write, execute permission으로 읽기,쓰기,실행 권한을 의미
3번에 걸쳐 나타나는 이유는 사용자(user),그룹(group),나머지(other)에 대한 권한을 표시하기때문.
-user : 파일을 만든 사람. 소유자. owner라고도 함.
-group : 여러 user가 포함된 집단. 그룹 속 모든 user는 파일에 동일한 권한을 가짐.
-other : 파일을 만들지 않은 다른 모든 user. other권한을 설정하면 이를 global 권한 설정이라고 봄.

chmod : 권한을 변경하는 명령어. 권한변경방식은 2가지가 있음
-Symbolic method : 더하기(+), 빼기(-), 할당(=)과 액세서(accessor)유형을 표기해서 변경.
예)chmod g-r filename # removes read permission from group <g-r : 그룹에서 지운다 읽기권한>
chmod o+x filename # adds execute permission to other <o+r : 나머지에서 더한다 실행권한>
chmod a=rw hello.java # -rw-rw-rw- <a=rw : 모두 같다 읽기,쓰기권한>
chmod a= hello.java # ---------- < =다음에 권한이 안 적히면 걔는 모든 권한 없애네>

-Absolute form : rwx를 3 bit로 해석해 숫자 3자리로 권한을 표기해서 변경. 숫자 7까지 나타냄! rwx-421
예)user는 rwx, group과 other는 r-- 으로 하려면
u=rwx(4+2+1=7), go=r(4+0+0=4) 즉 744. 입력하는법은 chmod 744 hello.java.

<환경변수>
Linux 기반의 운영체제에서는 시스템 자체에 전역변수를 설정할 수 있음. 시스템에 설정한 전역변수를 환경변수라고 함.
환경변수=환경에 따라 프로그램의 동작에 영향을 줄 수 있는 값.
1.지역 환경변수 : 환경변수를 생성한 특정 사용자만 사용할 수 있는 환경변수
2.전역 환경변수 : 모든 사용자가 사용할 수 있는 환경변수
예시)hello=codestates를 입력해 환경변수를 설정하고, echo $hello를 치면 한 줄 띄우고 codestaes가 나온다.
지역 환경변수 echo $~~~($뒤의 문자열이 환경변수를 의미)
*등호표시 앞뒤에는 반드시 공백이 없어야하고, 저장하고자 하는 변수에 공백이 존재할 경우 값 전체를 따옴표로 감싸주어야 함.
*명령어 export를 이용하면 새로운 환경변수 추가 가능.
*환경변수는 일시적 적용이라 종료하면 사라짐. 영구적용하려면
-지역 환경변수는 'cd ~' 에서 'ls -al'입력하고 목록에 .zshrc나 .bashrc를 확인.
이후 nano .있는거를 입력해 편집창을 열고 설정하고자 하는 환경변수를 작성 후 저장. source .있는거 입력 후 echo로 내용출력.
-전역 환경변수는 먼저 변경하고자 하는 파일의 권한을 수정(sudo chmod) 이후 nano 파일명으로 입력창열기.
이후 환경변수 작성 후 저장. source 파일명 입력하여 적용. echo $로 내용출력.
*winodw에선 영구적으로만 환경변수설정. 왼쪽아래 검색창에 환경변수검색. 환경변수편집 클릭하고 환경변수버튼 클릭.
환경변수 창에서 user에 대한 사용자 변수(=지역 환경변수), 시스템 변수(=전역 환경변수)이다. 변수추가 후 cmd 실행해 서 set 입력하면 설정확인.
이미지 및 내용 출처 : Code States