Linux

장현웅·2023년 10월 31일
0

Linux OS(Operating System)란?


Linux OS는 리눅스 토발즈가 1991년 Unix를 기반으로 개발한 컴퓨터 운영 체제 중 하나로, 서버 및 개인용 컴퓨터 환경에서 많이 사용됩니다.

"Linux"라는 명칭을 특정 OS를 지칭하는 것이 아니라 Windows라는 OS 안에 Windows 98, xp, 7, 10 등 다양한 배포판 OS가 존재하는 것과 같이, Linux 커널을 기반으로 하는 Debian, Ubuntu, Redhat, CentOS, Fedora, 등 다양한 배포판(Distribution)이 존재합니다. 이러한 배포판은 Linux 커널에 다양한 소프트웨어 및 구성 요소를 추가하여 특정 용도나 사용자 요구에 맞게 조정됩니다.

Ubuntu를 공부하게 될텐데, "Ubuntu"는 Linux의 인기 있는 배포판 중 하나로, 사용자 친화적이고 커뮤니티 지원이 강한 특징을 가지고 있어, 새로운 Linux 사용자들에게 인기가 있습니다. 특히 데스크톱 및 개발 환경에서 많이 활용됩니다.

Ubuntu


Ubuntu는 리눅스 기반의 운영 체제로, 데스크톱 및 서버 환경에서 사용할 수 있으며, 다양한 소프트웨어 및 도구가 미리 설치되어 있어 사용자가 쉽게 시작할 수 있도록 설계되었습니다.

  1. 사용자 친화적
    Ubuntu는 사용자가 쉽게 사용하고 설치할 수 있도록 디자인되었습니다. 그래픽 사용자 인터페이스(GUI)가 강화되어 있으며, 대부분의 작업은 마우스와 키보드를 통해 수행할 수 있습니다.

  2. 무료 및 오픈 소스
    Ubuntu는 무료로 다운로드 및 사용할 수 있으며, 오픈 소스 라이선스 아래 개발되고 배포됩니다. 이는 소스 코드에 대한 열린 액세스 및 커뮤니티 참여를 의미합니다.

  3. 강력한 커뮤니티 지원
    Ubuntu 커뮤니티는 사용자 간의 지원 및 문제 해결을 촉진하며, 새로운 기능을 개발하고 업데이트를 제공합니다. 또한 다양한 온라인 포럼, 위키, 메일링 리스트 등을 통해 지원 및 문서화가 이루어집니다.

  4. 버전 다양성
    Ubuntu는 데스크톱 및 서버 버전뿐만 아니라 다양한 에디션과 스핀(스피닝)이 있어 다양한 사용 사례와 요구에 맞출 수 있습니다. 예를 들어, Ubuntu Server, Ubuntu Desktop, Kubuntu, Xubuntu, Lubuntu 등이 있습니다.

  5. 소프트웨어 센터
    Ubuntu 소프트웨어 센터를 통해 다양한 애플리케이션 및 소프트웨어를 손쉽게 설치하고 관리할 수 있습니다.

  6. 안정성과 보안
    Ubuntu는 안정성과 보안에 중점을 둡니다. 정기적으로 업데이트와 보안 패치가 제공되며, 서버 환경에서도 안정적으로 운영됩니다.

Linux의 특징과 Linux를 사용하는 이유


  1. 무료 및 오픈 소스
    Linux는 무료로 이용 가능한 오픈 소스 운영 체제입니다. 소스 코드가 공개되어 있어 누구나 열람하고 수정할 수 있으며, 라이선스 제약 없이 자유롭게 사용할 수 있습니다. 다만, Red Hat과 같은 기업은 기술지원 및 서비스를 제공하는 동명의 OS를 제외하고는 대부분의 Linux 배포판이 무료입니다.

  2. CLI 환경
    마우스 / 키보드를 사용해 조작하는 GUI(Graphical User Interface) 환경의 Windows, Mac과는 다르게 Linux는 기본적으로 명령줄 인터페이스(CLI)를 사용합니다. 이것은 마우스와 그래픽 인터페이스(GUI) 대신 명령어를 입력하여 시스템을 조작하는 방식을 말합니다. CLI는 전문적인 사용자 및 개발자에게 강력한 제어력을 제공합니다.

  3. 명령어 구조
    Linux 명령어는 명령어와 옵션의 구조로 이루어져 있습니다. 명령어 뒤에 원하는 옵션을 추가하여 원하는 작업을 수행할 수 있습니다. 예를 들어, "ls" 명령어로 파일 목록을 볼 수 있고, "-l" 옵션을 추가하여 더 자세한 정보를 얻을 수 있습니다.

Linux 명령어는 일반적으로 "명령어 -옵션"의 구조를 따릅니다.
명령어는 실행하려는 작업을 나타내며, 옵션은 해당 명령어가 어떻게 실행될지를 지정합니다.
2개 이상의 옵션을 함께 사용할 수 있으며, 옵션의 순서는 중요하지 않습니다.

ls  						# 현재 디렉토리의 파일 목록을 보여주는 명령어입니다.
ls -l 						# "-l" 옵션을 사용하여 파일 목록을 더 자세히 보여줍니다.
ls -a 						# "-a" 옵션을 사용하여 숨김 파일까지 보여줍니다.
ls -al 						# 여러 옵션을 함께 사용할 수 있으며, "-al"은 파일 목록을 자세히 보여주고 숨김 파일도 모두 표시합니다.

일부 명령어는 source와 destination의 구조로 이루어져 있습니다:

cp a.txt a_copy.txt 		# "cp" 명령어를 사용하여 "a.txt" 파일을 "a_copy.txt"로 복사합니다.
cp -r folder folder_copy 	# "-r" 옵션을 사용하여 디렉토리를 복사할 때 필요하며, "folder"를 "folder_copy"로 복사합니다.
  1. 안정성과 신뢰성
    Linux는 다른 운영 체제에 비해 안정성이 높은 편입니다. 많은 서버 환경에서 사용되며, 정기적으로 업데이트와 보안 패치가 제공됩니다.

  2. 커뮤니티 지원
    오픈 소스 특성 때문에 전 세계의 엔지니어들이 Linux의 소스 코드를 검토하고 개선하기 위해 노력하고 있습니다. 이로 인해 Linux는 지속적인 보안 패치 및 업데이트를 받아 안전하게 운영됩니다.

SSH 연결


SSH(Secure Shell)는 네트워크 상에 존재하는 다른 컴퓨터에 원격으로 접근하거나 파일을 업/다운로드 하는 등의 작업을 할 떄 사용하는 도구입니다.

인스턴스에 원격으로 접속하려면 인스턴스의 인바운드 규칙에 SSH 설정을 추가해줘야 합니다.

  • 인바운드 규칙
    네트워크 보안 및 방화벽 설정에서 사용되는 규칙의 일부입니다. 이 규칙은 특정 포트, 프로토콜 또는 IP 주소 범위로부터 들어오는 네트워크 트래픽을 관리하며, 어떤 유형의 연결을 수락하고 차단할 것인지 결정합니다.

이제 클라이언트의 컴퓨터에서 SSH를 사용하여 원격 서버에 접속하려면 다음과 같은 명령어를 사용해야 합니다.

ssh -i 개인키파일_이름.pem username@ip

# ssh : Secure Shell (SSH) 클라이언트를 실행하는 명령어. 네트워크를 통해 안전하게 원격 서버에 접속하고 통신하기 위한 프로토콜입니다.
# -i 개인키파일 : SSH 클라이언트에 개인 키파일을 지정하는 것. 이 개인 키파일은 인증에 사용되며, 원격 서버는 해당 개인 키를 가지고 접속을 승인합니다.
# username : 원격 서버에 접속할 사용자 이름. SSH를 사용하여 여러 사용자가 원격 서버에 접속하는 경우, 인바운드 규칙에 SSH 설정을 추가하거나 모든 IP로부터 원격 접속을 허용해주면 됩니다.
# ip : 원격 서버의 IP 주소 또는 호스트 이름. SSH 클라이언트는 이 주소를 사용하여 원격 서버와 통신합니다.




위 명령어를 다시 한번 정리해보자면, 'pem'파일을 지정해서 'ubuntu'라는 계정으로 인스턴스 IP에 ssh 연결 즉, 원격 접속을 하겠다는 의미입니다. 'ubuntu'라는 계정 이름은 EC2에서 인스턴스를 생성할 때 기본적으로 제공되는 사용자 계정입니다.

이 메시지는 SSH 클라이언트가 원격 호스트(54.180.147.182)에 접속하려는데, 해당 호스트의 공개 키나 인증서가 처음 발견되어 이 호스트의 신원을 확인할 수 없다는 것을 나타냅니다. 이 메시지는 처음 접속할 시에만 나오는 메시지입니다.

보안 경고 메시지를 확인하고 yes를 입력하여 원격 호스트(54.180.147.182)에 SSH로 성공적으로 연결되었습니다. 환영 메시지에 따르면 Ubuntu 22.04.3 LTS 서버에 접속한 것으로 보입니다.

이제 SSH 세션에서 원격 서버를 관리하거나 작업을 수행할 수 있습니다. ubuntu@ip-172-31-39-58:~$ 프롬프트는 원격 서버에서 명령을 실행할 수 있는 위치를 나타내며, 필요한 작업을 진행할 수 있습니다.

Linux 환경에서 파일과 디렉토리 다뤄보기


클라우드 인스턴스를 Ubuntu AMI를 사용하여 생성했기 때문에 SSH를 사용하여 원격으로 이 인스턴스에 접속하면, 이 인스턴스는 Ubuntu Linux 운영체제 로 설정되어 있을 것입니다.

Linux 환경에서는 디렉토리를 이동하거나 파일을 지정할 때, 상대경로 혹은 절대경로를 사용하게 됩니다.

  1. 절대경로
    절대경로는 파일이나 디렉토리의 경로를 루트 디렉토리부터 시작하여 명시하는 방식입니다.
cd /home/user/example/dir/		# cd : change directory

절대경로를 사용하면 현재 작업 디렉토리와 관계없이 항상 해당 디렉토리로 이동하거나 해당 파일을 지정할 수 있습니다.

  1. 상대경로
    상대경로는 파일이나 디렉토리의 경로를 현재 작업 디렉토리를 기준으로 지정하는 방식입니다.
cd ./dir/ 		# 현재 작업 디렉토리에 존재하는 dir 디렉토리로 이동하라는 명령입니다. ./는 현재 디렉토리를 나타내며 생략 가능합니다. 

cd ../			# 현재 위치를 기준으로 상위 디렉토리로 이동

cd ../../		# 현재 위치를 기준으로 두 단계 상위 디렉토리로 이동
  1. wild card()
    와일드카드(
    )는 파일이나 디렉토리를 지정할 때 유용하게 사용됩니다. 예를 들어, 현재 디렉토리에 'file1.txt', 'file2.txt', 'file3.txt'가 있다면 wild card(*)를 사용하여 아래와 같은 명령어로 특정 패턴과 일치하는 파일을 빠르게 찾거나 목록을 생성할 수 있습니다.
ls -l ./*.txt 		# '.txt'로 끝나는 모든 파일 목록 출력하기
  1. 디렉토리를 생성하고 이동해보기
  • mkdir / 디렉토리 생성하기 (Make Directory)
mkdir ./test 				# 현재 경로에 test 디렉토리 생성하기
mkdir ./test/test2 			# test 디렉토리 안에 test2 디렉토리 생성하기
mkdir /home/ubuntu/test3 	# /home/user 경로에 test3 디렉토리 생성하기 - 절대경로

  • pwd / 현재 경로 확인하기 (Print Working Directory)
pwd # 현재 경로 확인

  • ls / 파일 목록 보기 (list)
ls # 현재 위치에 파일 목록 보기
ls ./test # test 경로에 파일 목록 보기
ls -l # 현재 위치에 파일 목록을 더 자세히 보기
ls -a # 현재 위치에 숨겨짐 파일을 포함해서 보기
ls -al # 현재 위치에 숨겨진 파일을 포함해서 목록을 더 자세히 보기

# 이외에도 다양한 옵션들이 존재하며, ls --help 명령어로 확인 가능합니다.
# Linux에서는 .으로 시작하는 것들이 숨김파일들입니다.

파일을 생성하고 삭제해보기

  • touch / 파일 생성하기
touch test.txt 		# test.txt 파일 생성하기

  • cp / 파일 복사하기
cp test.txt test_copy.txt 		# test.txt 파일을 test_copy.txt라는 이름으로 복사하기
cp -r directory directory_copy 	# 폴더를 복사할 경우 -r 옵션 사용

  • mv / 파일 이동하기
mv ./directory1/test.txt ./ 	# directory1 경로의 test.txt 파일을 현재 경로로 이동

# mv는 파일의 이름을 변경할 때도 사용됩니다.
mv test.txt text2.txt 			# test.txt 파일의 이름을 test2.txt로 변경

  • rm / 파일 삭제하기
rm test.txt 		# test.txt 파일 삭제
rm -r directory 	# 디렉토리를 삭제하기 위해서는 -r 옵션을 붙여줘야 합니다.

  • 리눅스에서 숨김 파일을 취급하는 방법

리눅스에서는 파일 혹은 디렉토리 이름이 .으로 시작할 경우 숨김 파일로 취급됩니다. 숨김 파일은 ls 명령어의 -a 옵션으로 확인할 수 있습니다.

touch test 		# test라는 이름의 파일 생성
touch .test 	# .test라는 이름의 숨김 파일 생성

파일을 원하는대로 수정하고, 내용을 추가하기


Windows에서 파일을 수정하거나 추가할 때는 메모장이나 Visual Studio Code와 같은 텍스트 편집기를 주로 사용합니다. 이러한 텍스트 편집기는 그래픽 사용자 인터페이스(GUI)를 통해 텍스트 파일을 편집하고 수정하는 데 매우 편리합니다.

그러나 리눅스 환경에서는 터미널 기반의 텍스트 편집기인 vi 편집기도 널리 사용됩니다. vi는 다음과 같은 이유로 사용됩니다.

  1. 터미널 환경에서 사용
    리눅스 서버 또는 원격 컴퓨터에 SSH로 접속할 때 터미널 환경에서 작동하는 편집기가 필요합니다. vi는 터미널에서 사용할 수 있어 이러한 상황에 적합합니다.

  2. 가볍고 빠름
    vi는 가벼우며 빠르게 동작하므로 시스템 리소스를 효율적으로 활용합니다.

  3. 다양한 리눅스 배포판에서 사용 가능
    vi는 거의 모든 리눅스 배포판에 기본적으로 포함되어 있으므로 설치가 필요하지 않습니다.

  4. 명령 기반 작업
    vi는 명령 모드와 삽입 모드 사이를 전환하여 다양한 작업을 수행합니다. 명령 모드에서는 파일 탐색, 텍스트 삭제, 복사 및 붙여넣기와 같은 작업을 수행할 수 있으며, 삽입 모드에서는 텍스트를 편집합니다.

메모장이나 Visual Studio Code와 같은 GUI 텍스트 편집기는 사용자 친화적이지만, vi 편집기는 터미널 환경에서 강력하게 작동하여 파일을 신속하게 수정하고 편집하는 데 유용합니다.

원하는 파일을 vi로 열기 위해 터미널에서 다음과 같이 vi 명령을 입력합니다.

vi 파일이름		# 현재 디렉토리에 파일이 있는 경우 './' 생략


일단 vi 편집기를 사용하기 위해서는 이 편집기의 특징에 대해서 알아야합니다.

  1. vi 편집기 mode 종류
  • 명령 모드(Command Mode): vi는 기본적으로 "명령 모드"로 시작합니다. 명령 모드에서는 파일 탐색, 텍스트 삭제, 복사, 붙여넣기 등의 작업을 수행합니다.

  • 삽입 모드(Insert Mode): 텍스트를 입력하려면 "삽입 모드"로 전환해야 합니다. 삽입 모드에서 텍스트를 자유롭게 입력하고 편집할 수 있습니다.

  1. insert mode 진입 방법
  • i : 현재 위치에서 insert mode 진입


    삽입 모드에서 나올 때는 'ESC'를 누르면 됩니다.

  • a : 현재 위치에서 커서를 한 칸 앞으로 이동 후 insert mode 진입

  • A : 현재 위치에서 가장 마지막 텍스트로 이동 한 후 insert mode 진입

  • o : 현재 위치에서 한칸 개행 한 후 insert mode 진입

  • esc : insert mode 나가기

  1. commend mode 명령어
  • u : undo (ctrl + z와 동일)
  • ctrl + r : redo
  • gg : 커서를 가장 처음으로 옮김
  • G : 커서를 마지막 줄로 옮김
  • dd : line 잘라내기
  • yy : line 복사
  • p : 붙여넣기
  • :se nu : 라인 줄 표시
  • :숫자 : 숫자 라인으로 이동 (ex - :10 : 10번째 라인으로 이동)
  • 특정 단어 검색
    • /word : word라는 단어를 검색
    • /\cword : 대소문자를 구분하지 않고 word라는 단어를 검색 (ex - /\cword)
    • n : 다음 단어 검색
    • N : 이전 단어 검색
  • 수정한 문서 저장
    • :w : 저장
    • :q : 나가기
    • :wq : 저장 하고 나가기
    • :q! : 수정내역이 있어도 저장하지 않고 강제로 나가기

파일에 있는 내용 확인하기


  1. cat / 파일 내용 보기
cat test.txt 	# test.txt 파일의 내용을 터미널에 출력하는 명령

  1. head / 파일의 시작 부분 보기
head test.txt 		# test.txt 파일의 첫 10줄 내용 보기
head -50 test.txt 	# text.txt 파일의 첫 50줄 내용 보기

  1. tail / 파일의 끝 부분 보기
tail text.txt 		# text.txt 파일의 마지막 10줄 내용 보기
tail -50 text.txt 	# text.txt 파일의 마지막 50줄 내용 보기

패키지 매니저


파이썬으로 예제를 들면 time이나 print같은 내장 함수들은 별도의 패키지를 설치하지 않고 바로 사용 가능하지만 Flask나 Django같은 내장되어 있지 않은 패키지들은 pip 명령어를 통해 설치해서 사용합니다. 이것처럼 Linux에서 또한 내장되어 있지 않은 명령어들을 설치해주는 패키지 매니저가 존재합니다. Ubuntu에서는 APT라는 패키지 매니저를 사용하고, Linux 배포판마다 사용하는 패키지는 다릅니다.

  • apt 명령어를 사용해 패키지 설치하기

python에서 pip 명령어를 활용하여 외부 패키지를 설치하고 사용하는 것처럼,

Ubuntu에서는 apt 명령어를 사용해 외부 패키지를 설치하고 사용할 수 있습니다.

ubuntu에서 ifconfig 라는 명령어를 사용하면 ip 주소를 포함해 다양한 네트워크 정보를 확인할 수 있습니다.

하지만, 명령어를 실행시켜 보면 아래와 같은 에러가 발생하며 명령어 실행이 되지 않습니다.(ubuntu 버전에 따라 ifconfig 명령어가 기본적으로 설치 되어 있을 수도 있습니다.)

때문에 ifconfig 명령어를 사용하기 위해서는 패키지 설치가 필요합니다.

sudo apt update 	# apt install 명령어로 설치할 수 있는 패키지들을 최신화합니다.
					# sudo : 관리자 권한으로 실행시키겠다는 명령어입니다. 이 명령어 없이 패키지를 설치하려고 하면 권한이 없다는 에러가 납니다.

※ update 옵션은 os 설치 후 최초 한 번만 실행시켜 주면 됩니다.

sudo apt install net-tools


패키지 설치 이후 ifconfig 명령어를 실행시켜 보면 네트워크 정보를 확인할 수 있습니다.

Linux의 자주 사용되는 명령어


일단 디렉토리를 비워주겠습니다.

rm -rf ./*

그리고 명령어 테스트를 위해 깃헙에서 아무 프로젝트 하나를 받아오겠습니다.

  1. grep / 특정 문자열이 포함 된 파일 찾기
grep word ./* 		# 현재 경로의 모든 파일을 대상으로 word라는 단어가 포함된 파일 찾기
grep word ./* -r 	# -r 옵션을 붙이면 현재 디렉토리에서 시작하여 모든 파일과 하위 디렉토리에서 "word"라는 문자열을 탐색합니다. 


  1. find / 특정 조건의 파일 찾기
find / -name "*.txt" 			# 최상위 경로에서 .txt로 끝나는 파일 혹은 디렉토리 검색
find ./ -type d 				# 현재 경로에서 모든 디렉토리 검색
find ./ -type f -name "*.txt" 	# 현재 경로에서 .txt로 끝나는 파일 검색




  1. htop / 리소스 사용량 확인하기
htop 	# 현재 실행중인 프로세스들을 보여주고 리소스를 얼마나 사용중인지 확인하는 명령어입니다.


보면 현재 리소스의 여유가 있어보이지만, 나중에 프로젝트를 도커에서 실행하다보면 Linux에서 작업 속도가 느려질 때가 있습니다. 그럴 땐 htop명령어를 사용해서 상태를 파악해서 조취를 취할 수 있습니다.

나가고 싶을 때는 'Ctrl C'

  1. df / 남은 디스크 용량 확인하기
df -h 		# 디스크 여유 공간 확인하기

  1. du / 특정 파일 혹은 폴더가 사용중인 디스크 용량 확인하기
du -sh ./* 		# 현재 경로의 파일 및 디렉토리가 차지하는 용량 확인하기

  1. history / 명령어 기록 출력하기
history 		# 지금까지 사용한 명령어 출력

지금까지 Linux OS에 대해서 가볍게 알아봤습니다.

0개의 댓글