Information Security Study
240109 리눅스 개요, 리눅스 셸 기본 명령어 본문
리눅스의 역사
: 리눅스는 유닉스의 영향을 받았다.
- 유닉스 (Unix)
- 1960년대 후반에 벨 연구소에서 켄 톰슨과 데니스 리치에 의해 개발되었다.
- 초기 유닉스는 C언어로 작성되었다.
- 유닉스는 초기에는 비상업적인 목적으로 사용되었고 학계와 연구소에서 주로 활용되었다.
- 리눅스 (Linux)
- 1991년 핀란드의 리누스 토르발스가 개발한 운영 체제 커널이다.
- 토르발스는 유닉스와 유사한 운영 체제를 개발하고자 했다.
- 리눅스는 토르발스의 개발을 거쳐 점차적으로 커뮤니티 기반으로 성장했다.
- 개방성, 유연성, 안정성 등의 특징이 있다.
- 유닉스와 리눅스의 관련성
- 리눅스는 POSIX 호환성을 유지하고 유닉스와 유사한 명령어, 파일 시스템, 네트워킹 등을 갖추고 있다.
- 유닉스와 리눅스의 호환성은 기존 유닉스 시스템에서 리눅스로의 쉬운 이식성과 호환성을 제공했다.
- 개발 과정
- 리눅스는 오픈 소스 프로젝트로 시작되었기에 커뮤니티의 참여와 기여가 중요하다.
- 수많은 프로그래머, 개발자, 기업들이 리눅스를 발전시키고 지원하여 현재의 안정성과 기능을 갖추게 되었다.
- 현재의 상태:
- 리눅스는 서버, 임베디드 시스템, 개인 컴퓨터, 스마트폰, IoT 디바이스 등 다양한 플랫폼에서 사용되고 있다.
- 많은 기업들이 리눅스를 기반으로 한 서비스와 제품을 개발하고 있다.
Red Hat과 Debian
Red Hat 계열
- 패키지 관리 시스템
- Red Hat 계열은 RPM (Red Hat Package Manager)을 사용한다.
- 패키지 관리자는 .rpm 확장자를 갖는 바이너리 패키지들을 사용하여 소프트웨어를 설치, 업데이트 및 삭제한다.
- 패키지 관리 도구
- yum 또는 dnf를 사용하여 패키지를 관리한다.
- 이 도구들은 의존성 문제를 자동으로 처리하며 필요한 경우 다른 패키지들을 함께 설치한다.
- 설정
- Red Hat 계열은 주로 /etc/sysconfig 디렉터리를 사용하여 시스템 설정을 저장하며 대표적으로 systemd를 사용하여 시스템 초기화 및 서비스 관리를 한다.
- 배포판
- Red Hat Enterprise Linux (RHEL), CentOS, Fedora 등이 Red Hat 계열에 속한다.
Debian 계열
- 패키지 관리 시스템
- Debian 계열은 APT (Advanced Package Tool)을 사용한다.
- .deb 확장자를 갖는 바이너리 패키지들을 사용하여 소프트웨어를 설치, 업데이트 및 삭제한다.
- 패키지 관리 도구
- apt-get, aptitude, dpkg 등을 사용하여 패키지를 관리한다.
- 이 패키지 관리 도구들은 의존성 문제를 해결하는데 적합하며 더 간편한 패키지 관리를 제공한다.
- 설정
- Debian 계열은 주로 /etc 디렉터리를 사용하여 시스템 설정을 저장한다.
- systemd 또는 sysvinit를 사용하여 시스템 초기화 및 서비스 관리를 한다.
- 배포판
- Debian, Ubuntu, Linux Mint 등이 Debian 계열에 속한다.
이러한 차이점들은 각각의 운영 체제가 서로 다른 방식으로 패키지 관리, 시스템 설정, 초기화 및 서비스 관리를 수행한다는 것을 보여준다. 이는 사용자들이 어떤 운영 체제를 선택할지, 그리고 그 운영 체제를 효과적으로 관리하는 방법을 결정하는 데 중요한 요소가 된다.
리눅스 셸
- 리눅스 셸은 운영 체제의 핵심 부분 중 하나이다.
- 사용자와 운영 체제 커널 사이의 인터페이스 역할을 한다.
- 사용자는 텍스트 명령을 입력하여 셸에 명령을 전달하고, 셸은 이를 해석하고 운영 체제의 서비스를 실행하거나 다른 프로그램을 실행하는 등의 작업을 수행한다.
흔히 사용되는 셸
- Bash(Bourne Again SHell)
- Zsh(Z Shell)
셸의 기능
- 사용자가 명령을 입력하고 실행할 수 있도록 해주는 인터페이스 역할을 한다.
- 각각의 셸에는 자체 문법과 기능이 있다.
- 명령어와 그에 따른 옵션, 파일과 디렉토리 경로 등을 통해 사용자가 컴퓨터와 상호작용할 수 있도록 한다.
- 파일 시스템에 접근하거나 관리할 수 있다.
- 프로세스를 실행하고 제어할 수도 있다.
- 파일을 복사, 이동, 삭제하거나 프로그램을 실행하고 백그라운드에서 실행시키는 것과 같은 작업들을 수행할 수 있다.
- 명령의 출력을 다른 명령으로 연결한다.
- 환경 변수를 설정하고 사용할 수 있다.
정리하자면 리눅스 셸은 사용자와 운영 체제 간의 다리 역할을 하며
사용자의 명령을 해석하고 실행하여 운영 체제의 기능을 이용할 수 있도록 해준다.
셸에 명령어 입력해보기
$ id
: 입력하면 아이덴티티 정보를 알 수 있다.
위에서는 사용자명이 ubuntu이고 이를 나타내는 숫자형 id(UID)는 1000이다.
ubuntu의 기본 그룹명도 ubuntu이고 그룹아이디인 gid도 1000이다.
일반적인 리눅스에서는 동일한 그룹명과 사용자명을 가진다.
그 뒤로는 ubuntu가 속한 소속 그룹들이 나온다.
$ pwd
: 현재 커맨드라인이 위치한 경로를 보여준다.
$ ls
: 숨겨진 폴더와 파일을 제외하고 현재 폴더에 있는 파일과 폴더 목록을 보여준다.
ls 옵션
-l (소문자 L, 자세한 정보 출력)
- 파일 권한을 볼 수 있다.
-a (숨겨진 파일까지 표시)
- . 으로 시작하는 파일은 숨긴 파일이다.
-t (시간순 출력)
- 가장 최근에 생성된 파일을 확인할 수 있다.
$ ls -lat는 $ ls -l -a -t를 연달아서 옵션을 적은 것이므로 동일한 결과를 볼 수 있다.
$ 명령어 --help
: 명령어의 사용법을 출력한다.
pwd는 -L, -P 옵션을 사용할 수 있음을 알 수 있다.
$ ls --hide=숨길 파일이나 폴더명
: 입력한 파일이나 폴더명을 검색 결과에서 배제한다.
: 숨길 파일/폴더명을 명령어 뒤에서 파라미터로 받는다.
snap 폴더만 출력되지 않은 모습을 확인할 수 있다.
$ date
: 현재 시간을 출력한다.
date > date.txt
: 파일이 없다면 생성하고 현재 시간을 date.txt에 저장한다.
ls
: 현재 경로의 파일/폴더 목록을 출력한다.
cat date.txt
date.txt의 내용을 출력한다.
위 이미지처럼 현재 시간을 텍스트 파일로 저장할 수 있다.
$ echo 출력할 내용
: 입력한 내용을 콘솔에 출력한다.
$ cat 파일
: 입력 파일의 내용을 확인할 수 있다.
echo hello linux >> date.txt
: date.txt 파일 마지막에 hello linux를 추가하고 출력한다.