Linux (2)

 

 

 

이 글은 MacOS를 기준으로 작성되었습니다.

 

 

 

○ 패키지와 패키지 매니저

 

리눅스에서 패키지는 포장된 상품 패키지 매니저는 온라인 쇼핑몰

여러 파일을 담고있는 하나의 파일이 패키지

패키지의 구성

  • 프로그램 파일
  • 프로그램 설치 파일
  • 프로그램 설치 설명서
  • 프로그램에 대한 정보를 담은 파일

 

패키지에는 프로그램을 설치하기 위한 다른 프로그램 설치 파일 정보도 포함

 

 

 

MAC 패키지 매니저 : Homebrew

 

https://brew.sh/

 

Homebrew

The Missing Package Manager for macOS (or Linux).

brew.sh

 

 

 

 

애플 실리콘(M1) 사용 시 주의사항

기존 인텔 칩과 다른 ARM 아키텍처 사용하므로 인텔 칩 기준으로 만들어진 프로그램은 호환하지 않을 수 있음

→ 해결: 에뮬레이션 환경 Rosetta 설치

 

softwareupdate --install-rosetta

 

※ 현재 사용중인 프로세서(칩셋) 확인 명령어

uname -p

☞ arm : M1 칩셋

brew 명령어 전에 arch -x86_64 붙여줘야 함

arch -x86_64 brew install 설치할프로그램

 

 

 

 

 Read, Write, Execute 권한

 

 

drwxrwxrwx

 

프롬프트에  ls -l  입력했을 때

 

 ▷  -rw-r--r-- : -는 not directory라는 의미, 파일

 ▷  drwxr-xr-x : d는 directory라는 의미, 폴더

 ▷ 첫글자 뒤에 이어지는 r, w, x는  각각 읽기 권한(read permission), 쓰기 권한(write permission), 실행 권한(excute permission)

 ▷ 3번에 걸쳐 나타나는 이유? 순서대로 사용자와 그룹, 나머지에 대한 권한 표시

 

 

 

user, group, other

 

 ▷ user : 파일의 소유자, 파일을 만든 사람이 소유자가 됨

 ▷ group : 여러 명의 user 포함 가능, 그룹에 속한 모든 유저는 파일에 대한 동일한 권한 가짐, 많은 사람이 파일에 엑세스 해야 하는 프로젝트에서 여러명을 그룹에 추가하여 권한 한번에 할당

 ▷ other : 파일에 대한 엑세스 권한이 있는 다른 user, 파일을 만들지 않은 모든 유저, global 권한 설정

 

 

 

 

chmod 명령어

 

  • 읽기, 쓰기, 실행 권한을 변경하는 명령어
  • 로그인한 사용자와 소유자가 같을 경우에 chmod로 권한을 변경할 수 있음
  • 소유자가 다를 경우엔 sudo 명령어를 통해 권한 변경

 

변경하는 방법 (Symbolic method, Absolute form)

 

- Symbolic method

 

u/g/o +(add access)/-(remove access)/ =(set exact acess) r/w/x

a: all

 

Access class Operator Access Type
u (user) + (권한 주기) r (읽기)
g (group) - (권한 뺏기) w (쓰기)
o (other) = (권한 지정) x (실행)
a (all: u, g, o)    

 

ex)

chmod g-w filename

☞ group 의 write 권한 뺏기

 

 

 

- Absolute form

 

  • 숫자 7까지 나타내는 3bits 의 합으로 표기
  • r : 4, w : 2, x : 1
  • 만약에 user는 rwx 를 group는 rw-, other는 r--x 로  권한 변경
  • 숫자의 합을 user, group, other 순으로 입력
  • chmod 765 hello.java

ex)

chmod 751 filename

user : 4+2+1 ( 모든 권한 부여 ), group : 4 ( 읽기, 실행 권한 부여 ), other ( 실행 권한만 부여 )

 

 

 

 

 환경변수

 

프로그램 동작에 영향을 미치는 동적인 값들의 모임

스마트폰에서 환경설정으로 시스템을 세팅하는 것과 마찬가지로 환경변수를 설정해서 프로그램이 동작하는 환경을 설정함

 

 

 

지역 환경변수와 전역 환경변수

 

지역 환경변수: 생성한 특정 사용자만 사용할 수 있음

전역 환경변수: 모든 사용자가 사용할 수 있는 환경변수, 명령어 export 사용해서 새로운 환경변수 추가

[환경 변수 이름]='변수값'

등호  앞뒤에 공백이 없어야함

저장하고자 하는 변수에 공백 존재할 시 값 전체를 따옴표로 감싸주어야함

 

▶ 환경변수의 값 확인하기

echo 명령어로 확인

echo $환경변수

환경변수 앞에 달러표시($) -> 터미널에 뒤의 문자열이 환경변수라고 전달

 

 

 

환경변수 영구 적용하기

 

영구히 적용하면 터미널을 닫거나 재부팅해도 환경변수가 저장되어 있음

 

 

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

nano .zshrc 입력하여 편집창 열기

→ ^V (next page)로 마지막 페이지로 이동한 다음 설정하고자 하는 환경변수 작성하고 저장

ex) export LOCAL_EXPERIMENTAL_VARIABLE="This is local experimental variable"

→ source .zshrc 입력하여 변경 내용 저장

→ 출력: echo $LOCAL_EXPERIMENTAL_VARIABLE

참고) source 명령어 : 스크립트 파일을 수정한 후 수정된 값을 바로 적용하기 위해 사용하는 명령어

 

 

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

1. 변경하고자 하는 파일의 권한 수정(sudo chmod )
2. 파일 편집기로 들어가서 export [전역환경변수이름]=환경변수값 입력

3. source [파일이름] 입력하여 변경 내용 저장

4. 출력 (echo)

 

 

- 생성된 환경변수의 목록으로 확인하기

export 명령어

운영체제 내에 이미 설정되어있는 환경변수와 export 명령어로 설정한 환경변수를 목록으로 확인할 수 있음

 

- Windows 운영체제에서는 환경변수를 영구적으로만 설정할 수 있음

한번 설정해두면 사용자가 삭제하기 전까지 사라지지 않음

 

 

 

 

 

참고) 파일이 클 때 cat 명령어 대신 쓰는 명령어

 

cat 명령어는 항상 파일 안의 전체 내용을 출력하기 때문에 파일 용량이 크면 잘려서 나오는 등의 문제가 있음

cat 대신 부분만 보여주는 명령어 사용

 

 

1. head

파일의 지정한 만큼의 앞부분만 출력

텍스트 기반은 내용을 보여주지만 binary로 된 파일은 알 수 없는 문자로 출력됨

head [-n lines / -c bytes] [file]

head [파일명] : 앞에서 부터 10행만 보여줌

head -n 100  [파일명] : 앞에서 부터 100행(라인)까지 보여줌

head -100 [파일명 ]: 위와 동일

head -c 100 [파일명] : 앞에서 부터 100byte의 내용만 보요줌

head -100 [파일명] > 저장할파일명 : 출력되는 파일의 내용을 추출해서 저장

 

 

2. tail

head 와는 반대로 마지막 행을 기준으로 지정한 만큼 출력

리눅스에서 오류나 파일 로그를 실시간으로 확인할 때 매우 유용하게 사용됨

tail [옵션] [파일] : 지정한 행까지 출력할 때는 옵션 -n 사용 / 특정 행 부터 마지막 행ㄲ까지 출력하고 싶을 때는 +사용 / 바이트 기준으로 할 때는 -c / 실시간으로 모니터링 할 경우 -f

tail [파일] : 파일의 끝에서부터 10행만 보여줌

 

 

3. more

파일을 읽어 화면에 화면 단위로 출력

more [파일명]

왼쪽 하단에 출력한 내용이 전체의 몇 % 인지를 표시

엔터 키를 입력하면 한 줄씩 출력

스페이스 바를 입력하면 한 화면씩 출력

 

 

4. less

less는 한 번에 보여지는 만큼만 읽어서 출력

less [파일명]

엔터 키를 입력하면 한 줄씩 출력

스페이스 바를 입력하면 한 화면씩 출력

방향키로 페이지 이동 가능

 

 

 

 

 

 

 

 

이 글은 맥 OS를 기준으로 작성되었습니다.

 

 

 

 

○ CLI 와 GUI

 

 

명령줄 인터페이스(Command-Line-Interface, CLI)

 

  • 명령어로 컴퓨터를 제어하는 방식
  • 그래픽 작업을 안 거치기 때문에 빠르고 안정적
  • AWS(Amazon Web Service) 같은 서버는 CLI 사용
  • 터미널, 도스 등

 

 

그래픽 사용자 인터페이스(Graphic User Interface, GUI)

 

  • 사용자가 편리하도록 입출력 기능을 쉽게 그래픽으로 나타내어 클릭 등으로 쉽게 컴퓨터를 제어하는 방식
  • 그래픽에 컴퓨터 자원을 사용해서 CLI 보다는 느림
  • 윈도우, 맥 등

 

 

프롬프트(Prompt)

  • 터미널에서 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간
  • CLI의 명령줄 대기모드

 

 

 

○ CLI 기본 명령어

 

 

 

※ CLI에서 명령어와 생성할 폴더 이름 사이 공백으로 구분

ex) mkdir wjcodding

 

pwd : 현재 위치 확인하기

print working directory의 약자

현재 작업중인 폴더 위치 출력

 

 

mkdir : 새로운 폴더 생성

make direcotries

 

 

ls : 특정 폴더에 포함된 파일, 폴더 확인하기

  • list의 약자
  • 자주 같이 사용하는 옵션(‘ - ‘를 이용해 옵션을 입력했다고 컴퓨터에 전달)
  • ls -l (파일의 포맷을 전부 표현)
  • ls -a (all, 숨어있는 폴더나 파일을 포함한 모든 항목 출력)
  • ls -al 또는 ls-la (옵션의 순서는 기능에 영향 미치지 않음)로 사용
  • -l 옵션에서 맨 앞에 d로 시작하는 건 폴더(directory), -로 시작하는 건 파일

 

 

open .

현재 위치를 GUI로 열음

 

 

cd

change directory의 약자

폴더로 진입

 

 

touch

파일을 생성

 

 

cat

  • 파일의 모든 내용을 터미널에 출력
  • 파일을 연달아 입력하면 순차적으로 출력
  • 크기가 큰 파일을 출력할 때는 비효율적

 

 

rm

  • remove 폴더나 파일 삭제
  • 휴지통을 거치지 않고 삭제됨
  • 파일 삭제할 떄는 'rm [파일명]' 으로 사용
  • 폴더 삭제할 때 rm [폴더명]만 입력하면 오류 뜸
  • 폴더 삭제시에는 'rm -r [폴더명]'

 

 

<자주 사용하는 옵션>

-f : force, 강제로 파일이나 폴더를 삭제하고 대상이 없는 경우에는 메시지를 출력하지 않음

-r : recursive(재귀적), 폴더 지움

-d : 비어있는 폴더들만 제거

-i : 매번 삭제할때마다 사용자에게 삭제할것인지 물어봄

-l : 3개의 이상의 파일을 삭제하거나 폴더 내부가 비어있지 않을때만 삭제할것인지 물어봄

-v : 삭제되는 대상의 정보를 출력

 

 

mv

  • move의 약자
  • 폴더나 파일의 이름 변경, 또는 위치 옮기기
  • 위치 옮기기: mv [옮길 폴더나 파일의 이름] [도착할 폴더 이름]
  • 이름 바꾸기: mv [바꿀 폴더나 파일 이름] [변경하고자 하는 이름]

 

cp

  • copy의 약자
  • 폴더나 파일 복사하기
  • 파일 복사하기: cp [원본 파일 이름] [복사할 파일 이름]
  • 폴더 복사하기: cp -rf [원본 폴더 이름] [복사할 폴더 이름]

 

 

clear

터미널 정리하기

 

 

history

이전에 사용한 명령어 확인하기

 

 

man

명령어 메뉴얼 확인하기

 

 

-h 또는 --help

명령어의 옵션 확인하기

명령어 이름만 입력해도 됨

 

 


 

 

○ 관리자 권한

 

절대 경로와 상대경로

 

절대경로

처음부터 시작하여 현재까지 절대적인 경로

기준점 : 루트 폴더(/,최상위)

' / '(root, 루트)는 Linux의 관리자 영역

Linux는 사용자와 관리자 명확히 분리

  • 사용자가 필요할 때마다 관리자권한(프로그램 변경, 설치, 삭제)만 부여받음
  • 루트폴더로 이동해서 mkdir로 폴더 생성하려하면 Read-only file system 에러(파일을 읽을 수만 있고 생성,변경,삭제는 할 수 없다는 뜻)

루트 폴더는 관리자의 영역임, 사용자 권한으로는 할 수 있는 일이 없음

현재 로그인된 사용자를 확인하는 명령어 : whoami

관리자는 사용자 폴더는 물론 시스템 자체에도 접근이 가능

관리자 권한으로 변경한 내용은 사용자 권한으로 해결 못함

 

 

상대경로

현재 위치를 기준으로 상대적인 경로

최상위(/)를 거치지 않고도 이동이 가능

 

 

사용자와 관리자

 

 

 

※ CLI 경로

.

현재폴더

 

..

현재 폴더보다 앞에 있는 폴더

 

/

경로 사이에 쓰는 슬래시는 폴더를 의미

폴더 대상일 땐 마지막 슬래시 생략 가능

~/helloWorld/hello/ 와 ~/helloWorld/hello 는 동일한 위치

 

~

현재 작업 폴더가 홈폴더라는 의미, 홈폴더로 이동하는 명령어

(Mac은 [사용자이름]@Macbook ~ %)

 

 

 

sudo

  • 사용자가 관리자 권한을 얻을 수 있는 명령어
  • 명령어 앞에 작성하면 관리자 권한으로 명령 실행
  • ex) sudo mkdir hello
  • 관리자(staff또는 root) 소유의 폴더
  • 관리자 권한으로 프로그램 설치,변경 또는 삭제하는 권한을 차단하여 시스템을 안전하게 보호
  • sudo를 사용한다고 사용자가 관리자가 되는 것은 아님!

 

 

 

 CLI 환경 에디터

 

  • vim(vi), emacs, nano 등
  • vim과 emacs는 진입장벽이 있음
  • nano는 리눅스, 맥에 기본으로 깔려있고 난이도가 쉬운 편

 

nano

실행: 'nano [파일명]' 또는 'nano' 명령어로 그냥 실행할 수 있다.

 

 

 

 

1