1. Shell

froajnzd·2024년 11월 5일
0

the linux command line

목록 보기
1/6
post-thumbnail

환경세팅

본인 윈도우 유저 .. 띠용
multipass 설치하여 Ubuntu 24.04 LTS 설치. Noble Numbat

리눅스 커맨드라인(번역)
The Linux Command Linue:A Complete introduction(원서)을 보고 쓴 글

  1. 리눅스에는 버퍼 기능이 있어서, 마우스 왼쪽 버튼으로 (마우스 드래그 또는 단어 두번 클릭해 강조 표시)하면 X에서 관리하는 버퍼에 복사됨.
    마우스 가운데 버튼을 누르면 커서 위치에 텍스트가 붙여짐
    but 내환경에서는 안됐었음.. ㄸㄹㄹ

  2. 간단한 명령어

$ whoami
ubuntu

$ date
Tue Nov 5 06:13:31 UTC 2024

# 기본으로 설치되어 있지 않다.
# sudo apt install ncal로 설치
$ cal
     November 2024
Su  Mo  Tu  We  Th  Fr  Sa
                    1   2  
3   4   5   6   7   8   9 
10  11  12  13  14  15  16 
17  18  19  20  21  22  23 
24  25  26  27  28  29  30 

# 디스크 드라이브의 현재 여유 공간 확인
$ df
Filesystem          1K-blocks       Used    Available   Use%    Mounted on
/dev/sda2            15115452    5012392      9949716    34%    /
/dev/sda5            59631908   26545424     30008432    47%    /home
/dev/sda1              147764      17370       122765    13%    /boot
tmpfs                  256856          0       256856     0%    /dev/shm

# 사용 가능한 메모리 양
$ free
         total        used        free      shared      buffers     cached
Mem:    513712      503976        9736           0         5312     122916
-/+ buffers/cache:  375748      137964          
Swap:   1052248     104712      947536          

파일 시스템 EXT

Linux가 MINIX에서 발전한 점은, EXT로 파일 이름과 파일 크기의 한계를 보완하며 설계한 점

but EXT 도 문제가 있었음

  • data modification timestamp와 inode 수정을 지원하지 않음
  • linked list를 통해 free block과 inode를 추적하기 때문에 성능 저하

이러한 한계를 극복하기 위해 EXT2 등장, 나중엔 EXT3, EXT4까지 등장

EXT3의 발전

  • 단순 연결 리스트로 관리하던 디렉토리에 HTree 기술 도입하여 디렉토리 검색 성능 향상
    => 상수 시간 내에 접근 가능
  • 저널링(journaling) 기능 지원하여 파일시스템 손상을 신속하게 복구 가능

EXT3 여기서도,,
파일시스템과 파일의 최대 크기가 작고 연속적인 데이터 블록에 대해 비효율적인 인덱싱 방식을 사용하는 등 여러 단점이 존재

EXT4의 발전

  • 48bits 블록 주소 지정을 사용해 대용량 파일시스템과 파일 크기 지원
  • Pre-allocation(사전 할당)
  • Delayed allocation(지연 할당)
  • Extent : 대용량 파일의 메타데이터를 줄이고 성능을 향상시키기 위한 기법

파티션 당 하나의 파일 시스템이 존재한다

그리고 또다른 파일시스템
XFS: 64bit
Btrfs: Copy-on-Write 파일시스템
ZFS: Sun Microsystems에서 개발한 파일시스템으로 Solaris에 탑재

이거에 대한 자세한 내용은 이 글 참고

파일시스템 트리

유닉스 계열 운영체제는 계층적 디렉토리 구조(hierarchical directory structure) 라고 하는 방식으로 파일을 구성

각 저장 장치마다 별도의 파일 시스템 트리가 있는 Windows와 달리 리눅스와 같은 유닉스 계열 시스템에서는 컴퓨터에 연결된 드라이브 또는 저장 장치 수에 관계없이 항상 하나의 파일 시스템 트리가 있다

저장 장치는 시스템 유지 관리를 담당하는 시스템 관리자(system administrator) 의 변덕에 따라 트리의 여러 지점에 연결(또는 더 정확하게는 마운트)된다

파일 시스템 탐색 명령어

$ pwd # 현재 작업 디렉토리 이름 출력

$ cd # 디렉토리 변경
$ cd - # 이전 작업 디렉토리로 변경
$ cd ~user_name # 작업 디렉토리를 user_name의 홈디렉토리로 변경

1. ls

디렉토리 내용을 나열한다

  • 옵션
shortlong versiondescription
-a                                                          숨겨진 파일 포함 현재 디렉토리의 전체 내용 나열
-A--almost-all. (현재 디렉토리) 및 .. (상위 디렉토리)를 나열하지 않는다는 점을 제외하면 위의 -a 옵션과 비슷합니다.
-d--directory일반적으로 디렉토리를 지정하면 ls는 디렉토리 자체가 아니라 디렉토리의 내용을 나열합니다. 이 옵션을 -l 옵션과 함께 사용하면 디렉토리의 내용이 아닌 디렉토리에 대한 세부 정보를 볼 수 있습니다.
-F--classify이 옵션은 나열된 각 이름 끝에 표시 문자를 추가합니다. 예를 들어, 이름이 디렉토리인 경우 슬래시(/)를 추가합니다.
-h--human-readable긴 형식의 목록에서는 파일 크기를 바이트 단위가 아닌 사람이 읽을 수 있는 형식으로 표시합니다.
-l결과를 긴 형식(long format)으로 표시
-r--reverse결과를 역순으로 표시합니다. 일반적으로 ls는 결과를 알파벳 오름차순으로 표시합니다.
-S파일 크기별로 결과 정렬
-t파일 수정 시간별로 결과 정렬
  • ls의 상세 필드
-rw-r--r--  1   root    root    3576296 2017-04-03  11:05   Experience ubuntu.ogg
-rw-r--r--  1   root    root    1186219 2017-04-03  11:05   kubuntu-leaflet.png
-rw-r--r--  1   root    root      47584 2017-04-03  11:05   logo-Edubuntu.png
-rw-r--r--  1   root    root      44355 2017-04-03  11:05   logo-Kubuntu.png
-rw-r--r--  1   root    root      34391 2017-04-03  11:05   logo-Ubuntu.png
-rw-r--r--  1   root    root      32059 2017-04-03  11:05   oo-cd-cover.odf
-rw-r--r--  1   root    root     159744 2017-04-03  11:05   oo-derivatives.doc
-rw-r--r--  1   root    root      27837 2017-04-03  11:05   oo-maxwell.odt
-rw-r--r--  1   root    root      98816 2017-04-03  11:05   oo-trig.xls
-rw-r--r--  1   root    root     453764 2017-04-03  11:05   oo-welcome.odt
-rw-r--r--  1   root    root     358374 2017-04-03  11:05   ubuntu Sax.ogg
fieldmeaning
                        -rw-r--r--                          파일에 대한 접근 권한. 첫 번째 문자는 파일 타입을 나타냅니다. 여러 타입 중 앞의 대시는 일반 파일을 의미하며, "d"는 디렉토리를 나타냅니다. 다음 세 문자는 파일 소유자에 대한 액세스 권한, 그 다음 세 문자는 파일 그룹 구성원에 대한 액세스 권한, 마지막 세 문자는 그 외 모든 사람에 대한 액세스권한
1파일의 하드 링크 수.
root파일 소유자의 사용자명
root파일을 소유한 그룹의 이름
32059파일의 크기(바이트)
2017-04-03 11:05파일을 마지막으로 수정한 날짜 및 시간
oo-cd-cover.odf파일 이름

2. file

[me@linuxbox ~]$ file picture.jpg
picture.jpg: JPEG image data, JFIF standard 1.01

유닉스 계열 운영 체제의 일반적인 생각 중 하나는 "모든 것이 파일이다"

3. less

파일 내용을 보는 프로그램

긴 텍스트 문서를 한 페이지씩 쉽게 볼 수 있도록 하는 프로그램인 "Pager" 부류 프로그램에 속한다.

more이라는 프로그램도 있었으나, more은 앞으로만 페이징 가능하지만, less는 앞뒤로 페이징할 수 있고, 다른 기능도 많음

명령동작
Page Up or b한 페이지 위로 스크롤
Page Down or space한 페이지 아래로 스크롤
Up arrow한 줄 위로 스크롤
Down arrow한 줄 아래로 스크롤
G텍스트 파일의 끝으로 이동
1G or g텍스트 파일의 시작 부분으로 이동
/characters다음 검색 characters 앞으로 이동
n이전 검색의 다음 항목 검색
h도움말 화면 표시
qless 종료

4. mkdir

디렉토리를 만든다

mkdir directory... : 명령어에서 마침표 세 개(...)가 인수 뒤에 오는 경우, 해당 인수가 반복될 수 있음을 의미

mkdir dir1

mkdir dir1 dir2 dir3 # 세 개의 디렉토리가 생성된다

5. cp

파일이나 디렉토리를 복사한다

cp item1 item2 # 단일 파일(디렉토리) item1을 파일(디렉토리) item2에 복사한다

cp item... directory # 여러 item(파일 또는 디렉토리)을 directory에 복사한다
옵션긴옵션의미
-a--archive파일 및 디렉토리와 소유권 및 권한을 포함한 모든 속성을 복사합니다. 일반적으로 복사는 복사를 수행하는 사용자의 기본 속성을 갖습니다.
-i--interactive기존 파일을 덮어쓰기 전에 사용자에게 확인 메시지를 표시합니다. 이 옵션을 지정하지 않으면 cp가 자동으로(즉, 경고 없이) 파일을 덮어씁니다.
-r--recursive디렉토리와 그 내용을 재귀적으로 복사합니다. 디렉토리를 복사할 때 이 옵션(또는 -a 옵션)이 필요합니다.
-u--update한 디렉토리에서 다른 디렉토리로 파일을 복사할 때 대상 디렉토리에 존재하지 않거나 기존 해당 파일보다 최신인 파일만 복사합니다. 이 기능은 복사할 필요가 없는 파일을 건너뛰기 때문에 많은 수의 파일을 복사할 때 유용합니다.
-v--verbose복사가 수행될 때 정보 메시지를 표시합니다.
                                             
  • 예제
cp file1 file2 dir1	
# file1과 file2를 디렉토리 dir1에 복사합니다. 
# dir1 디렉토리가 이미 존재해야 합니다.

cp dir1/* dir2	
# 와일드카드를 사용하여 dir1에 있는 모든 파일을 dir2에 복사합니다. 
# dir2 디렉토리는 이미 존재해야 합니다.

cp -r dir1 dir2	
# 디렉토리 dir1의 내용을 디렉토리 dir2로 복사합니다. 
# 디렉토리 dir2가 존재하지 않으면 디렉토리가 생성되고 복사 후 디렉토리 dir1과 동일한 내용을 포함합니다. 
# 디렉토리 dir2가 존재하면 디렉토리 dir1(및 그 내용)이 dir2에 복사됩니다.

6. mv

파일 이동 및 이름 바꾸기

cp와 거의 동일한 방식으로 사용된다

  • 옵션
옵션긴옵션의미
-i--interactive기존 파일을 덮어쓰기 전에 사용자에게 확인 메시지를 표시합니다. 이 옵션을 지정하지 않으면 mv가 자동으로 파일을 덮어씁니다.
-u--update한 디렉토리에서 다른 디렉토리로 파일을 이동할 때는 대상 디렉토리에 존재하지 않거나 기존 해당 파일보다 최신인 파일만 이동합니다.
-v                             --verbose이동이 수행될 때 정보 메시지를 표시합니다.

7. rm

파일 및 디렉토리 제거

  • 옵션
옵션긴옵션의미
-i--interactive기존 파일을 삭제하기 전에 사용자에게 확인 메시지를 표시합니다. 이 옵션을 지정하지 않으면 rm이 자동으로 파일을 삭제합니다.
-r--recursive디렉토리를 재귀적으로 삭제합니다. 즉, 삭제할 디렉토리에 하위 디렉토리가 있는 경우 하위 디렉토리도 삭제합니다. 디렉토리를 삭제하려면 이 옵션을 지정해야 합니다.
-f--force존재하지 않는 파일을 무시하고 메시지를 표시하지 않습니다. 이 옵션은 --interactive 옵션을 재정의합니다.
-v                                      --verbose     삭제가 수행될 때 정보 메시지를 표시합니다.

rm 사용할 때 유의할 점

유닉스 계열 운영체제에는 삭제 취소 명령이 없다.
와일드카드를 사용할 때 특히 주의해야한다

rm *.html

rm * .html

이렇게 *와 .html 사이에 공백을 넣으면 디렉토리의 모든 파일을 삭제한 다음, .html 파일이 없다고 말할 것이다

TIP rm과 함께 와일드카드를 사용할 때마다 먼저 ls를 사용하여 와일드카드를 테스트하자. 그럼 삭제할 파일을 확인하고, 이전 명령어에서 ls->rm하여 명령어를 실행한다!

기본 디렉토리

리눅스의 기본 디렉토리

디렉토리설명
/root 디렉토리. 모든 것이 시작되는 곳입니다.
/bin시스템을 부팅하고 실행하기 위해 반드시 있어야 하는 바이너리(프로그램)가 들어 있습니다.
/boot리눅스 커널, 초기 RAM 디스크 이미지(부팅 시 필요한 드라이버용) 및 부트 로더가 포함되어 있습니다.
/dev이것은 device node가 포함된 특수 디렉토리입니다. "모든 것이 파일이다"라는 말은 디바이스에도 적용됩니다. 커널이 이해하는 모든 디바이스의 목록을 유지하는 곳입니다.
/etc/etc 디렉토리에는 시스템 전체의 모든 구성 파일이 포함되어 있습니다. 또한 부팅 시 각 시스템 서비스를 시작하는 셸 스크립트 모음도 포함되어 있습니다. 이 디렉토리에 있는 모든 파일은 읽을 수 있는 텍스트여야 합니다.
/home일반적인 구성에서는 각 사용자에게 /home에 디렉토리가 제공됩니다. 일반 사용자는 자신의 홈 디렉토리에만 파일을 쓸 수 있습니다. 이 제한은 잘못된 사용자 활동으로부터 시스템을 보호합니다.
/lib핵심 시스템 프로그램에서 사용하는 공유 라이브러리 파일을 포함합니다. 이는 Windows의 동적 링크 라이브러리(DLL)와 유사합니다.
/lost+foundext4와 같은 리눅스 파일 시스템을 사용하는 포맷된 각 파티션 또는 장치에는 이 디렉토리가 있습니다. 이 디렉토리는 파일 시스템 손상 이벤트에서 부분적으로 복구하는 경우에 사용됩니다. 시스템에 정말 심각한 문제가 발생하지 않는 한 이 디렉토리는 비어 있는 상태로 유지됩니다.
/media최신 리눅스 시스템에서 /media 디렉토리에는 삽입 시 자동으로 마운트되는 USB 드라이브, CD-ROM 등의 이동식 미디어에 대한 마운트 지점이 포함됩니다.
/mnt구형 리눅스 시스템에서는 /mnt 디렉토리에 수동으로 마운트한 이동식 장치에 대한 마운트 지점이 있습니다.
/opt/opt 디렉토리는 "선택적(optional)" 소프트웨어를 설치하는 데 사용됩니다. 주로 시스템에 설치될 수 있는 상용 소프트웨어 제품을 보관하는 데 사용됩니다.
/proc/proc 디렉토리는 특별합니다. 하드 드라이브에 저장된 파일이라는 의미에서 실제 파일 시스템이 아닙니다. 그보다는 리눅스 커널에 의해 유지되는 가상 파일 시스템입니다. 여기에 포함된 "파일"은 커널 자체에 대한 엿보기입니다. 파일은 읽을 수 있으며 커널이 컴퓨터를 어떻게 보는지 알 수 있습니다.
/rootroot 계정의 홈 디렉토리입니다.
/sbin이 디렉토리에는 "시스템(system)" 바이너리가 포함되어 있습니다. 일반적으로 수퍼유저를 위해 예약된 중요한 시스템 작업을 수행하는 프로그램입니다.
/tmptmp 디렉토리는 다양한 프로그램에서 생성된 임시 임시 파일을 저장하는 용도로 사용됩니다. 일부 구성에서는 시스템을 재부팅할 때마다 이 디렉토리가 비워지기도 합니다.
/usr/usr 디렉토리 트리는 리눅스 시스템에서 가장 큰 디렉토리 트리일 가능성이 높습니다. 여기에는 일반 사용자가 사용하는 모든 프로그램과 지원 파일이 포함되어 있습니다.
/usr/bin/usr/bin에는 리눅스 배포에서 설치한 실행 프로그램이 들어 있습니다. 이 디렉토리에 수천 개의 프로그램이 있는 경우도 드물지 않습니다.
/usr/lib/usr/bin에 있는 프로그램에 대한 공유 라이브러리.
/usr/local/usr/local 트리는 배포판에 포함되어 있지 않지만 시스템 전체에서 사용하기 위한 프로그램이 설치되는 곳입니다. 소스 코드에서 컴파일된 프로그램은 일반적으로 /usr/local/bin에 설치됩니다. 새로 설치된 리눅스 시스템에는 이 트리가 존재하지만 시스템 관리자가 무언가를 넣을 때까지는 비어 있습니다.
/usr/sbin더 많은 시스템 관리 프로그램이 포함되어 있습니다.
/usr/share/usr/share에는 /usr/bin에 있는 프로그램에서 사용하는 모든 공유 데이터가 들어 있습니다. 여기에는 기본 구성 파일, 아이콘, 화면 배경, 사운드 파일 등이 포함됩니다.
/usr/share/doc                             시스템에 설치된 대부분의 패키지에는 일종의 문서가 포함되어 있습니다. /usr/share/doc에서는 패키지별로 정리된 문서 파일을 찾을 수 있습니다.
/var지금까지 살펴본 디렉토리 중 /tmp와 /home을 제외하고는 비교적 정적인, 즉 내용이 변경되지 않는 디렉토리입니다. /var 디렉토리 트리는 변경될 가능성이 있는 데이터가 저장되는 곳입니다. 각종 데이터베이스, 스풀 파일, 사용자 메일 등이 여기에 있습니다.
/var/log             /var/log에는 다양한 시스템 활동의 기록인 로그 파일이 들어 있습니다. 이러한 파일은 중요하므로 수시로 모니터링해야 합니다. 가장 유용한 파일은 /var/log/messages와 /var/log/syslog입니다. 일부 시스템에서는 보안상의 이유로 수퍼유저만 로그 파일을 볼 수 있다는 점에 유의하세요.

흥미로운 파일

  • /boot/grub/grub.conf 또는 menu.lst : 부트 로더를 구성하는 데 사용
  • /boot/vmlinuz(또는 이와 유사한 것) : 리눅스 커널
  • /etc/crontab : 자동화된 작업이 실행되는 시기를 정의하는 파일
  • /etc/fstab : 저장 장치 및 관련 마운트 지점에 대한 테이블
  • /etc/passwd : 사용자 계정 목록

참고하면 좋을 링크 https://www.yalco.kr/35_linux/

profile
Hi I'm 열쯔엉

0개의 댓글