[Linux] 기초

Nakjoo·2022년 12월 19일
0

[SEB_BE_43]

목록 보기
2/29

본인은 Mac OS이기 때문에 사전에 설치해둔 iterm2로 실습을 진행하였다.

1. CLI 기본 명령어(1)

1.1. 프롬프트(Prompt)

터미널은 CLI(Command-Line Interface)이다. 즉 입력하는 글자와 출력되는 글자로 컴퓨터와 소통한다. 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간을 프롬프트라고 한다

1.2. pwd

pwd는 print working directory의 약자로 여기서 말하는 디렉토리(directory)는 폴더라고도 한다. 즉, pwd를 사용하면 현재 경로를 알 수 있다.

pwd

1.3. mkdir

CLI에서 폴더를 생성하기 위해 사용하는 명령어인 mkdir은 make directories의 약자이다. mkdir은 생성할 폴더의 이름을 함께 입력해야한다.

mkdir helloWorld

1.4. ls

명령어 ls는 list의 약자로, 특정 폴더에 포함된 파일이나 하위 폴더의 리스트를 출력한다.

ls

ls에는 자주 사용하는 옵션 la가 있다. 옵션을 사용하는 경우에는 - 뒤에 사용하고 싶은 옵션을 사용하면 된다.
여기서 a는 "all"이라는 의미로 숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력한다. l은 폴더나 파일의 포맷을 전부 표현하라는 의미이다.

1.5. cd

명령어 cd는 change directory의 약자로, 프롬프트로 상호작용하는 폴더를 다른 폴더로 변경한다는 의미이다. 변경하고 싶은 폴더를 cd 뒤에 입력하면 된다.

cd helloWorld

1.6. touch

파일을 만들기 위해서 touch라는 명령어를 사용한다. 아래에 명령어를 통해 "hi.txt"파일을 만들 수 있다.

touch hi.txt

1.7. >

>를 사용하면 실행결과를 파일로 저장할 수 있다. 예를 들어, ls > ls.txt를 입력하면 ls.txt에 ls 명령어의 실행 결과가 저장된다.

ls > ls.txt

1.8. cat

명령어cat은 파일의 내용을 터미널에 출력해 파일의 내용을 확인할 때 사용한다.

cat hi.txt

2. 기본 명령어(2)

2.1. rm

명령어 rm은 폴더나 파일을 삭제할 때 사용한다.

rm hi.txt

명령어 rm의 뜻은 remove(삭제하다)이다. 명령어 rm을 삭제한 폴더나 파일은, 휴지통을 거치지 않고 삭제된다.

여기서 폴더를 삭제하려면 단순히 rm만 사용하면 안되고 옵션을 사용해서 삭제해야 한다.

rm -rf helloWorld

옵션 r은 "recursive"를 뜻하며, f는 "force"를 뜻한다. 옵션 r은 폴더를 지울 때 사용하고, 옵션 f는 질문을 받지 않고 지울 때 사용한다.

2.2. mv

명령어 mv는 move의 약자로, 폴더나 파일을 이동할 때 사용한다.

mv bye.txt bye/

mv 뒤에는 순서대로 [폴더나 파일의 이름] [도착 폴더의 이름]을 입력한다.
mv는 폴더나 파일을 이동할 때 사용하지만, 폴더나 파일의 이름을 변경할 때도 사용이 가능하다.

mv byt.txt helloWorld.txt

2.2.1. 컴퓨터가 파일을 옮기거나 복사하는 방법

컴퓨터는 옮기려고 하는 폴더나 파일을 잠시 저장해두고 원래 위치에 있는 폴더나 파일을 삭제한다. 그 다음, 이동하려는 도착 폴더에 저장해둔 내용으로 새로운 파일을 생성한다.

  • 컴퓨터가 파일을 옮기는 방법
    a. 파일의 내용을 잠시 저장한다.
    b. 원래 위치의 파일을 삭제한다.
    c. 도착 폴더에 1에서 저장한 내용으로 새로운 파일을 생성한다.

만약 명령어 mv에 입력하는 폴더나 파일의 위치와 도착 폴더의 위치가 같은 경우에도 파일을 삭제하고 다시 만들까?

폴더나 파일의 이름의 내용과 위치가 같고, 이름만 다른 경우에는 새로운 파일을 생성하는 일은 분명 비효율적이다. 그래서 컴퓨터는 폴더나 파일을 삭제하고 새롭게 작성하는 대신, 폴더나 파일의 이름만 변경한다.

파일을 복사하는 경우에는 파일을 옮기는 과정 중에서, 원래 위치의 파일을 삭제하는 과정이 제외된다.

  • 컴퓨터가 파일을 옮기는 방법
    a. 파일의 내용을 잠시 저장한다.
    b. 원래 위치의 파일을 삭제한다.
    c. 도착 폴더에 1에서 저장한 내용으로 새로운 파일을 생성한다.

2.3 cp

명령어 cp는 copy의 약자로, 폴더나 파일을 복사할 때 사용한다.
파일을 복사하기 위해서는 cp [원본 파일 이름] [복사할 파일 이름]을 프롬프트에 입력한다.

cp helloWorld.txt hiComputer.txt

폴더를 복사하기 위해서는 마찬가지로 옵션을 사용하면 된다.

cp -rf bye hi

3. 관리자 권한과 경로

3.1. 사용자와 관리자

컴퓨터의 운영체제에는 사용자와 관리자가 있다. 사용자는 우리가 일상적으로 PC를 켜서 바탕화면에 진입하기 위해 로그인하는 계정이다. 그리고 관리자는 사용자가 접근할 수 없는 영역에 접근할 수 있는 높은 권한을 가지고 있다.

분명 PC의 주인은 사용자일 텐데, 왜 관리자가 별도로 필요할까?

우선 관리자는 프로그램을 설치하거나 변경 또느 삭제하는 권한을 가지고 있고, 사용자는 프로그램을 실행할 수 있지만, 변경할 수 없도록 제한된 권한을 가지고 있다.

만약 관리자 권한이 없다면 개발에 대한 지식이 없는 일반 사용자가 정보를 탈취당하는 일이 발생할 수 있다. 예를 들어 해킹이나 악성코드, 블루 스크린 등이 여기에 해당된다.

이를 해결하고자 MS는 윈도우 Vista에 "사용자 계정 컨트롤"을 탑재했다. 사용자 계정 컨트롤(UAC, User Account Control)은 시스템을 관리하는 관리자와, 일상적으로 PC를 사용하는 사용자를 구분한다. 이 기술은 사용자가 모르는 사이에 시스템 설정을 변경하는 악성코드가 실행될 때, 접근 권한을 막아 사용자를 보호하게 된다.

윈도우의 사용자 계정 컨트롤로 하나의 PC에서 여러 사용자를 등록할 수 있게 되었다.
리눅스 기반의 운영체제에서도 사용자 계정 컨트롤이 있다. 정확히는 리눅스 기반의 운영체제에서 먼저 사용자와 관리자를 구분하였다.

Ubuntu를 처음 설치하거나, mac OS 기반의 PC를 구매한 직후 처음으로 전원을 켤 때, 사용자를 등록해야 한다. 윈도우처럼 관리자 권한을 이용하면 사용자를 추가, 변경, 삭제할 수 있다.

리눅스 기반의 운영체제 중 Ubuntu에서는, 사용자가 절대 관리자 권한에 접근할 수 없도록 구분해두었다.

그러나 새로운 프로그램을 설치하거나 변경 또는 삭제할 때에 관리자 권한이 반드시 필요하기 때문에, 특정 명령어를 입력하는 것으로 잠시 관리자 권한을 빌려올 수 있다.

3.2. 절대 경로와 상대 경로

경로는 pwd로 확인할 수 있는 절대 경로와, 현재 위치로부터 상대적인 위치를 나타내는 상대 경로로 나뉜다.

절대 경로는 기준점으로부터의 절대적인 위치를 나타내는데, 이 기준점을 루트폴터(/)라고 한다. 정리하면, 절대 경로는 특정 폴더나 파일이 루트 폴더로부터 어떤 폴더로 진입하는 경우 만날 수 있는지 나타낸다.

  • macOS의 경우

/Users/[username]/helloWorld/hello/라는 경로를 예시로 들어보자.

루트폴더(/)에는 폴더 Users가 있다. 폴더 Users로 진입 하면, 폴더 [username]을 확인할 수 있고 폴더 [username]에 진입하면, 폴더 helloWorld가 있고, 폴더 helloWorld에 진입하면 폴더 hello를 발견할 수 있다. 이 과정을 한줄로 줄여놓은 구문(/Users/[username]/helloWorld/hello/)이 절대 경로이다.

상대 경로는 특정 폴더 또는 파일의 위치를 현재 위치를 기준점으로 나타낸다. 현재 위치한 폴더는 점(.)으로 표현하고, 상위 폴더는 두 개의 점(..)으로 표현한다.

현재 폴더 아래의 폴더로 진입하려고 한다면 명령어 cd를 이용할 수 있다. 점(.)은 현재 폴더를, 슬래시(/)는 폴더 내부를 나타낸다. 따라서 ./는 "현재 폴더 아래의"라는 뜻이 된다.

cd ./hi
# 현재 폴더 아래의 hi 폴더로 진입한다.

3.3. 관리자 권한

절대 경로의 기준점인 루트폴더(/)는 Linux의 관리자 영역이다. 일반 사용자의 권한으로는 어떤 폴더나 파일도 생성, 변경, 삭제할 수 없다.

Linux 관리자의 가장 큰 특징은, 어떤 일이 있더라도 일반 사용자에게 관리자 권한을 완전하게 넘기지 않는다. 사용자가 관리자 권한을 필요로 하는 경우는 새로운 프로그램을 설치하거나, 프로그램을 변경 또는 삭제하는 경우이기 때문에, 해당 프로그램을 설치, 변경 또는 삭제할 수 있는 관리자 권한만 전달한다.

3.4 sudo

명령어 sudo는 사용자 환경에서, 관리자 권한을 획득하는 명령어이다.

sudo mkdir sudoMkdir

명령어 sudo를 이용해 생성한 폴더의 소유자는 루트이다. 다시 말해 사용자 권한이 아니라, 관리자 권한으로 생성되었다는 뜻이다.

4. 패키지와 패키지 매니저

패키지는 여러 파일이 담겨있는 하나의 상자이다. 리눅스의 패키지는 여러 파일을 모아 하나의 파일로 저장하고 있는 압축파일이다. 하나의 패키지는 어떤 파일로 구성될까? 패키지 안에 들어 있는 파일의 구성은 기본적으로 다음과 같다.

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

패키지 안에는 하나의 프로그램이 정상적으로 설치되고 동작하기 위한 모든 파일이 압축되어 있다. 패키지 매니저를 사용하지 않고 프로그램을 독립적으로 설치하는 데에는 한 가지 큰 단점이 있다. 여러 프로그램을 개별로 설치하기 위해는 각각의 프로그램이 저장된 위치를 모두 알아야한다.

이런 단점을 보완하기 위한 도구가 바로 패키지 매니저이다.

패키지 매니저는 패키지의 설치, 변경, 삭제 등 관리를 편리하게 해주는 도구이다. 패키지 매니저를 스마트폰으로 비유하면, 앱스토어와 그 역할이 비슷하다.

MacOS 운영체제에서는 Homebrew 패키지 매니저를 사용하면 된다.

5. 사용 권한

5.1. 폴더인지 파일인지 확인하기


ls -l을 사용하면 이와 같이 맨 왼쪽에 이상한 영어와 기호들이 있는 것을 볼 수 있다. 이것은 표현식으로 이 폴더나 파일의 사용 권한을 알 수 있다.
가장 첫 번째에 있는 -d는 각각 not directory와 directory를 나타낸다. 즉, -이면 파일이고, d이면 폴더인 것이다.

이어지는 r, w, x는 각각 read permission, write permission, execute permission으로 읽기 권한, 쓰기 권한, 실행 권한을 나타낸다. 3번에 걸쳐 나타나는 이유는 사용자와 그룹, 나머지에 대한 권한을 표시하기 때문이다.

따라서 hello.java의 권한 rw-r--r--은 소유자는 읽기와 쓰기가 가능하고 , 다른 사용자 그룹은 읽기만 가능하다는 뜻이다. 폴더 linux의 권한은 rwxr-xr-x으로, 소유자는 읽기와 쓰기, 실행이 가능하고 다른 사용자 그룹은 읽기와 실행만 가능하다.

5.2. user, group, other

user:

  • user는 파일의 소유자이다. 기본적으로 파일을 만든 사람이 소유자가 된다.

group:

  • group에는 여러 user가 포함될 수 있다. 그룹에 속한 모든 user는 파일에 대한 동일한 group 액세스 권한을 갖는다.

other:

  • 파일에 대한 액세스 권한이 있는 다른 user이다. 파일을 만들지 않은 다른 모든 user를 의미한다. 따라서 other 권한을 설정하면, 해당 권한을 global 권한 설정이라고 볼 수도 있다.

6. 환경변수

환경변수는 프로그램의 동작에 영향을 미치는 값들을 의미한다.

예를 들어, A라는 프로그램을 만들었는데, 이 A라는 프로그램은 B라는 폴더에 저장된 어떤 값을 읽어와 작업에 사용한다고 가정해보자. 이때, 프로그램 A는 폴더 B의 위치를 파악할 수 있어야 한다.

만든 프로그램에 경로를 입력해주면 그만이지만, 만약 프로그램 A를 다른 사람의 컴퓨터에서 사용한다면 어떻게 될까? 물론 폴더 B가 자신의 컴퓨터에서와 동일한 경로에 위치한다면 문제 없이 폴더 B를 찾을 수 있겠지만, 그렇지 않은 경우 폴더 B를 찾을 수 없어 프로그램 A는 정상적으로 동작 할 수 없다.

이처럼 환경에 따라 프로그램의 동작에 영향을 줄 수 있는 값들을 환경변수라고 한다.

0개의 댓글