해당 강좌 https://www.bilibili.com/video/BV18p4y167Md
운영체제 통신과정 운영체제 실습강의 45
목차 CSAPP 컴퓨터 시스템에 대한 심층적인 이해는 마이크로소프트 사장
yangminz
의 오픈클래스에서 나온다 https://www.bilibili.com/video/BV17K4y1N7Q2 (updating)
목차 Master Hou Jie의 CPP 객체 지향 프로그래밍 시리즈 중 C++ 객체 지향 프로그래밍 시리즈(완료)
명령의 기본 사용법과 옵션을 소개합니다.
Man은 Manual의 약어로, 지시사항의 구체적인 정보를 표시합니다.
man date가 실행되면 DATE(1)이 나타납니다. 그 안의 숫자는 일반적으로 사용되는 명령어의 종류를 나타내며, 그 종류는 다음과 같습니다.
코드네임 | 유형 |
---|---|
1 | 사용자가 쉘 환경에서 조작할 수 있는 지침 또는 실행 파일 |
5 | 구성 파일 |
8 | 시스템 관리자가 사용할 수 있는 관리 명령 |
info는 man과 유사하지만 info는 문서를 페이지로 나누고 각 페이지를 이동할 수 있습니다.
/usr/share/doc는 소프트웨어에 대한 전체 문서 세트를 저장합니다.
종료하기 전에 who 명령을 사용하여 온라인에 있는 다른 사용자가 있는지 확인해야 합니다.
디스크 파일 읽기 및 쓰기 속도를 높이기 위해 메모리에 위치한 파일 데이터가 디스크에 즉시 동기화되지 않으므로 종료하기 전에 동기화 동기화 작업이 필요합니다.
# # shutdown [-krhc] 时间 [信息] |
-k : 不会关机,只是发送警告信息,通知所有在线的用户
-r : 将系统的服务停掉后就重新启动
-h : 将系统的服务停掉后就立即关机
-c : 取消已经在进行的 shutdown 指令内容
실행 파일의 경로는 PATH에 :로 구분되어 선언됩니다.
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
sudo를 사용하면 일반 사용자가 루트 실행 명령을 사용할 수 있지만 /etc/sudoers 구성 파일에 추가된 사용자만 이 명령을 사용할 수 있습니다.
RPM과 DPKG는 가장 일반적인 두 가지 유형의 소프트웨어 패키지 관리 도구입니다.
Linux 배포판은 Linux 커널과 다양한 응용 소프트웨어가 통합된 버전입니다. 상업용 배포판 기반 패키지 관리 도구 커뮤니티 배포판 RPM Red Hat Fedora/CentOS DPKG Ubuntu Debian
주문하다 | 효과 |
---|---|
:w | 디스크에 쓰기 |
:와! | 파일이 읽기 전용일 때 디스크에 강제로 씁니다. 쓸 수 있는지 여부는 파일에 대한 사용자의 권한에 따라 다릅니다. |
:큐 | 떠나다 |
:큐! | 저장하지 않고 강제로 나가기 |
:wq | 디스크에 쓰고 나가기 |
:와! | 디스크에 강제로 쓴 후 종료 |
Genuine 프로젝트로 번역되는 GNU 프로젝트는 GNU라는 완전 무료 운영 체제를 만드는 것을 목표로 하며 해당 콘텐츠 소프트웨어는 완전히 GPL에 따라 릴리스됩니다. GPL의 전체 이름은 GNU General Public License이며 여기에는 다음 내용이 포함됩니다: 어떤 목적으로든 이 프로그램을 실행할 수 있는 자유, 이 프로그램을 개선하고 개선 사항을 공개할 수 있는 자유. ¶오픈소스 라이선스 선택(새 창에서 열림) 오픈소스 라이선스를 선택하는 방법(새 창에서 열림)
IDE(ATA)는 Advanced Technology Attachment의 약자입니다. 최대 인터페이스 속도는 133MB/s입니다. 병렬 포트 케이블의 간섭 방지 성능이 너무 낮고 케이블이 큰 공간을 차지하여 내부 열에 도움이 되지 않기 때문입니다. 컴퓨터의 소멸로 인해 점차 SATA로 대체되었습니다.
SATA의 전체 이름은 직렬 포트를 사용하는 ATA 인터페이스인 직렬 ATA입니다. 이는 강력한 간섭 방지 기능을 갖추고 있으며 ATA보다 데이터 케이블 길이에 대한 요구 사항이 훨씬 낮으며 핫 스왑 가능 및 기타 기능을 지원합니다. SATA-II의 인터페이스 속도는 300MiB/s인 반면, 새로운 SATA-III 표준은 600MiB/s의 전송 속도에 도달할 수 있습니다. SATA 데이터 케이블은 ATA보다 훨씬 얇기 때문에 섀시 내부 공기 순환에 도움이 되고 케이블 정리도 더 쉽습니다.
SCSI의 전체 이름은 소형 컴퓨터 시스템 인터페이스(Small Computer System Interface)입니다. 초기 SCSI-II부터 현재 Ultra320 SCSI 및 파이버 채널에 이르기까지 다양한 인터페이스 유형으로 여러 세대에 걸쳐 개발되었습니다. SCSI 하드 드라이브는 워크스테이션 수준의 개인용 컴퓨터 및 서버에 널리 사용되므로 15,000rpm의 높은 디스크 속도와 같은 고급 기술을 사용하고 전송 중 CPU 사용량이 더 높습니다. 동일한 용량의 ATA 및 SATA 하드 드라이브보다 더 비쌉니다.
Linux의 모든 하드웨어는 디스크를 포함하여 파일로 취급됩니다. 디스크 인터페이스 유형에 따라 디스크 이름이 지정됩니다. 일반적인 디스크 파일 이름은 다음과 같습니다.
파일명 뒤의 일련번호를 판별하는 것은 시스템이 디스크를 감지하는 순서와 관련이 있으며, 디스크가 삽입되는 슬롯 위치와는 아무런 관련이 없습니다.
디스크 파티션 테이블에는 두 가지 주요 형식이 있습니다. 하나는 더 제한적인 MBR 파티션 테이블이고 다른 하나는 더 새롭고 덜 제한적인 GPT 파티션 테이블입니다.
MBR에서는 첫 번째 섹터가 가장 중요합니다. 여기에는 마스터 부트 레코드(MBR)와 파티션 테이블이 포함되며, 마스터 부트 레코드는 446바이트를 차지하고 파티션 테이블은 64바이트를 차지합니다.
파티션 테이블은 64바이트에 불과하며 기본 파티션(Primary)과 확장 파티션(Extended), 최대 4개의 파티션만 저장할 수 있습니다. 확장 파티션은 하나뿐이며, 다른 섹터를 사용하여 추가 파티션 테이블을 기록합니다. 따라서 확장 파티션을 통해 더 많은 파티션을 나눌 수 있습니다.
Linux는 또한 파티션을 파일로 처리합니다. 파티션 파일의 이름 지정 방법은 디스크 파일 이름 + 숫자(예: /dev/sda1)입니다. 논리 파티션의 번호는 5부터 시작됩니다.
디스크마다 섹터 크기가 다릅니다(예: 최신 디스크의 경우 512바이트 및 4k). 모든 디스크와 호환되기 위해 GPT는 정의된 섹터에서 논리 블록 주소(논리 블록 주소, LBA)를 사용합니다. LBA의 기본 크기는 512바이트입니다.
GPT의 첫 번째 블록은 메인 부트 레코드(MBR)를 기록하고, 33개 블록은 파티션 정보를 기록하며, 마지막 33개 블록은 파티션 정보를 백업하는 데 사용됩니다. 이 33개 블록 중 첫 번째는 GPT 헤더 레코드입니다. 이 부분은 파티션 테이블 자체의 위치와 크기, 그리고 파티션 테이블의 확인 코드(CRC32)를 기록합니다. 이 확인 코드를 사용하여 GPT가 올바른지 확인하세요. 오류가 있는 경우 백업 파티션을 사용하여 복원할 수 있습니다.
GPT에는 확장 파티션이라는 개념이 없습니다. 모두 기본 파티션입니다. 각 LAB은 4개의 파티션으로 나누어질 수 있으므로 총 4*32 = 128개의 파티션으로 나눌 수 있습니다.
MBR은 2.2TB 이상의 하드 드라이브를 지원하지 않는 반면 GPT는 최대 233TB = 8ZB를 지원합니다.
BIOS(기본 입출력 시스템)는 펌웨어(하드웨어에 내장된 소프트웨어)입니다. BIOS 프로그램은 정전 후에도 내용이 손실되지 않는 읽기 전용 메모리에 저장됩니다.
BIOS는 컴퓨터가 켜질 때 실행되는 첫 번째 프로그램입니다. 이 프로그램은 부팅할 수 있는 디스크를 알고 디스크의 첫 번째 섹터의 메인 부트 레코드(MBR)를 읽습니다. 부팅 관리 프로그램, 이 부팅 관리 프로그램은 운영 체제의 핵심 파일을 로드합니다.
MBR(주 부트 레코드)의 부팅 관리자는 다음 기능을 제공합니다.
메뉴를 열고, 코어 파일을 로드하고, 다른 부팅 관리 프로그램으로 전송합니다. 전송 기능을 사용하여 멀티 부팅을 구현할 수 있습니다. 다른 파티션의 부팅 섹터에 다른 운영 체제의 부팅 관리 프로그램을 설치하기만 하면 됩니다. 부팅 관리 프로그램을 시작할 때 현재 운영 체제를 시작하거나 시작할 수 있습니다. 메뉴를 통해 현재 운영 체제를 시작하십시오. 다른 운영 체제를 시작하려면 다른 부팅 관리 프로그램으로 전송하십시오.
아래 그림에서 첫 번째 섹터의 기본 부트 레코드(MBR)에 있는 부팅 관리 프로그램은 M1, M2라는 두 가지 메뉴를 제공합니다. M1은 Windows 운영 체제를 가리키고 M2는 다음을 포함하는 다른 파티션의 부트 섹터를 가리킵니다. 또 다른 부팅 관리 프로그램은 Linux를 가리키는 메뉴를 제공합니다.
멀티부팅을 설치하려면 Windows를 먼저 설치한 후 Linux를 설치하는 것이 가장 좋습니다. 윈도우 설치 시 메인 부트 레코드(MBR)가 덮어쓰기 되기 때문에, 리눅스는 메인 부트 레코드(MBR)나 다른 파티션의 부트 섹터에 부트 관리 프로그램을 설치하도록 선택할 수 있고, 부트 관리 프로그램의 메뉴를 설정할 수 있다. .
BIOS는 GPT 파티션 테이블을 읽을 수 없지만 UEFI는 읽을 수 있습니다.
파티션을 포맷하는 것은 파티션에 파일 시스템을 생성하는 것입니다. 일반적으로 파티션은 하나의 파일 시스템으로만 포맷할 수 있지만 디스크 어레이와 같은 기술은 여러 파일 시스템으로 파티션을 포맷할 수 있습니다.
가장 중요한 구성 요소는 다음과 같습니다.
또한 다음도 포함됩니다.
파일의 내용이 위치한 블록이 너무 분산되어 있다는 의미입니다.
Ext2 파일 시스템에서 지원되는 블록 크기는 1K, 2K 및 4K입니다. 크기에 따라 단일 파일 및 파일 시스템의 최대 크기가 제한됩니다.
크기 | 1KB | 2KB | 4KB |
---|---|---|---|
가장 큰 단일 파일 | 16GB | 256GB | 2TB |
최대 파일 시스템 2TB 8TB 16TB 하나의 블록은 하나의 파일만 사용할 수 있으며, 사용하지 않는 부분은 바로 낭비됩니다. 따라서 많은 수의 작은 파일을 저장해야 하는 경우 더 작은 블록을 선택하는 것이 가장 좋습니다.
inode에는 구체적으로 다음 정보가 포함되어 있습니다.
inode에는 다음과 같은 특징이 있습니다.
inode는 파일 내용이 위치한 블록 번호를 기록하지만 각 블록은 매우 작습니다. 큰 파일에는 수십만 개의 블록이 필요합니다. inode는 크기가 제한되어 있어 너무 많은 블록 번호를 직접 참조할 수 없습니다. 따라서 간접참조, 이중간접참조, 삼중간접참조가 도입되었습니다. 간접 참조는 아이노드가 기록한 참조 블록에 참조 정보가 기록되는 것을 의미한다.
디렉터리가 생성되면 inode와 하나 이상의 블록이 할당됩니다. 블록별로 기록되는 내용은 해당 디렉토리에 있는 모든 파일의 inode 번호와 파일명이다. 파일의 inode 자체는 파일명을 기록하지 않고 디렉토리에 파일명을 기록하고 있음을 알 수 있다. 따라서 파일 추가, 파일 삭제, 파일명 변경 등의 작업은 w 권한과 관련이 있다. 디렉토리.
갑작스러운 정전이 발생하면 파일 시스템에 오류가 발생합니다. 예를 들어, 정전 이전에 블록 비트맵만 수정되었지만 실제로는 블록에 데이터가 기록되지 않았습니다. ext3/ext4 파일 시스템에는 파일 시스템을 복구하는 데 사용할 수 있는 로그 기능이 도입되었습니다.
마운트는 디렉토리를 파일 시스템의 진입점으로 사용합니다. 즉, 디렉토리에 들어간 후 파일 시스템 데이터를 읽을 수 있습니다.
다양한 Linux 배포판의 디렉터리 구조에서 일관성을 유지하기 위해 FHS(파일 시스템 계층 구조 표준)는 Linux의 디렉터리 구조를 지정합니다.
가장 기본적인 세 가지 디렉터리는 다음과 같습니다.
사용자에는 파일 소유자, 그룹, 기타의 세 가지 유형이 있습니다. 사용자마다 파일 권한이 다릅니다.
ls를 사용하여 파일을 볼 때 drwxr-xr-x. 3 root root 17 May 6 00:14 .config
와 같은 파일 정보가 표시됩니다.
일반적인 파일 형식과 그 의미는 다음과 같습니다.
9자리 파일 권한 필드에는 3자리가 하나의 그룹으로 구성되어 있으며, 총 3개의 그룹이 있습니다. 각 그룹은 파일 소유자, 해당 그룹이 속한 그룹 및 기타 사람들에 대한 파일 권한을 나타냅니다. 권한 집합의 세 자리 숫자는 r, w, x 권한으로 읽기, 쓰기 및 실행 가능을 나타냅니다.
파일 시간에는 세 가지 유형이 있습니다.
파일이나 디렉터리의 정보를 나열합니다. 디렉터리의 정보는 그 안에 포함된 파일입니다.
# # ls [-aAdfFhilnrRSt] file|dir
-a : 列出全部的文件
-d : 仅列出目录本身
-l : 以长数据串行列出,包含文件的属性与权限等等数据
cd [相对路径或绝对路径]
# # mkdir [-mp] 目录名称
-m : 配置目录权限
-p : 递归创建目录
rmdir [-p] 目录名称
-p : 递归删除目录
# # touch [-acdmt] filename
-a : 更新 atime
-c : 更新 ctime,若该文件不存在则不建立新文件
-m : 更新 mtime
-d : 后面可以接更新日期而不使用当前日期,也可以使用 --date= "日期或时间"
-t : 后面可以接更新时间而不使用当前时间,格式为[YYYYMMDDhhmm]
파일을 복사합니다. 소스 파일이 2개 이상인 경우 대상 파일은 디렉터리여야 합니다.
cp [-adfilprsu] source destination
-a : 相当于 -dr --preserve=all 的意思,至于 dr 请参考下列说明
-d : 若来源文件为链接文件,则复制链接文件属性而非文件本身
-i : 若目标文件已经存在时,在覆盖前会先询问
-p : 连同文件的属性一起复制过去
-r : 递归持续复制
-u : destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制
--preserve=all : 除了 -p 的权限相关参数外,还加入 SELinux 的属性, links, xattr 等也复制了
# # rm [-fir] 文件或目录
-r : 递归删除
파일을 이동합니다.
# # mv [-fiu] source destination
# # mv [options] source1 source2 source3 .... directory
-f : force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
권한 집합은 숫자로 표현될 수 있으며, 이때 권한 집합의 3비트는 왼쪽에서 오른쪽으로 각 비트의 가중치가 4, 2, 1이 됩니다. 은 각 권한에 해당하는 디지털 가중치이며, 값은 r:4, w:2, x:1이다.
# # chmod [-R] xyz dirname/filename
예: .bashrc 파일의 권한을 -rwxr-xr--로 변경합니다.
# # chmod 754 .bashrc
기호를 사용하여 권한을 설정할 수도 있습니다.
# # chmod [ugoa] [+-=] [rwx] dirname/filename
- u: 拥有者
- g: 所属群组
- o: 其他人
- a: 所有人
- +: 添加权限
- -: 移除权限
- =: 设定权限
예: 모든 사용자에 대해 .bashrc 파일에 쓰기 권한을 추가합니다.
# # chmod a+w .bashrc
**파일 이름은 파일 내용에 저장되지 않고 파일이 위치한 디렉터리에 저장됩니다. **따라서 파일에 대한 w 권한이 있으면 파일 이름을 수정할 수 없습니다. 디렉터리는 파일 목록을 저장하며 디렉터리의 권한은 해당 파일 목록에 대한 권한입니다.
**그러므로 디렉토리의 r 권한은 파일 목록을 읽을 수 있음을 의미하고, w 권한은 파일 목록을 수정할 수 있음을 의미합니다. 특히, 파일 추가, 삭제 및 파일 이름 수정은 가능합니다. 디렉토리는 작업 디렉토리이며 x 권한은 디렉토리를 작업 디렉토리로 만들 수 있습니다. 이는 r 및 w 권한의 기본입니다. 디렉토리를 작업 디렉토리로 만들 수 없으면 파일 목록을 읽거나 수정할 수 없습니다. 파일 목록. **
# # ln [-sf] source_filename dist_filename
-s : 默认是 hard link,加 -s 为 symbolic link
-f : 如果目标文件存在时,先删除目标文件
파일 이름과 inode 번호를 기록하기 위해 디렉터리에 항목을 만듭니다. 이 inode는 소스 파일의 inode입니다. 항목을 삭제하면 참조 수가 0이 아닌 한 파일은 계속 존재합니다. 다음과 같은 제한 사항이 있습니다. 파일 시스템을 확장할 수 없고 디렉터리를 연결할 수 없습니다.
# # ln /etc/crontab .
# # ll -i /etc/crontab crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
심볼릭 링크 파일은 소스 파일의 절대 경로를 저장하며, 읽을 때 소스 파일에 위치하게 됩니다. 이는 Windows에 대한 바로 가기로 이해될 수 있습니다. 원본 파일을 삭제하면 링크된 파일을 열 수 없습니다. 디렉토리에 대한 링크를 만들 수 있습니다.
# # ll -i /etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 - > /etc/crontab
# # cat [-AbEnTv] filename
-n : 打印出行号,连同空白行也会有行号,-b 不会
# # head [-n number] filename
-n : 后面接数字,代表显示几行的意思
명령 검색.
# # which [-a] command
-a : 将所有指令列出,而不是只列第一个
파일 검색. 몇 가지 특정 디렉토리만 검색하기 때문에 더 빠릅니다. ## whereis [-bmsu] 디렉토리 이름/파일 이름
파일 검색. 키워드나 정규식을 사용하여 검색할 수 있습니다. 찾기는 /var/lib/mlocate/ 데이터베이스를 사용하여 검색합니다. 메모리에 저장되고 하루에 한 번 업데이트되므로 새로 생성된 파일을 검색하는 데 찾기를 사용할 수 없습니다. updateb를 사용하여 데이터베이스를 즉시 업데이트할 수 있습니다.
# # locate [-ir] keyword
-r: 正则表达式
파일 검색. 파일의 속성과 권한을 사용하여 검색할 수 있습니다.
# # find [basedir] [option]
example: find . -name " shadow* "
(1) 시간 관련 옵션
-mtime n : 列出在 n 天前的那一天修改过内容的文件
-mtime +n : 列出在 n 天之前 (不含 n 天本身) 修改过内容的文件
-mtime -n : 列出在 n 天之内 (含 n 天本身) 修改过内容的文件
-newer file : 列出比 file 更新的文件
(2) 파일 소유자 및 그룹 관련 옵션
-uid n
-gid n
-user name
-group name
-nouser : 搜索拥有者不存在 /etc/passwd 的文件
-nogroup: 搜索所属群组不存在于 /etc/group 的文件
(3) 파일 권한 및 이름과 관련된 옵션
-name filename
-size [+-]SIZE: 搜寻比 SIZE 还要大 (+) 或小 (-) 的文件。这个 SIZE 的规格有: c: 代表 byte,k: 代表 1024bytes。所以,要找比 50KB 还要大的文件,就是 -size +50k
-type TYPE
-perm mode : 搜索权限等于 mode 的文件
-perm -mode : 搜索权限包含 mode 的文件
-perm /mode : 搜索权限包含任一 mode 的文件
Linux에는 많은 압축 파일 이름이 있으며 일반적인 이름은 다음과 같습니다.
확대 | 압축기 |
---|---|
*.지 | 압박 붕대 |
*.지퍼 | 지퍼 |
*.gz | gzip |
*.bz2 | bzip2 |
*.xz | xz |
*.타르 | tar 프로그램으로 패키지된 데이터는 압축되지 않습니다. |
*.tar.gz | tar 프로그램으로 패키지하고 gzip으로 압축한 파일 |
*.tar.bz2 | tar 프로그램으로 패키지하고 bzip2로 압축한 파일 |
*.tar.xz | tar 프로그램으로 패키지하고 xz로 압축한 파일 |
gzip은 Linux에서 가장 널리 사용되는 압축 명령이며,compress, zip 및 gzip으로 압축된 파일의 압축을 풀 수 있습니다.
gzip 압축 후에는 소스 파일이 더 이상 존재하지 않습니다. 9가지 압축 수준을 사용할 수 있습니다. zcat, zmore 및 zless를 사용하여 압축 파일의 내용을 읽을 수 있습니다.
$ gzip [-cdtv#] filename
-c : 将压缩的数据输出到屏幕上
-d : 解压缩
-t : 检验压缩文件是否出错
-v : 显示压缩比等信息
-# # : ## 为数字的意思,代表压缩等级,数字越大压缩比越高,默认为 6
gzip보다 높은 압축률을 제공합니다. 보기 명령: bzcat, bzmore, bzless, bzgrep.
$ bzip2 [-cdkzv#] filename
-k : 保留源文件
bzip2보다 더 나은 압축률을 제공합니다. gzip, bzip2, xz의 압축률이 지속적으로 최적화되는 것을 볼 수 있습니다. 그러나 압축률이 높을수록 압축 시간이 길어진다는 점에 유의해야 합니다.
보기 명령: xzcat, xzmore, xzless, xzgrep.
$ xz [-dtlkc#] filename
압축 명령은 하나의 파일만 압축할 수 있는 반면, 팩은 여러 파일을 하나의 큰 파일로 압축할 수 있습니다. Tar는 패키징에만 사용할 수 있는 것이 아니라, gip, bzip2, xz를 사용하여 패키징된 파일을 압축할 수도 있습니다.
$ tar [-z | -j | -J] [cv] [-f 新建的 tar 文件] filename... ==打包压缩
$ tar [-z | -j | -J] [tv] [-f 已有的 tar 文件] ==查看
$ tar [-z | -j | -J] [xv] [-f 已有的 tar 文件] [-C 目录] ==解压缩
-z : 使用 zip;
-j : 使用 bzip2;
-J : 使用 xz;
-c : 新建打包文件;
-t : 查看打包文件里面有哪些文件;
-x : 解打包或解压缩的功能;
-v : 在压缩/解压缩的过程中,显示正在处理的文件名;
-f : filename: 要处理的文件;
-C 目录 : 在特定目录解压缩。
용법 | 주문하다 |
---|---|
포장 및 압축 | tar -jcv -f filename.tar.bz2 압축할 파일 또는 디렉터리의 이름 |
확인하다 | tar -jtv -f 파일 이름.tar.bz2 |
압축을 푼다 | tar -jxv -f filename.tar.bz2 -C 압축을 풀 디렉터리 |
Shell을 통해 서비스를 제공하도록 커널에 요청할 수 있으며 Bash는 Shell의 한 유형입니다.
명령 기록: 사용된 명령 기록 명령 및 파일 완성: 바로 가기 키: tab 이름 지정 별칭: 예를 들어 lm은 ls -al 쉘 스크립트의 별칭입니다. 와일드카드: 예를 들어 ls -l /usr/bin/X*는 /usr/를 나열합니다. bin X로 시작하는 아래의 모든 파일
$
추가하거나 ${}
형식을 사용할 수 있습니다.$ x=abc
$ echo $x
$ echo ${x}
변수 내용에 공백이 있는 경우에는 큰따옴표나 작은따옴표를 사용해야 합니다.
x="lang is $LANG"
이면 x is lang 값은 zh_TW.UTF-8입니다.x='lang is $LANG'
이고 x is lang 값은 $LANG
입니다. 指令
나 $(指令)
사용하여 명령어의 실행 결과를 변수에 할당할 수 있습니다. 예를 들어, version=$(uname -r), 버전 값은 4.15.0-22-generic입니다. 내보내기 명령을 사용하여 사용자 정의 변수를 환경 변수로 변환할 수 있습니다. 소위 하위 프로그램은 현재 Bash에서 생성된 하위 Bash입니다. Bash 변수는 배열과 정수로 선언될 수 있습니다. 숫자 유형에는 부동 소수점 숫자가 없습니다. 선언하지 않은 경우 기본값은 문자열 유형입니다. 변수는 선언 명령을 사용하여 선언됩니다. $ declare [-aixr] variable
-a : 定义为数组类型
-i : 定义为整数类型
-x : 定义为环境变量
-r : 定义为 readonly 类型
[ ]를 사용하여 배열을 색인화합니다.
$ array[1]=a
$ array[2]=b
$ echo ${array[1]}
$PATH
변수에 지정된 검색 경로 순서대로 첫 번째 명령어를 찾아 실행합니다.리디렉션은 표준 입력, 표준 출력 및 표준 오류 출력 대신 파일을 사용하는 것을 의미합니다.
1 | 암호 | 연산자 |
---|---|---|
표준 입력(stdin) | 0 | < 또는 << |
표준 출력(stdout) | 1 | > 또는 >> |
표준 오류 출력(stderr) | 2 | 2> 또는 2>> |
그 중 하나의 화살표는 덮어쓰기 방식의 리디렉션을 나타내고, 두 개의 화살표는 추가 방식의 리디렉션을 나타냅니다.
불필요한 표준 출력 및 표준 오류 출력은 /dev/null로 리디렉션될 수 있으며 이는 휴지통에 버리는 것과 같습니다. 표준 출력과 표준 오류 출력을 동시에 파일로 리디렉션해야 하는 경우 하나의 출력을 다른 출력으로 변환해야 합니다. 예를 들어 2>&1은 표준 오류 출력을 표준 출력으로 변환하는 것을 의미합니다.
$ find /home -name .bashrc > list 2>&1
$ nohup latte-dock --replace > /dev/null 2>&1 & # 没有任何输出的后台任务
파이프라이닝은 한 명령의 표준 출력을 다른 명령의 표준 입력으로 사용하는 것입니다. 파이프라이닝은 원하는 것을 얻기 전에 데이터를 여러 단계로 처리해야 할 때 사용할 수 있습니다.
개별 파이프라인 명령을 구분하려면 명령 사이에 |를 사용하세요.
$ ls -al /etc | less
cut은 데이터를 분할하고 원하는 부분을 추출합니다. 분할 프로세스는 한 줄씩 진행됩니다.
$ cut
-d : 分隔符
-f : 经过 -d 分隔后,使用 -f n 取出第 n 个区间
-c : 以字符为单位取出区间
$ last
root pts/1 192.168.201.101 Sat Feb 7 12:35 still logged in
root pts/1 192.168.201.101 Fri Feb 6 12:13 - 18:46 (06:33)
root pts/1 192.168.201.254 Thu Feb 5 22:37 - 23:53 (01:16)
$ last | cut -d ' ' -f 1
$ export
declare -x HISTCONTROL= " ignoredups "
declare -x HISTSIZE= " 1000 "
declare -x HOME= " /home/dmtsai "
declare -x HOSTNAME= " study.centos.vbird "
.....(其他省略).....
$ export | cut -c 12-
정렬하는 데 사용됩니다.
$ sort [-fbMnrtuk] [file or stdin]
-f : 忽略大小写
-b : 忽略最前面的空格
-M : 以月份的名字来排序,例如 JAN,DEC
-n : 使用数字
-r : 反向排序
-u : 相当于 unique,重复的内容只出现一次
-t : 分隔符,默认为 tab
-k : 指定排序的区间
$ cat /etc/passwd | sort -t ' : ' -k 3
root:x:0:0:root:/root:/bin/bash
dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash
alex:x:1001:1002::/home/alex:/bin/bash
arod:x:1002:1003::/home/arod:/bin/bash
중복 데이터는 하나만 가져올 수 있습니다.
$ uniq [-ic]
-i : 忽略大小写
-c : 进行计数
$ last | cut -d ' ' -f 1 | sort | uniq -c
1
6 (unknown
47 dmtsai
4 reboot
7 root
1 wtmp
출력 리디렉션은 출력 내용을 파일로 리디렉션하며 tee는 이 기능을 완료할 수 있을 뿐만 아니라 화면의 출력을 보존할 수도 있습니다. 즉, tee 명령을 사용하면 파일과 화면 모두에 출력이 전송됩니다.
$ tee [-a] file
줄의 문자를 삭제하거나 문자를 바꾸는 데 사용됩니다.
$ tr [-ds] SET1 ...
-d : 删除行中 SET1 这个字符串
$ last | tr ' [a-z] ' ' [A-Z] '
탭 문자를 공백 문자로 변환합니다.
$ col [-xb]
-x : 将 tab 键转换成对等的空格键
탭을 특정 수의 공백으로 변환합니다. 기본값은 8입니다.
$ expand [-t] file
-t : tab 转为空格的数量
동일한 데이터가 포함된 행을 병합합니다.
$ join [-ti12] file1 file2
-t : 分隔符,默认为空格
-i : 忽略大小写的差异
-1 : 第一个文件所用的比较字段
-2 : 第二个文件所用的比较字段
두 줄을 직접 붙여넣으세요.
$ paste [-d] file1 file2
-d : 分隔符,默认为 tab
분할은 파일을 여러 파일로 나눕니다.
$ split [-bl] file PREFIX
-b : 以大小来进行分区,可加单位,例如 b, k, m 等
-l : 以行数来进行分区。
- PREFIX : 分区文件的前导名称
g/re/p(정규식을 전역적으로 검색하고 인쇄), 정규식을 사용하여 전역적으로 검색하고 인쇄합니다.
$ grep [-acinv] [--color = auto] 搜寻字符串 filename
-c : 统计个数
-i : 忽略大小写
-n : 输出行号
-v : 反向选择,也就是显示出没有 搜寻字符串 内容的那一行
--color=auto : 找到的关键字加颜色显示
$ grep -n ' the ' regular_express.txt
8:I can ' t finish the test.
12:the symbol ' * ' is represented as start.
15:You are the best is mean you are the no. 1.
16:The world Happy is the same with "glad".
18:google is the best tools for search keyword
{ 및 }는 셸에서 특별한 의미를 갖기 때문에 이스케이프 문자를 사용하여 이스케이프해야 합니다.
$ grep -n ' go{2,5}g ' regular_express.txt
형식화된 출력의 경우. 파이프라인 명령에 속하지 않습니다. printf로 데이터를 전송할 때 $() 형식을 사용해야 합니다.
$ printf ' %10s %5i %5i %5i %8.2f n ' $( cat printf.txt )
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
awk라는 이름은 Alfred Aho, Peter Weinberger 및 Brian Kernighan에 의해 만들어졌습니다.
awk는 한 번에 한 줄씩 처리합니다. 각 필드의 이름 지정 방법은 필드입니다.