【期末复习、面试】Linux

Linux学习-目录

一、课程简介(前言)

  本博客主要了记录Linux学习过程中的一些重难点(包括常见命令、SHELL编程等内容),适合期末复习以及研究生面试等浏览。
  操作系统课程是计算机及相关专业的一门专业基础课,而UNIX/Linux操作系统以其稳定、开源等特性是操作系统的典型实现。通过“Unix/Linux体系及编程”课程的学习,使学生能了解类UNIX操作系统的发展历程基本类型及各自特点掌握UNIX/Linux的常用命令使用和操作方法理解UNIX/Linux操作系统的体系结构基本组成和工作原理,能够作为系统管理员进行日常的配置管理,掌握UNIX/Linux环境下的C/C++语言的应用层和内核层的编程方法初步掌握和应用UNIX/Linux环境下Shell编程的基本语法、流程和方法

二、 字符操作类相关命令

2.0 掌握重点

  • 运行级别

见2.1部分

  • 描述什么是管道,管道的好处是什么?

见2.3部分

  • 基本通配符的使用

见2.7部分

  • 多重命令

见2.2.4部分

  • 重定向

见2.4部分

  • chmod修改权限,与umask的配合使用

见2.5部分

  • vi三种模式及典型命令:Command Mode;Insert Mode;Last Line Mode

见2.6.1部分

  • vi简单命令

见2.6部分

  • 本节相关命令:runlevel;pwd;cd;ls;locate;echo;set;env;printenv;cat;head;tail;more;less;grep;chmod;history;umask

2.1 运行级别 runlevel:print previous and current SysV runlevel.

runlevel:显示上次的运行级别和当前的运行级别,“N”表示没有上次的运行级别。

运行级别:

man runlevel

2.2 相关环境变量:echo;env;printenv;set cat /etc/environment

2.2.1 显示环境变量

env:run a program in a modified environment

echo:用于显示某个/某几个环境变量

cat /etc/environment

2.2.2 uname:可显示电脑以及操作系统的相关信息

uname 及 uname -a:a-all

Linux:操作系统(print the kernel name)名称(uname -s)s-sysname
zoushilong:显示网络节点上的主机名(print the network node hostname)(uname -n)n-nodename
5.4.0-90-generic:显示内核发行版本号、内核版本号(print the kernel release)(uname -r)r-release
#101-Ubuntu SMP Fri Oct 15 20:00:55 UTC 2021:系统版本及时间(内核版本)(print the kernel version)(uname -v)v-version
x86_64:显示主机的硬件架构名称(print the machine hardware name)(uname -m)m-machine
x86_64:打印处理器类型(print the processor type or"unknown")(uname -p)p-processor
x86_64:打印硬件平台(print the hardware platform or"unknown")(uname -i)
GNU/Linux:打印操作系统名称(print the operating system)(uname -o)

在这里插入图片描述

在这里插入图片描述

2.3 文件相关命令

2.3.1 ls:list directory contents

ls:list directory contents

在这里插入图片描述

ls -l

在这里插入图片描述
-rw-r–r–:为文件的类型及权限。

  • 第10位为d,表示目录;为-,表示普通文件;为l,表示链接文件
  • 第7~9位,表示文件所有者owner的权限
  • 第4~6位,表示同组用户group的权限
  • 第1~3位,表示其他用户others的权限

关于权限在这里插入图片描述1:表示链接数,表示有多少个文件链接到inode号码

  • 对于目录,链接数至少为2
  • 对于普通文件,链接数大于/等于1

root:所有者owner

root:所属群组

0:文件大小

  • 对于目录,默认为4K,即4096
  • 对于普通文件,大小为ASCII码的个数

222.txt:文件名

ls -a

在这里插入图片描述
ls -l 1.txt 等同于 ll 1.txt

在这里插入图片描述

2.3.2 cd:change the working directory

2.3.3 pwd:print name of current/working directory

在这里插入图片描述

2.3.4 rm:remove files or directories

在这里插入图片描述
rm -i 1.txt:提示是否进行删除

2.3.5 mkdir:make directories

在这里插入图片描述
嵌套创建:mkdir -p father/son

2.3.6 rmdir:remove empty directories

在这里插入图片描述
嵌套删除:rmdir -p father/son

2.3.7 cp:copy files and directories

DESCRIPTION:Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

在这里插入图片描述
cp 1.txt doc/2.txt:复制同时取别名
cp 1.txt doc/:复制文件到doc目录下
cp ../1.txt ./:复制上层目录下的1.txt文件到当前目录下

2.3.8 mv:move (rename) files

DESCRIPTION:Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

在这里插入图片描述
mv 1.txt 2.txt:文件改名,源文件1.txt不存在,同cp的不同

2.3.9 lpr/lpq/lprm

lpr:off line print
【DESCRIPTION:lpr uses a spooling daemon to print the named files when facilities become available.】
lpq:spool queue examination program
【DESCRIPTION:lpq examines the spooling area used by lpd(8) for printing files on the line printer, and reports the status of the specified jobs or all jobs associated with a user.】
lprm:remove jobs from the line printer spooling queue
【DESCRIPTION:lprm will remove a job, or jobs, from a printer’s spool queue. 】

2.3.10 echo:display a line of text

DESCRIPTION:Echo the STRING(s) to standard output.

在这里插入图片描述

2.3.11 cat:concatenate files and print on the standard output

连接文件并在标准输出上打印

cat md.c:查看文件内容

在这里插入图片描述
cat -n md.c:显示行号

在这里插入图片描述

2.3.12 head:output the first part of files

DESCRIPTION:Print the first 10 lines of each FILE to standard output.

在这里插入图片描述

2.3.13 tail:output the last part of files

DESCRIPTION:Print the last 10 lines of each FILE to standard output.

在这里插入图片描述

2.3.14 more:file perusal filter for crt viewing

【DESCRIPTION:more is a filter for paging through text one screenful at a time.】More是一个过滤器,用于一次一个屏幕地对文本进行分页。回车向下翻1行,空格向下翻1页,q退出

cat -n md.c | more:常用命令

在这里插入图片描述

2.3.15 less:opposite of more

2.3.16 locate:find files by name

【DESCRIPTION:locate reads one or more databases prepared by updatedb(8) and writes file names matching at least one of the PATTERNs to standard output, one per line.】
locate读取updatedb(8)准备的一个或多个数据库,并将匹配至少一个pattern的文件名写入标准输出,每行一个。

locate hello

在这里插入图片描述

2.3.17 grep:print lines that match patterns

grep hello 1.txt:显示包含关键字的一整行。

在这里插入图片描述
grep -c hello 1.txt:计算符合样式的列数

在这里插入图片描述
输出结果为:1、5、6、7四行内容,且第6行中hello记为1次

2.2 man;命令历史和Tab自动补全

2.2.1 man:an interface to the system reference manuals

系统参考手册的界面
man ls

在这里插入图片描述

man 3 printf

在这里插入图片描述
man man:下表显示了手册的章节编号,后跟它们所包含的页面类型。

在这里插入图片描述

  • 一:可执行程序或SHELL命令
  • 二:系统调用(内核提供的函数)
  • 三:库调用(程序库中的函数)
  • 四:特殊文件(通常在 /dev 中找到)
  • 五:文件格式和约定,例如 /etc/passwd
  • 六:游戏
  • 七:杂项(包括宏包和约定),例如 man(7)、groff(7)
  • 八:系统管理命令(通常仅适用于 root 用户)
  • 九:内核例程 [非标准]

2.2.2 命令历史history:GNU History Library

【DESCRIPTION:Many programs read input from the user a line at a time. The GNU History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones.】
许多程序从用户处一次读取一行输入。GNU History库能够跟踪这些行,将任意数据与每一行关联起来,并利用来自前一行的信息来组成新的行。
history

在这里插入图片描述
!2015:运行第2015行命令

!d:运行最近以d开头的命令

上下箭头

2.2.3 Tab自动补全(命令&参数)

按一次Tab:若能匹配,便会直接补全
按两次Tab:匹配以相同字母打头的相关文件,并输出相关文件

在这里插入图片描述

2.2.4 使用多重命令

date;tom;uname:用;不管结果真假,均执行。即执行所有命令,包含错误

在这里插入图片描述
date&&tom&&uname:第一个操作是false就停止

在这里插入图片描述
date||tom||uname:第一个操作是true就停止

在这里插入图片描述

2.3 管道:pipelines

2.3.1什么是管道

什么是管道?
  管道是进程间通信的一种实现方式,一个命令的输出可以通过管道做为另一个命令的输入。

2.3.2 管道的好处

使用管道的好处:
  ①将逻辑上简单的操作串起来,实现巧妙的工作
  ②速度快,管道是内存操作,不需要I/O读写,不涉及磁盘操作。即提高速度的同时,节省了大量的I/O读写。

在这里插入图片描述
echo xyy myy lyy

在这里插入图片描述
echo xyy myy lyy | tr " " "\n"

在这里插入图片描述
echo xyy myy lyy | tr " " "\n" | sort

在这里插入图片描述
echo xyy myy lyy | tr " " "\n" | sort -r

在这里插入图片描述

2.4 重定向

在这里插入图片描述
ls > 2.txt

在这里插入图片描述
ls tom 2> ls.err

在这里插入图片描述
cat < ls.err

在这里插入图片描述
ls xyymyy 2>> ls.err

在这里插入图片描述
cat -n unistd.h | grep STD

在这里插入图片描述

2.5 修改权限chmod:change files mode bits

权限类型:

在这里插入图片描述
chmod

在这里插入图片描述
chmod u+x 1.txt:给1.txt文件user用户添加的x权限,即执行权限。
chmod a+x,o-w 1.txt:给1.txt文件所有用户添加可执行权限,others用户删除写权限
chmod u=rwx,g=rw,o=x 1.txt:直接给1.txt文件赋予权限
chmod octal 1.txt:八进制修改文件权限,例如chmod 777 1.txt,默认权限为:664
chmod -R 755 doc/:统一递归修改文件权限

2.6 字符编辑器vi:Vi IMproved, a programmer’s text editor

  • 职责: 字符模式配置及系统维护工作
  • 启动vi: vi
  • 离开vi: :q回车

2.6.1 vi的三种模式的转换

在这里插入图片描述

  • 进入vi

在这里插入图片描述

2.6.2 光标移动类命令

在这里插入图片描述

2.6.3 屏幕翻滚类命令

在这里插入图片描述

2.6.4 删除相关命令

在这里插入图片描述

2.6.5 复制相关命令

在这里插入图片描述

2.6.6 搜素及替换命令

在这里插入图片描述

2.6.7 Last Line Mode命令

在这里插入图片描述
set nu:打开行号 set nonu:关闭行号

在这里插入图片描述
:1,3 co 5:将1-3行的内容拷贝到第5行

在这里插入图片描述
:1,3 m 5:将第1-3行的内容移动到第5行

在这里插入图片描述
:r 2.txt:在光标位置加载2.txt新文件

在这里插入图片描述
:e:在编辑当前文件的情况下不退出,继续编辑新的文件
:Sex:水平分割窗口,下半部分文件的内容,上半部分目录树。

在这里插入图片描述
   第二行:当前文件所在路径
   第三行:按照文件名排序
   …表示上一层目录 ,按回车进入
   .当前目录,按回车进入
   按q退出,退出分屏

Vex:垂直分割,Ctrl+W:在两个窗口间进行切换

在这里插入图片描述
:set spell:检查文档中单词错误

在这里插入图片描述
!cal:在不退出vi的情况下,运行一个命令

在这里插入图片描述
r!cal:在不退出vi的前提下,运行一个SHELL命令,将命令的运行结果贴在当前文件中

在这里插入图片描述
   将一个命令的运行结果自动贴到文档中
vimtutor:vi帮助文档(了解)
vimdiff:区别版本的信息,两个文件的信息(了解)

2.7 补充:通配符和简单正则

在这里插入图片描述

三、 Linux文件系统

3.1 Linux和DOS文件系统的区别

在这里插入图片描述

3.2 Linux有哪些文件类型;Linux文件属性中各字段的含义

在这里插入图片描述
查看文件类型:ls -l 文件名

在这里插入图片描述
file命令
file 1.txt

在这里插入图片描述
file md.c

在这里插入图片描述
file stat.h

在这里插入图片描述
file first.s

在这里插入图片描述
Linux源代码包括.c文件、.h文件以及1/3左右的汇编文件(.s)。

链接文件:file doc/

在这里插入图片描述
在这里插入图片描述
l:link
file stdin

在这里插入图片描述
标准的输入设备:0、标准的输出设备(stdout):1、标准的错误输出(stderr):2

块设备特殊文件(/dev目录下)
在这里插入图片描述
  sda:第一个设备
  第27个:sdaa
  sda1: 第一个设备的第一个分区

file sda

在这里插入图片描述

字符设备特殊文件:

在这里插入图片描述
  文件在内核中通过数字进行管理,对于设备特殊文件,sda设备(8,0),主设备号8,次设备号0,owner属于root,group属于磁盘disk。内核中通过major(读取主设备号)、minor(读取次设备号)函数进行管理。tty主设备号为5,次设备号为0。

file tty

在这里插入图片描述

套接字文件:网络编程中一种特殊文件,内存可以直接从网卡读或写文件,RDMA(去对方网卡中读)

在这里插入图片描述

3.3 Linux根目录下一般有哪些目录?主要目录的含义与作用

在这里插入图片描述
用户系统的子目录 用户登录的子目录 路径名
bin:所有二进制命令所在目录(可执行命令、普通用户命令文件)
sbin:超级用户命令所在目录(管理员的命令文件)
home:普通用户数据所在的目录(/user)
dev:所有设备文件所在目录
usr (Unix Software Resource/Release) :系统存放程序的目录(源代码)
proc:进程内核信息存放的目录(partitions,进程管理详细介绍)
var:存放经常变动的文件目录(随着时间的推移不断变化)

lib/lib64:库文件

在这里插入图片描述
root:管理员的
sys:系统管理

在这里插入图片描述
boot:系统启动
lost+found:失物招领

3.4 相关命令

3.4.1 file:determine file type

见前面内容

3.4.2 dd:convert and copy a file转换和复制文件

在这里插入图片描述

man dd

在这里插入图片描述
bs:block sizes,一次读取多大的bs
conunt:数量,转换多少块
if:input file
of:output file

dd if=/dev/hdx of=/dev/hdy:整盘备份,设备是文件。配置大型服务器,32个结点,配好一个结点,结合脚本
of=/path/to/image:在硬盘的第一个扇区中521字节,MBR-主引导记录
if=/dev/urandom:产生随机数,不断向目标文件写随机数,表明销毁硬盘中数据,不同于删除,不易恢复

在这里插入图片描述
if=/var/test of=/dev/null:纯读速度,null可以无限接收文件,并没有真正去写,只是读

在这里插入图片描述
if=/dev/zero of=/var/test:并没有真正读,真正地写

在这里插入图片描述

3.4.3 fdisk:manipulate disk partition table操作磁盘分区表

在这里插入图片描述

每个分区也是通过数字进行管理
sudo fdisk -l /dev/sda2

在这里插入图片描述
Disk:disk文件、大小20GiB、具体大小:2…、sectors:扇区
真正一次读取一个扇区的大小:512
扇区大小(虚地址/实地址)大小:512,方便换算
I/O大小:一次读取多少最优(最小/最优)

sudo fdisk -l:打印所有分区的信息

3.4.4 sfdisk:display or manipulate a disk partition table显示或操作磁盘分区表

sudo sfdisk -g:显示几何的信息

在这里插入图片描述
硬盘最重要的三个几何参数:heads:磁头、sectors:扇区、track:整个扇区磁道、cylinders:柱面

sudo sfdisk -T:现在的操作系统支持哪些文件系统

在这里插入图片描述
Name:文件系统的名字、16进制

3.4.5 man:an interface to the system reference manuals

man查看帮助文档

3.4.6 wc:print newline, word, and byte counts for each file打印每个文件的换行符、字和字节计数

统计文件中有行,有个words,有*个characters
wc -l 1.txt

在这里插入图片描述
wc -w 1.txt
wc -c 1.txt

在这里插入图片描述
ls | wc -l:统计当前目录下面有多少的文件

在这里插入图片描述
ls /dev/tty* | wc -l:筛选并统计dev目录下tty文件有多少个

在这里插入图片描述

3.4.7 grep:print lines matching a pattern(把匹配关键字的一整行显示出来)

在某个文件中搜索某个关键字

grep hello 1.txt:显示文件中包含hello的行

grep -n hello 1.txt:显示文件中包含hello的行的行号

grep -n -1 hello 1.txt:显示文件中包含hello的行的上一(-2)行和下一(-2)行、上下文(n-line number)

在这里插入图片描述
grep -c hello 1.txt:显示文件中包含hello的行的次数,一行两个hello算3次(c-count)

在这里插入图片描述
grep -v hello 1.txt:显示文件中不匹配hello的行的有哪些(v-invert match)

在这里插入图片描述
grep -i hello 1.txt:显示文件中匹配hello的行的有哪些(忽略掉大小写的区别)

在这里插入图片描述
grep -n -i hello 1.txt 99.txt:搜索多个文件中包含hello的行

在这里插入图片描述
在这里插入图片描述
cat /etc/passwd | grep stu:查看文件中有多少stu前缀的用户

3.4.8 cmp:compare two files byte by byte

在这里插入图片描述

cmp 1.txt 2.txt:只给出两个文件第一个不同的地方

在这里插入图片描述
cmp 1.txt 2.txt:修改一行内容后,执行cmp命令

在这里插入图片描述
第二行,第41个byte不一样

3.4.9 diff:compare files line by line

diff 1.txt 2.txt:逐行比较两个文件。2c2 修改一行

在这里插入图片描述
diff 1.txt 2.txt:逐行比较两个文件。
分隔符 — 表示上一个文件和下一个文件。2c2想使两个文件一样需要修改第二行、4a5想使两个文件一样要增加一行,在第四行的位置增加第五行,第五行内容为空行。

在这里插入图片描述

3.4.10 sdiff:side-by-side merge of file differences文件差异的并行合并

sdiff 1.txt 2.txt:左右两边分栏对比,较为常用的方式、简单代码对比、多个版本代码的比较

在这里插入图片描述

3.4.11 sort:sort lines of text files 按照行去排序

在这里插入图片描述
以上命令均不修改源文件内容

sort student_records:按第一列首字母的字母顺序排序

在这里插入图片描述
sort student_records > student_records.sorted:按第一列首字母的字母顺序排序,并保存在.sorted文件中

在这里插入图片描述
sort -r student_records:按第一列首字母的字母顺序逆序排序

在这里插入图片描述
sort -k 4 student_records:以第4列为关键字进行排序

在这里插入图片描述
sort -k 4 -k 3 student_records:以第四个关键字排序,再指定第二个关键字。若第4列关键字相同,按另一个关键字进行排序
sort sortnum.txt:以字符排序
sort -n sortnum.txt:以数值排序,而不是字符

在这里插入图片描述
sort -t ';' com.txt:以;为分隔符,第1列为关键字排序(student_records文件:用tab键分隔浪费空间、/etc/passwd用:分隔)类似的文件需要告诉 用什么分隔的
sort -t ';' -k2 com.txt:以;为分隔符,第2列为关键字排序

在这里插入图片描述
sort -t ';' -k2 -n com.txt:以;为分隔符,第2列为关键字按数值大小进行排序

在这里插入图片描述
sort -k 1.3 com.txt:以第一个字段,第三个字符为关键字进行排序

在这里插入图片描述
sort *.txt > txt.sorted.file:将文件内容统一合并然后进行排序

在这里插入图片描述

3.4.12 uniq:report or omit repeated lines报告/删除重复的行

去除邻近的、紧挨着的、连续重复的行adjacent
在这里插入图片描述
sort student_records | uniq:先对文件进行排序然后进行去重处理

在这里插入图片描述
sort student_records | uniq -d:先对文件进行排序,然后查看谁重复了(对于连续重复的一组只输出一条)

在这里插入图片描述
sort -u student_records:等价命令。先排序然后去重(sort本身可以去重-u参数)

在这里插入图片描述
uniq student_records:必须先排序,然后去重

在这里插入图片描述
实验内容:统计上课信息 w

在这里插入图片描述
cat 201006041620 |grep unix|wc -l:查看文件内容,并输出含unix的行的个数(需要进行过滤)

在这里插入图片描述
cat 201006041620 |grep unix|sort|wc -l:查看文件内容,对含unix的行的第一个关键字进行排序,并输出行的个数
cat 201006041620 |grep unix|sort|uniq|wc -l:查看文件内容,对含unix的行的第一个关键字进行排序并去重,输出行的个数

在这里插入图片描述
cat 201006041620 |cut -c -9|grep unix|sort|uniq|wc -l:查看文件内容,先提取出前9个字符,对含unix的行的第一个关键字进行排序并去重,输出行的个数

在这里插入图片描述
cat 201006041620|cut -c -9:看文件内容、切前面9个

在这里插入图片描述

3.4.13 sed:stream editor for filtering and transforming text用于过滤和转换文本的流编辑器

在这里插入图片描述

sed '' 1.txt:输出整个文本

在这里插入图片描述
sed -n '' 1.txt:什么模式也没有指定、等于关闭输出、-n仅显示模式匹配的结果
sed -n '5p' 1.txt:只输出第5行

在这里插入图片描述
sed -n 'p' 1.txt:显示所有的行
sed -n '2~2p' 1.txt:打印偶数行,第2行开始,步长为2
sed -n '1,3!p' 1.txt:打印1~3行以外的行(!表示取反)
sed '1,3d' 1.txt:删除1~3行
sed '1,3a &&&&&&&&&&' 1.txt:1~3行每一行后添加&&&&&&&&&&

在这里插入图片描述
sed '1,3y/abcde/ABCDE/' 1.txt:1~3行对应字母变大写
sed '1d' 1.txt 2.txt:对多个文件同时进行处理,删除第1行
sed -e 's/hello/hi/g' 1.txt:将文件中所有的hello替换为hi
sed -e 's/popular/wellknown/g' sed.txt > sed.txt.new:将sed.txt文件中所有的popular替换为wellknown,重定向到sed.txt.new
cat script.sed:将参数存起来

在这里插入图片描述
sed -f script.sed sed.txt > sed.txt.new:-f读取这个文件,读取这个文件中的参数对该文件处理(适用于自动生成的文件)
sed -n '/hello/w hello.txt' 1.txt:在1.txt文件中包含hello的行写入hello.txt(w即write)

在这里插入图片描述
sed -n l 1.txt:字母l,显示文件用什么进行分隔的,是$(行尾)或者\t即tab键(常用该命令查看分隔符号进行提取)

在这里插入图片描述
在这里插入图片描述
sed -i:直接对原始文件进行操作

3.4.14 rev:reverse lines characterwise反转线字符

rev 1.txt:行内反序输出、行里面的内容反序

在这里插入图片描述

3.4.15 tac:concatenate and print files in reverse反向连接和打印文件

tac 1.txt:文件内的行反序输出、最后一行变第一行

在这里插入图片描述

3.4.16 nl:number lines of files给文件加行号

Write each FILE to standard output, with line numbers added.
nl 1.txt:给文件加行号(默认空行不加编号)

在这里插入图片描述
cat相关命令 cat -b(覆盖掉-n):空行不加行号,同nl

在这里插入图片描述
在这里插入图片描述
nl -n rz 1.txt:按照某种格式rz(以0开始编号,左对齐)给文件加行号

在这里插入图片描述

3.4.17 stat:display file or file system status显示文件或文件系统状态

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
ll 1.txt:查看文件最后一次被修改的时间(Mtime),cp命令会改变文件的修改时间

在这里插入图片描述

ls -lc 1.txt:查看文件的状态时间(Ctime)、文件属性状态被修改的时候(chmod)
ls -lu 1.txt:查看文件的(最后一次读的)访问时间(Atime)、cat、more会改变,stat、ls不会改变

在这里插入图片描述
stat 1.txt:查看文件的三个时间

在这里插入图片描述
Links:文件链接数
inode:ls -i 1.txt:索引号
Uid:userID、Gid:Group ID
Acess:最后一次访问的时间、Modify:最后一次修改的时间、Change:修改属性的时间
chmod改变文件修改属性的时间

在这里插入图片描述
cat 1.txt > 1.txt.cat 不修改源文件1.txt的三个时间
vi 1.txt修改内容存盘退出,三个时间均修改了

在这里插入图片描述
touch -a:修改acesstime、changetime
touch -m:修改modifytime、changetime
touch:修改三个时间
touch -a 1.txt

在这里插入图片描述
touch 1.txt:修改三个时间
touch filename:文件存在则修改其时间,否则创建该文件。

在这里插入图片描述

3.4.18 ftp基本命令

3.4.19 其他命令

du -h:查看目录的容量

在这里插入图片描述
df -i:文件系统的磁盘使用情况统计

在这里插入图片描述
cat /proc/filesystems:查看Linux已载入到内存中的文件系统

在这里插入图片描述
ls -l /lib/modules/$(uname -r)/kernel/fs:查看本地Linux支持的文件系统
uname -r:操作系统发行编号,加$取出里面的值

在这里插入图片描述

3.4 其他内容

/etc/fstab:存放文件系统 file system table

在这里插入图片描述
静态的文件系统信息,'blkid’打印通用的标识符号,本机ext4的文件系统

parted:创建磁盘分区
mkfs:格式化分区
cat /proc/partitions

在这里插入图片描述
major:主设备号、minor:次设备号、#blocks:分区的大小、name:设备的名字

df -lh:显示文件系统硬盘的使用率

在这里插入图片描述
文件名称、大小、使用了、还有多少空间可用、用的百分比、挂载点

df -l

在这里插入图片描述
文件系统等级制度标准:

在这里插入图片描述
static:静态的、variable:动态的、随着系统的运行内容在不断变化
shareable:共享的、unshareable:非共享的
每个用户的/etc都是自己的

四、进程管理

4.1 进程与程序

进程与程序之间的区别和联系:

4.2 父子进程间的关系

4.3 进程状态

4.4 前后台进程

4.5 proc目录

4.6 相关命令

4.6.1 ps

4.6.2 pstree

4.6.3 kill

4.6.4 top

4.6.5 at

4.6.6 crontab

4.6.7 &后台运行

4.6.8 jobs

4.6.9 bg

4.6.10 fg

4.6.11 proc/$pid/cmd

4.6.12 proc/$pid/exe

4.6.13 proc/$pid/cmdline

ps -l

在这里插入图片描述
ps aux

在这里插入图片描述
watch -n 3 date &
ps -l
kill 2827
ps -l
kill -9 2827
ps -l

在这里插入图片描述
ps -l
vi 0524.txt
ps -l
jobs -l

在这里插入图片描述
在这里插入图片描述
fg %1
jobs -l

在这里插入图片描述

五、常用命令介绍

5.1 pwd

5.2 cd

5.3 ls

5.4 find

5.5 mkdir

5.6 rmdir

5.7 mv

5.8 cp

5.9 rm

5.10 chmod

5.11 chown

5.12 tar

5.13 gzip

5.14 bzip2

5.15 file

5.16 df

5.17 more

5.18 less

5.19 cat

5.20 su

5.21 w

5.22 who

5.23 finger

5.24 passwd

5.25 whereis

5.26 man

5.27 info

5.28 tr

5.29 fmt

5.30 awk

六、C Prog

6.1 编辑、缩排

在这里插入图片描述

  • 编辑:vi/vim、emacs、nano
  • 缩排:cd:C program beautifier、bcpp:make C++ beautifier、indent

indent:changes the appearance of a C program by inserting or deleting whitespace.
类似的tex、latex

cat -n first.c | indent

在这里插入图片描述
cat first.c |indent

在这里插入图片描述
cat second.c | indent

在这里插入图片描述
cat first-err.c |indent:嵌套错误

在这里插入图片描述
cat second.c | indent -br/-bl
-bl:Put braces on line after if
-br:Put braces on line with if

在这里插入图片描述

6.2 编译、运行

  • 编译
  • 运行

在这里插入图片描述
gcc:GNU project C and C++ compiler
gcc --version
g++ --version

在这里插入图片描述
gcc first.c:默认编译生成的文件名为a.out

在这里插入图片描述
./a.out:.表示运行当前目录下的a.out文件

在这里插入图片描述

gcc second.c

在这里插入图片描述
gcc first.c -o helloworld:给生成的outfile文件起个名字helloworld
注意:-o+目标文件名字

在这里插入图片描述
C++编译器可以编译C程序,反过来不可以
gcc first.c and g++ first.c:编译C程序
g++ hello.cpp 可正常运行、gcc hello.cpp 报错

在这里插入图片描述
在这里插入图片描述

6.2.1 gcc四个阶段

gcc编译四个阶段
在这里插入图片描述
man gcc

在这里插入图片描述

在这里插入图片描述
gcc hello.c:一次编译,默认生成可执行文件a.out
gcc hello.c -o b.out:一次编译,给生成的可执行文件取名b.out

在这里插入图片描述
gcc -E hello.c -o hello.i:编译的第一个阶段。调用预处理程序cpp:主要解决头文件。向其中插入"#include"语句所包含的内容,并由它负责展开在源文件中定义的宏,生成.i文件(gcc -E)
gcc -S hello.i -o hello.s:编译的第二个阶段。检查语法错误cc将代码翻译成汇编语言.s文件,该阶段只进行翻译而不进行汇编,生成汇编代码。(gcc -S)
gcc -c hello.s -o hello.o:编译的第三个阶段。调用as将编译阶段生成的.s文件转成.o文件:不进行链接操作。(gcc -c)
gcc hello.o -o c.out:编译的最后一个阶段。调用链接程序ld:把生成的目标代码链接成一个可执行程序(gcc *.o)

在这里插入图片描述
gcc -S hello.c:在第二步停止,默认生成hello.s文件
cat hello.i:查看hello.i文件

在这里插入图片描述
在这里插入图片描述

cat hello.s:查看hello.s文件

在这里插入图片描述
.o文件(二进制文件),cat命令只可以看普通文本。用readelf来看
readelf -S hello.o:查看elf文件,可执行、可链接文件Executable and Linking Format
man readelf:display information about ELF files

在这里插入图片描述
gcc -M hello.c:生成头文件关联的信息

在这里插入图片描述
gcc -v hello.c:显示编译版本、头文件目录等信息

在这里插入图片描述
gcc -xc hello.tom:-x language告诉gcc按照什么标准去编译源文件。后缀名是什么不重要,可以以c程序方式编译.tom文件。gcc hello.tom直接编译不可以

在这里插入图片描述

6.3 库文件

  • 库文件
    在这里插入图片描述
    Windows:.lib:静态链接库.dll:动态链接库
    Linux:.a:静态链接库.so:动态(共享)链接库
    ls /lib/libc*:查看C语言的动态链接库和静态链接库
    ls /lib/x86_64-linux-gnu/libc*

在这里插入图片描述
ls -l /lib64/:通过ld-linux-x86-64.so.2总加载器加载其它库函数(一般指向/lib) 为了方便单独建了一个64位的lib目录

在这里插入图片描述
链接文件。链接时通过该库函数把其他的库函数加载出来

ldd a.out:ldd可以查看该命令本身调用了哪些动态链接库
ldd /bin/ls:ls在启动后,加载器将所有的动态库加载后然后再将控制权移交给ls程序的入口。
man ldd:print shared object dependencies动态链接库

在这里插入图片描述
第一个必不可少的,第二个是C的动态链接库,第三个总的加载器。

readelf -l a.out:gcc包含了一个特殊的elf头:INTERP,其作用是指定加载器的路径。

在这里插入图片描述

6.4 路径问题

关于路径的问题:
在这里插入图片描述
".h":先去当前目录下查找,若当前目录没有,再去系统目录下查找/usr/include/
<*.h>:先去系统目录下找,内核态源代码一般存放在该文件下

  • 调试C程序的命令

find ./ -name dvss.c:查找dvss.c文件

在这里插入图片描述
cat dvss.c:查看该文件的内容

在这里插入图片描述
gcc -static dvss.c:生成a.out,静态链接库的方式编译
gcc dvss.c -o b.out:默认方式,动态共享链接库的方式
ll *.out:查看是否生成了两个文件
size *.out:静态生成的文件大,动态生成的文件小。
size:查看每个可执行程序的大小
在这里插入图片描述
动态链接库生成的目标文件代码小,运行上时间慢。

在这里插入图片描述
time:衡量程序运行的时间
time ./a.out tom and jerry xyy myy lyy:先运行后面的程序,再显示运行该程序的时间

在这里插入图片描述
real:真正运行的时间 user:用户态 sys:内核态(不一定所有的都需要)
不是所有的real==user+sys,一般real>user+sys

程序的作用是输出所有的argv
argv[0]一般存储程序名本身

time ./b.out tom and jerry xyy myy lyy

在这里插入图片描述
cat -n power.c

在这里插入图片描述
包含<math.h>头文件
gcc power.c:编译文件,找不到power函数。编译器设计问题,想gcc,在编译时添加参数-lm l-link,m-math
gcc power.c -lm:不是所有的代码都需要链接,用到的加一个参数,提高速度。用到了数学库函数,需要显示地告诉编译器去找。
ll a.out

在这里插入图片描述
ldd a.out:a.out用到了数学库函数,而hello.c没有第二行的。第四行总的链接器

在这里插入图片描述
man power

在这里插入图片描述
ldd power:查看相应的依赖

  • makefile工具和过程
    cat makefile-power:把一些编译的规则放在一个文件中,关键是如何写规则。

在这里插入图片描述
前两行注释。 规则(power目标:power.c来源)、动作cc power.c -o power -lm用到了数学库函数(用TAB键开始)

make -f makefile-power:make编译规则文件,-f读取后面文件的规则
power是最新的,不用再编译,之前编译过,没有修改。
gcc power.c -o power -lm:不管时间戳,进行编译
make的一个优势:判断源代码与目标代码的时间戳。

touch power.c:若文件不存在,创建新的文件;若文件存在,将该文件touch到最新的时间
make -f makefile-power:太麻烦了

在这里插入图片描述
一般来说,Make会在当前目录自动查找三个文件,先找GNUMakefile,再找makefile,再找Makefile。均没有就报错,若存在其中一个直接make就可以

将上面的power.c文件拆开。
cat -n input.h
cat -n computer.h
cat -n main.h

在这里插入图片描述
cat -n input.c
cat -n computer.c
cat -n main.c

在这里插入图片描述
cat makefile
make
rm pow:只做了第一条动作
make clean:执行所有的动作 生成.o文件

在这里插入图片描述
简化动作:gcc知道.c->.o需要执行的操作
make clean

在这里插入图片描述
touch input.c:重新编译input.c,说明input.o修改了,再去生成新的main.o

在这里插入图片描述
如何简化规则?
引入Makefile的变量:

在这里插入图片描述
$<:对每个依赖文件,对所有的.c都生成对应的.o

在这里插入图片描述
gcc -M hello.c:生成头文件关联的信息

在这里插入图片描述
gcc -MM hello.c:不包含头文件的依赖关系

在这里插入图片描述
gcc -MM main.c > main.makefile:将依赖关系保存起来
gcc -MM main.c -MF main.makefile:同上
gcc -MM main.c -MT hello.o:修改目标代码 改为hello.o

在这里插入图片描述
一个C文件在内存中布局,如何存放的:
正文段(text)、初始化的数据段(声明时赋值、初始化)、未初始化的数据段(声明一个数组用的时候进行赋值)、堆(动态内存分配)、栈(自动变量、函数调用、上下文切换信息)

在这里插入图片描述
低地址部分:正文段、初始化的数据段(两部分直接从程序中读入由exec读入),未初始化的数据段(数组、初始化为0由exec做),命令行参数。
malloc函数:用来分配内存的,只能在stack、heap之间的区域。是一个通用的函数,不能直接分配内存,调用了sbrk。stack break只能在stack、heap之间。
在这里插入图片描述
man malloc:Library calls

在这里插入图片描述
man brk:System calls

在这里插入图片描述

size /bin/ls
size /bin/

在这里插入图片描述
gcc warning相关
gcc cat.c
gcc -Wall cat.c

在这里插入图片描述
gcc -w cat.c

在这里插入图片描述
gcc -Wall -Wno-unused cat.c:屏蔽掉Wunused类错误
gcc -Wall cat.c

在这里插入图片描述
gcc -Wall -Wno-implicit cat.c:关闭掉implicit类错误

在这里插入图片描述
gcc -Wall -Werror cat.c:警告当做错误处理

在这里插入图片描述
编译优化
cat -n try-gcc-op.c:优化编译

在这里插入图片描述
gcc try-gcc-op.c:无优化、默认 -O0
gcc -O1 try-gcc-op.c -o b.out:主要进行跳转和延迟退栈两种优化
gcc -O2 try-gcc-op.c -o c.out:除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
gcc -O3 try-gcc-op.c -o d.out:优化级别最高,打开所有-O2的优化选项并包括循环展开和其他一些与处理特性相关的优化工作

在这里插入图片描述
time ./a.out:运行当前可执行文件,并打印运行时间
time ./b.out

在这里插入图片描述
time ./c.out

在这里插入图片描述
time ./d.out

在这里插入图片描述
gdb调试相关
cat string-debug.c
gcc string-debug.c

在这里插入图片描述
gcc string-debug.c -g -o b.out
ll *.out
gdb

在这里插入图片描述
file b.out:装入被调试的可执行文件
l:列出源代码
r:运行

在这里插入图片描述
b string-debug.c:7
r
set variable string=(char *)malloc(100)
n

在这里插入图片描述
q

在这里插入图片描述
简单的例子
cat myls.c
gcc myls.c
./a.out doc/

在这里插入图片描述
cat errno.c
gcc errno.c
./a.out

在这里插入图片描述
cat -n helofile.c

在这里插入图片描述
gcc holefile.c
ll file.hole
./a.out
ll file.hole
cat file.hole
od -c file.hole

在这里插入图片描述

七、Shell Prog

cat hello.sh
ll hello.sh
chmod u-x hello.sh

在这里插入图片描述
1.Absolute path(x permission)
pwd
/home/buyhorse/shell/hello.sh
`pwd`/hello.sh
2.Current path(x permission)
./hello.sh
chmod u+x hello.sh
./hello.sh

在这里插入图片描述
3.sh/bash
bash hello.sh
chmod u-x hello.sh
sh hello.sh
4.shell environment
source hello.sh
. hello.sh:有空格

在这里插入图片描述
echo "today is date"
echo "today is date"

在这里插入图片描述
x=9
echo $x

在这里插入图片描述
echo $name
cat display_name
bash display_name
name=xyy
echo $name
bash display_name

在这里插入图片描述
export name
echo $name
bash display_name

在这里插入图片描述
readonly name
name=xyy
readonly

在这里插入图片描述
cat read_demo
bash read_demo

在这里插入图片描述
cat cmdargs_demo
bash cmdargs_demo 1 2 3 4 5 6
vi cmdargs_demo
bash cmdargs_demo 1 2 3 4 5 6

在这里插入图片描述
bash cmdargs_demo 1 2 3 4 5 6 7 8 9 10

在这里插入图片描述
bash cmdargs_demo 1 2 3 4 5 six 7 8 9 ten
cat cmdargs_demo

在这里插入图片描述
vi cmdargs_demo
bash cmdargs_demo 1 2 3 4 5 six 7 8 9 ten

在这里插入图片描述
cat shift_demo
bash shift_demo 1 2 3 4 five six 7 8 nine ten

在这里插入图片描述
date
echo $*
set `date`
echo $*
echo $@
echo $#
echo $6
echo "$6:$2:$3"

在这里插入图片描述
cat set_demo
ls -li 1.txt
bash set_demo 1.txt

在这里插入图片描述
ls -li set_demo

在这里插入图片描述
cat for_demo
bash for_demo

在这里插入图片描述
cat ls-demo
ls
bash ls-demo

在这里插入图片描述
cat filter-txt
bash filter-txt

在这里插入图片描述
ls
bash dirlist
rmdir zz
bash dirlist

在这里插入图片描述
bash dirlist
ls | bash dirlist
ls -a | bash dirlist

在这里插入图片描述
cat while_demo
bash while_demo

在这里插入图片描述
cat util_demo

在这里插入图片描述
cat breakcontinue
bash breakcontinue

在这里插入图片描述
cat case_demo

在这里插入图片描述
cat case_1

在这里插入图片描述
cat case_demo_revise

在这里插入图片描述
cat bundle
cat 1.txt
cat 2.txt
bash bundle 1.txt 2.txt

在这里插入图片描述

在这里插入图片描述
cat countup
bash countup 9

在这里插入图片描述
cat heredoc_demo
bash heredoc_demo

在这里插入图片描述
cat grep_hello
ll hello.txt
cat hello.txt

在这里插入图片描述
cat debug_demo
bash debug_demo
bash -x debug_demo

在这里插入图片描述
cat 6character
vi 6character
bash 6character

在这里插入图片描述
cat statis
cat scores.txt
cat scores.txt | bash statis
bash statis < scores.txt

在这里插入图片描述
bash statis

在这里插入图片描述
mail buyhorse < 1.txt
mail

在这里插入图片描述
find ./ -name "*.txt"

在这里插入图片描述
find ./ -mtine -l

在这里插入图片描述
find ./ -size 0
find ./ -empty

在这里插入图片描述
cat 1.txt
cat 1.txt | tr -c a-zA-Z "\n"

在这里插入图片描述
cat student_records
grep '^j' student_records
grep '3\..' student_records

在这里插入图片描述
ls -l | grep '^d'

在这里插入图片描述
ls -d */
ls */

在这里插入图片描述
tar -cvf txt.tar *.txt
ll txt.tar

在这里插入图片描述
tar -czf txt.tar.gz *.txt

在这里插入图片描述
cp txt.tar doc/
cd doc/

在这里插入图片描述
gzip txt.tar
ll
gunzip txt.tar.gz

在这里插入图片描述
alias

在这里插入图片描述
alias xyy="rm -i"
alias

在这里插入图片描述
ls
xyy txt.tar.bz2
ll

在这里插入图片描述
unalias xyy
alias

在这里插入图片描述
cd shell/
cat bc.txt
bc bc.txt

在这里插入图片描述
cat units.txt
units units.txt
units < units.txt

在这里插入图片描述
cat 1.txt
spell 1.txt

在这里插入图片描述
cat unformated
fmt unformated

在这里插入图片描述
cat student_records
awk '$4>3' student_records
awk '$4>3 {print NR}' student_records

在这里插入图片描述
awk '/hello/ {count++;} END {print "hello was found "count" times"}'

在这里插入图片描述
cat student_records
awk 'BEGIN {total=0} {total+=$4} END {print total}' student_records

在这里插入图片描述
vmstat
free

在这里插入图片描述

八、期末复习

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

For 丶I Forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值