명령줄 인터페이스(command-line interface, CLI) : 텍스트 터미널을 통해 사용자와 컴퓨터가 상호작용하는 방식이다. 상대적으로 높은 안정성과 빠른속도를 갖고있다.
그래픽 사용자 인터페이스(Graphic User Interface) : 일상생활에서 일반인이 컴퓨터를 사용할 떄 적용되는 컴퓨터 제어 방식. 편리하지만 컴퓨터 자원을 소비하기 때문에 CLI보다 느리다.
컴퓨터를 제어하기 위해서는 다양한 Input이 필요하다. 키보드, 마우스, 카메라, 마이크 등 컴퓨터에 새로운 명령을 전달하는 모든 소스가 입력 소스(Input Source)이다.
컴퓨터를 조작하기 위한 입력과 출력을 I / O (Input/Output)라 표기하고, '아이오'라고 읽는다.
프롬프트(Prompt) 란? : 키보드 입력을 확인하고 편집할 수 있는 한줄의 공간을 뜻한다.
pwd(Print Working Directory) : 현재 위치 확인하기. # directory 는 폴더라고도 한다.
mkdir(Make Directories) : 새로운 폴더 생성하기.
ls(List) : 특정 폴더에 포함된 파일이나 폴더 확인하기.
- ls -a : a는 'all'이라는 의미이다. 숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력한다.
- ls -l : 폴더나 파일의 포맷을 전부 표현하라는 의미이다. d로 출력된 경우는 디렉토리, -로 출력된 경우는 파일을 나타낸다.
cd(Change Directory) : 프롬프트로 상호작용하는 폴더를 다른 폴더로 변경한다는 의미이다.
touch : 파일 생성하기. ex). touch hi.txt
> : 실행 결과를 파일로 저장하기. ex). ls > ls.txt를 입력하면 ls.txt에 ls 명령어의 실행결과가 저장된다.
echo : echo 뒤의 내용을 화면에 출력해주는 역할을 한다.
cat : 파일의 내용을 터미널에 출력하기.
rm(Remove) : 폴더나 파일삭제한다. rm은 단일 파일을 삭제할 수 있다. 만약 폴더를 삭제하려면 옵션을 이용해야 한다. (휴지통을 거치지 않고 삭제된다.)
rm -rf bye : 폴더를 삭제한다. 여기서 r은 recursive를 뜻하고 f는 force를 뜻한다. r은 폴더를 지울 때 사용하고, f는 질문을 받지 않고 지울 때 사용한다.
mv(Move) : 폴더나 파일의 이름을 변경, 또는 폴더나 파일의 위치 옮긴다. mv 뒤에는 순서대로 [폴더나 파일의이름][도착 폴더의 이름]을 입력한다. ex). mv bye.txt bye/
mv : 폴더나 파일의 이름을 변경할 수 있다. mv [폴더나 파일 이름][변경하고자 하는 파일의 이름] ex). bye.txt helloWorld.txt
cp(Copy) : 폴더나 파일을 복사하기. cp [원본 파일 이름][복사할 파일 이름], cp -rf bye hi 폴더를 복사하는 방법.
cd .. : '.' 현재경로 '..' 앞에 있는 폴더를 지칭함.
각 명령어에 포함된 옵셥은 명령어 이름만 입력하거나 -h 또는 --help 와 같은 옵션을 통해 확인할 수 있다.
r은 recursive의 약자로 특정 행동을 순환적으로 반복한다.f은 force의 약자로 어떤 행위를 강제한다.-h, -help 명렁어는 터미널에서 제공하는 기능이나 명령어의 사용법을 알려준다.절대 경로 : 기준점으로부터의 절대적인 위치를 나타내는데, 이 기준점을 루트폴더(/)라고 한다.
상대 경로 : 특정 폴더 또는 파일의 위치를 현재 위치를 기준점으로 나타낸다. 상위 폴더는 두 개의 점(..)으로 표현한다. 현재 폴더는 (.)로 표현한다.
절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역이다. 일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없다.
Linux 관리자의 가장 큰 특징은, 어떤 일이 있더라도 일반 사용자에게 관리자 권한(루트 권한)을 완전하게 넘기지 않는다.
즉, 사용자와 관리자를 명확히 분리하여 사용자의 실수로 발생할 수 있는 시스템 에러로부터 운영체제를 보호한다.
whoami : 현재 로그인된 사용자를 확인하는 명령어.
nano 실행 : nano hello.java (hello.java를 nano에서 엽니다.) or nano (그냥 실행도 가능하다.)
파일 열기 : nano 파일이름
파일 편집 후 종료 : cntl + x
파일 저장 : nano를 종료하지 않고, 파일을 저장할 수도 있다. ^O WriteOut를 이용하면 된다.
패키지 매니저란? : 패키지의 설치, 변경, 삭제 등 관리를 편리하게 해주는 도구이다.
apt : 우분투의 패키지 매니저. WSL에 apt를 입력하면 패키지 매니저의 주요 명령어를 알 수 있다.
1). 패키지 목록 갱신: apt update(관리자 권한 필요)
2). 패키지를 다운로드할 수 있는 여러 저장소의 최신 정보를 업데이트합니다. 새로운 저장소를 추가하거나, 패키지를 설치하기 전, 최신 정보를 갱신합니다.
3). 설치된 프로그램이 새로운 버전으로 변경되지 않습니다.
4). 업그레이드 가능한 패키지 목록을 출력: apt list -—upgradable
5). 전체 패키지 업그레이드(버전 업): apt upgrade (관리자 권한 필요)
6).특정 패키지만 업그레이드(버전 업): apt --only-upgrade install 패키지 이름 (관리자 권한 필요)
7). 패키지 설치: apt install 패키지 이름 (관리자 권한 필요)
8). 설치된 패키지 보기: apt list --installed
9). 패키지 검색: apt search 검색어
10). 패키지 정보 확인: apt show 패키지 이름
11). 패키지 삭제: apt remove 패키지 이름 (관리자 권한 필요)
관리자 권한 사용하기 : sudo를 이욯하면 된다고 나와있지만, sudo를 써도 계속 deny되어서 관리자 권한으로 실행하였다.
apt : 우분투의 기본 패키지 매니저
wget : URL를 통해 파일을 다운로하는 프로그램이다.

파일은 표현의 첫 시작이 -로 시작하고 폴더는 d로 시작한다.
이어지는 r,w,x는 각각 read permission, write permission, execute permission으로 읽기 권한, 쓰기 권한, 실행 권한을 나타낸다.
3번에 걸쳐 나타나는 이유는 사용자와 그룹, 나머지에 대한 권한을 표시하기 위함이다.

User : 파일의 소유자이다. 기본적으로 파일을 만든 사람이 소유자가 된다.
Group : 여러 user가 포함될 수 있다. 그룹에 속한 모든 user는 파일에 대한 동일한 group 엑세스 권한을 갖는다. 예를 들어 많은 사람이 파일에 엑세스해야 하는 프로젝트가 있다 가정하면 각 user에게 일일이 권한을 할당하기 보다 user를 group에 추가하고, 파일에 group 권한을 할당할 수 있다.
other : 파일에 대한 액세스 권한이 있는 다른 user이다. 파일을 만들지 않은 다른 모든 user를 의미한다. 따라서 other 권한으로 설정하면 해당 권한을 global 설정이라 볼 수 있다.
chmod : 권한을 변경하는 명령어이다.
chmod로 권한을 변경하는 2가지 방식
1). +, -, =과 액세서 유형을 표기해서 변경하는 Symbolic method
2). rwx를 3bit로 해석하여, 숫자 3자리로 권한을 표기해서 변경하는 Absolute form
Symbolic method는 액세스 클래스, 연산자, 엑세스 타입으로 구분한다.

chmod g-r filename # removes read permission from group
chmod g+r filename # adds read permission to group
chmod g-w filename # removes write permission from group
chmod g+w filename # adds write permission to group
chmod g-x filename # removes execute permission from group
chmod g+x filename # adds execute permission to group
chmod o-r filename # removes read permission from other
chmod o+r filename # adds read permission to other
chmod o-w filename # removes write permission from other
chmod o+w filename # adds write permission to other
chmod o-x filename # removes execute permission from other
chmod o+x filename # adds execute permission to other
chmod u+x filename # adds execute permission to user
chmod a=rw hello.java # -rw-rw-rw-
chmod u= hello.java # ----rw-rw-
chmod a+rx hello.java # -r-xrwxrwx
chmod go-wx hello.java # -r-xr--r--
chmod a= hello.java # ----------
chmod u+rwx hello.java # -rwx------
Absolute form은 숫자 7까지 나태내는 3bits의 합으로 표기한다.

ex). 만약, user는 rwx를 group과 other은 r-- 로 권한을 변경하려고 한다면, 위 표에 나와있는 숫자의 합을 user, group, other 순으로 입력하여 사용한다.
#u=rwx (4 + 2 + 1 = 7), go=r (4 + 0 + 0 = 4)#
chmod 744 hello.java # -rwxr--r--

hello=codestates export urclass-"is good" export bad_example-this is bad exampleecho $hello echo $urclass echo $bad_example 1). cd~를 입력하여 홈 디렉토리로 이동한 다음, ls-al를 통해 홈 내에 존재하는 모든 것들을 숨겨진 파일과 디렉토리까지 조회한다.
2). 조회 결과에 따라 아래의 명령어를 입력하여 편집창을 연다.
- 목록에 .zshr가 있으면 nano .zshrc를 입력하여 편집창을 연다.
- 목록에 .bashrc가 있으면 nano .bashrc를 입력하여 편집창을 연다.
- 텍스트 편집기는 nano, vi등 어떤 것을 사용하여도 무방하다.
3). 파일의 맨 아래로 이동한 다음, 설정하고자 하는 환경변수를 작성하고 저장한다.
4). source .zshrc를 입력하여 변경 내용을 적용하고, 내용을 출력해본다.
1). 먼저, 변경하고자 하는 파일의 권한을 수정하여야 한다.
- 내가 환경변수를 저장하고자 하는 파일의 이름은 루트 디렉토리(/)의 etc 디렉토리 내에 있는 profile이라는 파일이라 가정한다
- profile은 기본적으로 수정 권한이
r--r--r--로 설정되어 있어 수정이 불가능 하다.- sudo chmod 777 /etc/profile을 입력한 다음, 시스템에 적용되어 있는 비밀번호를 입력하여 권한을 변경한다.
2). nano /etc/profile을 입력하여 입력창을 연다.
- 참고로 이 명령어는 루트 디렉토리의 etc 내에 있는 profile을 nano 편집기로 여는 명령어이다.
3). 파일의 맨 아래로 이동한 다음, 설정하고자 하는 환경 변수를 작성하고 저장한다.
4). source /etc/profile를 입력하여 변경 내용을 적용하고, 내용을 출력한다.
Tip. 터미널 명령어 export를 입력하면 운영채제 내에 이미 설정되어있는 환경변수 및 export 키워드를 통해 설정한 환경 변수들의 목록을 확인할 수 있다.