코드스테이츠

[코드스테이츠 BE 45기] <Section1> Week1 (Linux 기초)

codingbug 2023. 4. 13. 22:50

 CLI 기본 명령어


1. 
GUI
 : 그래픽 사용자 인터페이스(Graphic User Interface), 컴퓨터를 사용할 때 적용되는 컴퓨터 제어 방식
CLI
 : 명령줄 인터페이스(Command-Line Interface), 명령어로 컴퓨터를 제어하는 방식

pwd: 현재 위치를 확인하는 명령어

pwd


mkdir: 새로운 폴더를 생성하는 명령어

mkdir helloWorld


ls: 폴더나 파일의 목록을 출력하는 명령어

ls


cd: 폴더에 진입하는 명령어

cd helloWorld


touch: 파일 생성하기

touch hi.txt


> : 실행 결과를 파일로 저장하기

echo class_is_codingbug@gmail.com > hi.txt


cat: 파일의 내용을 터미널에 출력하는 명령어

> cat hi.txt
class_is_codingbug@gmail.com


rm: 폴더나 파일을 삭제하는 명령어
명령어 rm은 폴더나 파일을 삭제할 때 사용 (변경사항을 확인하기 위해서 명령어 ls를 자주 입력하면 도움됨)

ls
bye bye.txt


명령어 rm으로 삭제한 폴더나 파일은 휴지통을 거치지 않고 삭제됨

rm bye.txt
ls
bye


명령어 rm으로 파일을 지운 뒤 명령어 ls를 입력하면 폴더 "bye"만 출력됨. 남아있는 폴더 "bye"도 마저 삭제.

rm bye
rm: bye: is a directory
ls
bye


명령어 rm은 단일 파일을 삭제할 수 있음. 만약 폴더를 삭제하려면 옵션을 이용해야 함.

rm -rf bye
ls # 아무것도 출력되지 않습니다.


mv: 폴더나 파일의 위치를 이동하거나, 이름을 변경하는 명령어
명령어 rm으로 삭제한 폴더 "bye"와 파일 "bye.txt"를 다시 생성

mkdir bye
touch bye.txt


명령어 mv를 통해 파일 "bye.txt"를 폴더 "bye"로 옮깁니다. 명령어 mv 뒤에는 순서대로 [폴더나 파일의 이름] [도착 폴더의 이름]를 입력

mv bye.txt bye/
ls
bye


폴더 "bye"로 이동하여, 파일 "bye.txt"가 잘 옮겨졌는지 확인

cd bye
ls
bye.txt


명령어 mv를 이용하면 폴더나 파일의 이름을 변경할 수 있음
mv [변경할 폴더나 파일의 이름] [변경하고자 하는 파일의 이름]

mv bye.txt helloWorld.txt
ls
helloWorld.txt

cp: 폴더나 파일을 복사하는 명령어
copy의 약자로 폴더나 파일을 복사할 때 사용
cp [원본 파일 이름] [복사할 파일 이름]

ls
helloWorld.txt
cp helloWorld.txt hiComputer.txt
ls
helloWorld.txt hiComputer.txt


폴더를 복사하기 위해 명령어 cd를 이용해 상위 폴더 "hello"로 이동
CLI에서 .은 현재 폴더를 나타내고, ..은 현재 폴더보다 앞에 있는 폴더를 가리킴

cd ..
ls
bye
pwd
/home/codingbug/helloWorld/hello


폴더 "bye"를 복사해 새로운 폴더 "hi"를 만들기
명령어 cp를 이용해 폴더를 복사할 때에는 옵션-r이 반드시 포함되어야 함

cp -rf bye hi
ls
bye hi



2. 관리자 권한과 경로

절대 경로와 상대 경로

절대경로(pwd)
 : /home/[username]/helloWorld/hello/


상대 경로
 : 특정 폴더 또는 파일의 위치를 현재 위치를 기준점으로 나타냄
   현재 위치한 폴더는 점(.)으로 표현하고, 상위 폴더는 두 개의 점(..)으로 표현
   cd ./hi # 현재 폴더 아래의 hi 폴더로 진입하는 명령

pwd
/home/codingbug/helloWorld/hello/hi
ls
helloWorld.txt hiComputer.txt


현재 폴더 아래에 있는 파일 helloWorld.txt를 폴더 helloWorld로 이동

mv helloWorld.txt ../../
ls
hiComputer.txt
cd ../../
pwd
/home/codingbug/helloWorld/
ls
hello helloWorld.txt hi.txt



관리자(root) 권한
 : 절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역

  일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없음
  루트폴더로 이동하여 명령어 mkdir을 이용해 폴더 test를 생성하면 "Read-only file system" 이라는 에러 발생 (읽기 전용(Read-only)이라는 말은 폴더나 파일을 생성, 변경 또는 삭제할 수 없다는 의미)

명령어 whoami를 입력하여 현재 로그인된 사용자를 확인(명령어 whoami를 통해 확인할 수 있는 사용자는 폴더의 형태로 존재)

whoami
codingbug

 

sudo: 관리자 권한을 획득하는 명령어 (명령어 sudo는 사용자가 관리자 권한을 일시적으로 획득하는 명령어)

명령어 ls -l을 통해 특정 폴더나 파일이 사용자 또는 관리자의 소유로 생성되었는지 확인할 수 있음
하나는 명령어 mkdir만 사용, 다른 하나의 폴더는 명령어 mkdir 앞에 명령어 sudo를 추가해 폴더를 생성(명령어 sudo는 기본적인 CLI 명령어의 앞에 작성하여, 관리자 권한을 일시적으로 획득하는 명령어)
명령어 sudo는 한시적으로나마 관리자 권한을 가지기 때문에 항상 비밀번호와 함께 사용

mkdir justMkdir
sudo mkdir sudoMkdir
password:
ls
hello  justMkdir  sudoMkdir


명령어 ls -l을 이용해 사용자 권한으로 생성된 폴더와 관리자 권한으로 생성된 폴더 차이점을 확인

ls -l
codimgbug codimgbug 4096 Apr 13 16:37 justMkdir
root          root           4096 Apr 13 16:37 sudoMkdir


텍스트 에디터 nano

nano 실행
nano hello.java  # hello.java를 nano에서 열기

nano 화면 살펴보기

(A) 파일 이름 안내&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(B) 파일 편집 화면, 실제로 여기서 텍스트 파일을 편집할 수 있음&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(C) 사용에 필요한 각종 단축키 (화면에 표시된 ^X와 같은 내용은 Ctrl + X 키 조합을 의미)


파일 열기

nano 파일이름


파일 편집 후 종료
파일 내용을 편집하고 난 후, 아래와 같이 ^X를 누르면 다음과 같은 프롬프트가 등장

단축키 안내에 따라 키보드의 Y 와 N을 눌러서 저장 여부를 결정할 수 있음

Save modified buffer (ANSWERIG "No" WILL DESTROY CHANGES) ?

 


파일 저장
^O WriteOut 파일을 저장하는 단축키

 

 


패키지와 패키지 매니저



리눅스 운영체제의 패키지와 패키지 매니저는 포장된 상품과 온라인 쇼핑몰 같은 역할

패키지
 : 여러 파일을 모아 하나의 파일로 저장하고 있는 압축파일


패키지 매니저
 : 패키지의 설치, 변경, 삭제 등 관리를 편리하게 해주는 도구입니다. 패키지 매니저를 스마트폰으로 비유하면, 앱 스토어와 그 역할이 비슷
  모든 패키지의 저장소 위치를 저장하고 있습니다. 사용자가 패키지 매니저에게 특정 프로그램의 설치를 요청하면, 패키지  매니저는 패키지가 저장된 위치에서 패키지를 다운로드해 설치 프로그램을 실행
설치된 모든 프로그램의 업데이트를 확인하거나, 필요 없는 프로그램을 제거하는 데에도 사용할 수 있음

Ubuntu : Ubuntu 패키지 매니저 - apt
Mac OS : Mac OS 패키지 매니저 - brew

apt(brew) update: 패키지의 업데이트 여부 확인

apt show: 프로그램의 정보 확인

apt list --upgradable: 업데이트 필요한 파일 조회
brew outdated: 업데이트 필요한 파일 조회
apt(brew) upgrade: 프로그램 업그레이드
brew info: 프로그램의 정보 확인
apt(brew) install: 프로그램 설치

apt list --installed: 설치된 프로그램 목록 보기
brew list: 설치된 프로그램 목록 보기

apt remove: 프로그램 삭제
brew uninstall: 프로그램 삭제

apt search : 패키지 검색

 

apt 명령어 이용하기

apt

 

<apt 패키지 매니저의 주요 명령어>

패키지 목록 갱신: apt update(관리자 권한 필요)
   패키지를 다운로드할 수 있는 여러 저장소의 최신 정보를 업데이트. 새로운 저장소를 추가하거나 패키지를 설치하기 전,     최신 정보를 갱신. (설치된 프로그램이 새로운 버전으로 변경되지 않음)
업그레이드 가능한 패키지 목록을 출력: apt list -—upgradable
전체 패키지 업그레이드(버전 업): apt upgrade (관리자 권한 필요)
특정 패키지만 업그레이드(버전 업): apt --only-upgrade install 패키지 이름 (관리자 권한 필요)
패키지 설치: apt install 패키지 이름 (관리자 권한 필요)
설치된 패키지 보기: apt list --installed
패키지 검색: apt search 검색어
패키지 정보 확인: apt show 패키지 이름
패키지 삭제: apt remove 패키지 이름 (관리자 권한 필요)

관리자 권한 사용하기
wget을 설치(wget은 URL을 통해 파일을 다운로드하는 프로그램)
wget -O goodjob.txt https://bit.ly/37sJqCo
복사: Ctrl + Shift + C
붙여넣기: Ctrl + Shift + V

 

 

 

사용 권한


 

Read, Write, Execute 권한


1 폴더인지 파일인지 확인하기
  : 폴더와 파일을 생성하기 위해 명령어 mkdir 과 nano 를 이용

mkdir linux
nano hello.java
<nano실행>
lass Hello {
 public statics void main(String[] args) {
  System.out.printf("Hello CodeStates!");
 }
}

코드를 작성한 다음 Ctrl + X, Y, Enter 를 순서대로 입력하면, 새로운 파일을 저장할 수 있음 

 -> 폴더 하나와 파일 하나를 각각 생성 완료


2 ls -l

-rw-r--r--  1 codingbug codingbug 105   Apr  13 17:44 hello.java
drwxr-xr-x  2 codingbug codingbug 4096  Apr  13 17:40 linux
  • 파일 hello.java는 -rw-r--r-- 이라고 출력되었고, 폴더 linux는 drwxr-xr-x 라고 출력
  • 첫 시작인 - 와 d 는 각각 not directory와 directory를 나타냄 -> 폴더이면 d로, 파일이면 - 로 나타냄
  •  r, w, x는 각각 read permission, write permission, execute permission으로 읽기 권한, 쓰기 권한, 실행 권한을 나타냄  (3번에 걸쳐 나타나는 이유는 사용자와 그룹, 나머지에 대한 권한을 표시)

파일 hello.java의 권한 rw-r--r--은 소유자

 : 읽기와 쓰기가 가능하고, 다른 사용자 그룹은 읽기만 가능

폴더 linux의 권한은 rwxr-xr-x

 : 소유자는 읽기와 쓰기, 실행이 가능하고, 다른 사용자 그룹은 읽기와 실행만 가능

 

3 user, group, and other
user
 : 파일의 소유자. 기본적으로 파일을 만든 사람이 소유자가 됨
group
 : 여러 user가 포함될 수 있음. 그룹에 속한 모든 user는 파일에 대한 동일한 group 액세스 권한을 갖음
other
 : 파일에 대한 액세스 권한이 있는 다른 user. 파일을 만들지 않은 다른 모든 user를 의미

4 chmod: 권한을 변경하는 명령어
: 명령어 chmod를 사용하여 폴더나 파일의 읽기, 쓰기, 실행 권한을 변경할 수 있음


· OS에 로그인한 사용자와, 폴더나 파일의 소유자가 같을 경우
  : 명령어 chmod 로 폴더나 파일의 권한을 변경
· OS에 로그인한 사용자와, 폴더나 파일의 소유자가 다를 경우
  : 관리자 권한을 획득하는 명령어 sudo 를 이용해 폴더나 파일의 권한을 변경


·명령어 chmod 로 권한을 변경하는 방식
- 더하기(+), 빼기(-), 할당(=)과 액세서(accessor) 유형을 표기해서 변경하는 Symbolic method
- rwx를 3 bit로 해석하여, 숫자 3자리로 권한을 표기해서 변경하는 Absolute form

 

Access class Operator    Access  Type
u (user) + (add access) r (read)
g (group)  - (remove access) w (write)
o (other)  = (set exact access) x (execute)
a (all: u, g, o)    

 <Symbolic method는 액세스 클래스, 연산자, 액세스 타입으로 구분>

· 명령어 chmod 뒤에 변경할 권한을 입력

액세스 클래스의 u, g, o, a를 변경할 조건에 따라 조합하여 입력하고, 연산자와 액세스 타입을 순서대로 입력

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까지 나타내는 3 bits의 합으로 표기
사용자, 그룹, 또는 다른 사용자나 그룹마다 rwx 가 나타나고, 각 영역의 boolean 값으로 표기

Permission Number
Read (r) 4
Write (w) 2
Execute (x) 1

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--
# Sum rwx Permission
7 4(r) + 2(w) + 1(x) rwx read, write, execute
6 4(r) + 2(w) + 0(-) rw- read, write
5 4(r) + 0(-) + 1(x) r-x read and execute
4 4(r) + 0(-) + 0(-) r— read only
3 0(-) + 2(w) + 1(x) -wx write, execute
2 0(-) + 2(w) + 0(-) -w- write only
1 0(-) + 0(-) + 1(x) —x execute only
0 0(-) + 0(-) + 0(-) —- none

<Absolute form에서 사용하는 숫자>

 

 

환경변수



환경에 따라 프로그램의 동작에 영향을 줄 수 있는 값들

Linux & Mac OS에서 환경변수 설정하기

1 환경변수 임시 적용하기
  : 임시적으로만 적용하는 방법이며, 터미널을 종료하면 환경변수가 자동으로 삭제됨

지역 환경변수
 : 환경변수를 생성한 특정 사용자만 사용할 수 있는 환경변수
   등호 표시(=) 앞뒤에는 반드시 공백이 없어야 함

hello=codestates


전역 환경변수
 : 모든 사용자가 사용할 수 있는 환경변수
   명령어 export 를 이용하여 새로운 환경변수 추가
   새로운 환경변수 urclass="is good" 을 설정

export urclass="is good"
export bad_example=this is bad example


전역 및 지역 환경변수의 개별 값 확인하기
 : 설정한 환경변수의 값은 명령어 echo로 확인할 수 있음
   환경변수의 앞에는 달러사인($)을 입력 (달러사인: $ 뒤의 문자열이 환경변수라는 의미를 터미널에 전달)

echo $hello
echo $urclass
echo $bad_example


환경변수 영구 적용하기


지역 환경변수 영구 적용하기


1 cd ~를 입력하여 홈 디렉토리로 이동 -> ls -al을 통해 홈 내에 존재하는 모든 것들을 숨겨진 파일과 디렉토리까지 조회
2 조회 결과에 따라 명령어를 입력 -> 편집창 열기
- 목록에 .zshrc가 있으면 nano .zshrc를 입력
- 목록에 .bashrc가 있으면 nano .bashrc를 입력

nano .bashrc(zshrc)


3 파일의 맨 아래로 이동 -> 설정하고자 하는 환경변수를 작성하고 저장

export LOCAL_EXPERIMENTAL_VARIABLE="This is local experimental variable"


4 source .bashrc(zshrc)를 입력 -> 변경 내용 적용 후 내용 출력

전역 환경변수 영구 적용하기

 

1 변경하고자 하는 파일의 권한을 수정
  환경변수를 저장하고자 하는 파일의 이름은 루트 디렉토리(/)의 etc 디렉토리 내에 있는 profile이라는 파일
- profile은 기본적으로 수정 권한이 r--r--r--로 설정되어 있어 수정이 불가
- sudo chmod 777 /etc/profile을 입력한다음, 시스템에 적용되어져 있는 비밀번호를 입력하여 권한을 변경

sudo chmod 777 /etc/profile


2 nano /etc/profile을 입력하여 입력창 열기
- 루트 디렉토리의 etc 내에 있는 profile을 nano 편집기로 여는 명령어임
- 지역 환경변수를 설정하는 방법과 유사

nano /etc/profile