C++Linux系统编程——Linux基本命令(究极全)

1.Linux常见目录介绍

  • **/:**根目录,一般根目录下只存放目录,在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在终端里输入"/home",你其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。

  • /bin: /usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。

  • /boot:**放置linux系统启动时用到的一些文件**,如Linux的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub。

  • /dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱 mount /dev/cdrom /mnt。

  • /etc系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d。

  • /home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~edu 表示用户 edu 的家目录。

  • /lib: /usr/lib: /usr/local/lib 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。

  • **/lost+fount:**系统异常产生错误时,会将一些遗失的片段放置于此目录下。

  • /mnt:/media: 光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载。

  • /opt: 给主机额外安装软件所摆放的目录

  • /proc此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等。

  • **/root:**系统管理员root的家目录。

  • **/sbin:/usr/sbin:/usr/local/sbin:**放置系统管理员使用的可执行命令,如fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root使用的命令,一般用户只能"查看"而不能设置和使用。

  • **/tmp**:**一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。

  • **/srv:**服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内。

  • /usr:应用程序存放目录,/usr/bin 存放应用程序,/usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local: 存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录。

  • /var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message:所有的登录文件存放目录,/var/spool/mail:邮件存放的目录,/var/run:程序或服务启动后,其PID存放在该目录下。

2.Linux命令解释器

2.1shell命令解释器

Shell是一种命令行解释器,是用户和操作系统之间的接口,接收用户输入的命令并将其传递给操作系统进行执行,Shell可以运行在不同的操作系统上,并提供了一种交互式的方式来和计算机进行通信。

2.2Bash命令解释器

Bash是一种Shell的变种,它是基于一种早期的Unix Shell的重新实现,添加了一些新特性和改进,是大多数Linux和Unix系统上默认的Shell

3.Bash解释器常用快捷键

3.1 Tab键

  • 补齐命令

  • 补齐路径

  • 显示当前目录的所有目录

3.2 清屏

clear作用为清除终端上的显示(类似于DOS的cls清屏功能),也可使用快捷键:Ctrl + L ( "L" 为字母 )。

~$ clear

3.3 中断

ctrl+c的作用就是中断中断的操作

3.4遍历输入的历史命令

推荐直接方向键上下即可

3.5 光标操作

  • 光标左移: ctrl + b (

  • 坐标右移: ctrl + f (

  • 移动到头部: ctrl + a(Home

  • 移动到尾部: ctlr + e(End

3.6 字符删除

  • 删除光标前边的字符:ctrl + h(Backspace)

  • 删除光标后边的字符:ctrl + d

    光标后边的字符即光标覆盖的字符

  • 删除光标前所有内容:ctrl + u

  • 删除光标后所有内容:ctrl + k

4.内建命令和外部命令

4.1内建命令

内建命令是指bash工具中集成的命令,一般会有一个与之同名的系统命令,比如bash中的echo命令和/bin/echo是两个不同的命令。

当在bash中键入一个命令时系统会先看他是否是一个内建命令,如果不是才会查看是否是系统命令或第三方工具。

4.2 外部命令

通常是由操作系统或者第三方开发者提供的

4.3 两者对比

内建命令要比系统论命令有比较高的执行效率。外部命令执行时往往需要fork出(产生出)一个子进程,而内建命令一般不用。同时内建命令的优先级也比外部命令高,所以在bash中键入echo命令实际上执行bash工具集中的bash命令也就是内建命令,而不是/bin/echo这个系统命令。

4.4 命令类型查看方式

可以使用type命令查看

格式:

type [-afptP] 名称 [名称 ...] 显示命令类型的信息。

可选参数说明:

-a:显示所有匹配命令,而不仅是第一个匹配的命令,如果有多个 -a选项会显示所有匹配项

-f:仅显示匹配的命令的路径,还将显示外部命令的完整路径

-p:仅显示匹配命令的路径,而不显示别名、函数或者内建命令

-t:显示匹配命令的类型,这将显示命令是外部命令、别名函数还是内建命令

-P:仅显示匹配的命令的类型,而不显示其他信息

5.帮助文档

man是Linux提供的一个手册,包含了绝大部分的命令、函数使用说明

使用格式:

man [选项] 命令名

man设置了如下的功能键:

功能键 功能
空格键 显示手册页的下一屏
Enter键 一次滚动手册页的一行
b 回滚一屏
f 前滚一屏
q 退出man命令
h 列出所有功能键
/word 搜索word字符串

使用man手册时,最后指定章节号

man 1 ls 即代表查看第一章节

6.help

内部命令和外部命令的help不一样:

help + 内建命令

外部命令 --help

7.目录相关命令

7.1 pwd

使用pwd命令可以显示当前的工作目录,该命令很简单,直接输入pwd即可,后面不带参数。

7.2 cd

命令 含义
cd 切换到当前用户的主目录(/home/用户目录),用户登陆的时候,默认的目录就是用户的主目录。
cd ~ 切换到当前用户的主目录(/home/用户目录)
cd . 切换到当前目录
cd .. 切换到上级目录
cd - 可进入上一个进入的目录

7.3 mkdir

mkdir [-mpv] 目录 [目录]

可以创建多个目录:mkdir dir1 dir2 dir3

-m:指定新创建目录的权限模式

例如:mkdir -m 755 dirname

-p:递归创建目录

例如:mkdir -p /path/to/new

-v:显示创建每个目录时的详细输出

7.4 rmdir

rmdir [选项]... 目录... 删除指定的空目录

可使用rmdir命令删除一个目录。必须离开目录,并且目录必须为空目录,不然提示删除失败。

8.文件类型

Unix/Linux对数据文件(.mp3、 .bmp),程序文件(.c、 .h、*.o),设备文件(LCD、触摸屏、鼠标),网络文件( socket ) 等的管理都抽象为文件,使用统一的方式方法管理。 Linux下一切皆文件。

文件类型分类

1)普通文件

普通文件是计算机操作系统用于存放数据、程序等信息的文件,一般都长期存放于外存储器(磁盘、磁带等)中。普通文件一般包括文本文件、数据文件、可执行的二进制程序文件等。

在Unix/Linux中可以通过file命令来查看文件的类型。如果file文件后面携带文件名,则查看指定文件的类型,如果携带通配符"*",则可以查看当前目录下的所有文件的类型。

2)目录文件

Unix/Linux系统把目录看成是一种特殊的文件,利用它构成文件系统的树型结构。

目录文件只允许系统管理员对其进行修改,用户进程可以读取目录文件,但不能对它们进行修改。

每个目录文件至少包括两个条目,".."表示上一级目录,"."表示该目录本身。

3)设备文件

Unix/Linux系统把每个设备都映射成一个文件,这就是设备文件。它是用于向I/O设备提供连接的一种文件,分为字符设备和块设备文件。

字符设备的存取以一个字符为单位,块设备的存取以字符块为单位。每一种I/O设备对应一个设备文件,存放在/dev目录中,如行式打印机对应/dev/lp,第一个软盘驱动器对应/dev/fd0。

deng@itcast:~/share$ echo "hello world" > /dev/pts/22 hello world

4)管道文件

管道文件也是Unix/Linux中较特殊的文件类型,这类文件多用于进程间的通信。

5)链接文件

似于 windows 下的快捷方式,链接又可以分为软链接(符号链接)和硬链接。

9.文件相关命令

9.1 ls

ls常用参数:

参数 含义
-a 显示指定目录下所有子目录与文件,包括隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合 -l 以人性化的方式显示文件大小

与DOS下的文件操作类似,在Unix/Linux系统中,也同样允许使用特殊字符来同时引用多个文件名,这些特殊字符被称为通配符。

通配符 含义
* 文件代表文件名中所有字符
ls te* 查找以te开头的文件
ls *html 查找结尾为html的文件
代表文件名中任意一个字符
ls ?.c 只找第一个字符任意,后缀为.c的文件
ls a.? 只找只有3个字符,前2字符为a.,最后一个字符任意的文件
[] ["和"]"将字符组括起来,表示可以匹配字符组中的任意一个。"-"用于表示字符范围。
[abc] 匹配a、b、c中的任意一个
[a-f] 匹配从a到f范围内的的任意一个字符
ls [a-f]* 找到从a到f范围内的的任意一个字符开头的文件
ls a-f 查找文件名为a-f的文件,当"-"处于方括号之外失去通配符的作用
\ 如果要使通配符作为普通字符使用,可以在其前面加上转义字符。"?"和"*"处于方括号内时不用使用转义字符就失去通配符的作用。
ls *a 查找文件名为*a的文件

9.2 touch

touch [选项]... 文件...

  • 如果文件存在,更新文件时间

  • 如果文件不存在,则创建新文件

一般使用也就是用touch 文件名

9.3 cp

cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令 。

选项 含义
-a 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。
-f 强制复制而不提示
-i 交互式复制,在覆盖目标文件之前将给出提示要求用户确认
-r 若给出的源文件是目录文件,则cp将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名。
-v 显示拷贝进度

示例:

复制代码
cp file dirs/ 把file文件复制到dirs目录下
cp file1 file2 dirs/ 把file1 file2文件拷贝到dirs目录下
cp -r dir1/ dir2/ 把dir1目录复制到dir2目录下
cp -a file dirs/ 把file文件复制到dirs目录下,保留文件的原来属性

9.4 rm

可通过rm删除文件或目录。使用rm命令要小心,因为文件删除后不能恢复。为了防止文件误删,可以在rm后使用-i参数以逐个确认要删除的文件。

常用参数及含义如下表所示:

参数 含义
-i 以进行交互式方式执行
-f 强制删除,忽略不存在的文件,无需提示
-r 递归地删除目录下的内容,删除文件夹时必须加此参数

例如:

复制代码
rm file* 删除所有file打头的文件
rm -f [ab].txt 等价于rm -f a.txt b.txt 
rm -f [^ab].txt 删除除a.txt b.txt以外的所有?.txt
​

9.5 mv

用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名。

常用选项说明:

选项 含义
-f 禁止交互式操作,如有覆盖也不会给出提示
-i 确认交互方式操作,如果mv操作将导致对已存在的目标文件的覆盖,系统会询问是否重写,要求用户回答以避免误覆盖文件
-v 显示移动进度

例如:

复制代码
mv -u dir1/* dir2/ 把dir1目录下所有文件移动到dir2目录下,并且根据文件时间来决定要不要移动

-u表示update,只会移动源目录中存在且目标目录中不存在的文件

10.文件内容查看命令

10.1 cat

cat 将文件内容一次性输出到终端。

缺点:终端显示的内容有限,如果文件太长无法全部显示。

复制代码
cat /etc/passwd 查看/etc/passwd内容
​
cat -n /etc/passwd 查看/etc/passwd内容,对输出的所有行编号
​
cat -b /etc/passwd 查看/etc/passwd内容并且给非空行编号

10.2 less

less命令将文件内容分页显示到终端,可以自由上下浏览

命令 作用
回车(ctrl + n) 显示下一行
ctrl + p 显示上一行
空格(PageDown) 显示下一页
PageUp 显示上一页
q 退出
h 获取帮助

10.3 head

  • head命令从文件头部开始查看前 n 行的内容。

  • 如果没有指定行数,默认显示前10行内容。

命令格式:

head --n [行数] 文件名 //显示前n行

head -c [字符数] 文件名 //显示前n个字符

10.4 tail

  • 从文件尾部向上查看最后 n 行的内容

  • 使用方式:tail --n[行数] 文件名

  • 如果没有指定行数,默认显示最后10行内容

11.文件查找命令

11.1 find

find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。

按文件名查询:使用参数 -name

命令:find + 路径 + -name +"文件名"

示例:find /home -name "a.txt"

按文件大小查询:使用参数 -size

命令:find + 路径 + -size + 范围

范围

  • 大于:+表示 -- +100k

  • 小于:-表示 -- -100k

  • 等于: 不需要添加符号 -- 100k

大小

  • M 必须大写(10M)

  • k必须小写(20k)

例子: 查询目录为家目录

等于100k的文件: find ~/ -size 100k

大于100M的文件: `find ~/ -size +100M

大于50k, 小于100k的文件: find ~/ -size +50k -size -100k

按文件类型查询:使用参数 -type

命令:find + 路径 + -type + 类型

类型

  • 普通文件类型用 f 表示而不是-

  • d -> 目录

  • l -> 符号链接

  • b -> 块设备文件

  • c -> 字符设备文件

  • s -> socket文件,网络套接字

  • p -> 管道

例如:查找指定目录下的普通文件: find /home -type f

查找根目录所有的字符设备 ~$ find / -type c

查找根目录下所有的套接字 ~$ find / -type s

......

11.2 grep

Linux系统中grep命令是一种强大的文本搜索工具,grep允许对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。

grep一般格式为:

grep [-选项] '搜索内容串' 文件名

在grep命令中输入字符串参数时,最好引号或双引号括起来。例如:grep 'a ' 1.txt。

还有一种比较常见的用法例如:

cat logfile.txt | grep "error"

cat file.txt | grep keyword

常用选项说明:

选项 含义
-v 显示不包含匹配文本的所有行(相当于求反)
-n 显示匹配行及行号
-i 忽略大小写

12.管道

管道(|):一个命令的输出可以通过管道做为另一个命令的输入。

管道我们可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里" | "的左右分为两端,左端塞东西(写),右端取东西(读)。

cat /etc/passwd | less

13.压缩包管理

13.1 tar

计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具,此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据。

tar使用格式

tar [选项] 打包文件名 文件

tar命令很特殊,其选项前面可以使用"-",也可以不使用。

常用参数:

参数 含义
-c 生成档案文件,创建打包文件
-v 列出归档解档的详细过程,显示进度
-f 指定档案文件名称,f后面一定是.tar文件,所以必须放选项最后
-t 列出档案中包含的文件
-x 解开档案文件

注意:除了f需要放在参数的最后,其它参数的顺序任意。

tar -cvf 创建归档文件

tar -xvf 解除归档文件(还原)

tar -tvf 查看归档文件内容

13.2 gzip

tar与gzip命令结合使用实现文件打包、压缩。

tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz。

gzip使用格式如下:

gzip [选项] 被压缩文件

常用选项:

选项 含义
-d 解压
-r 压缩所有子目录

一次性压缩多个文件: gzip后面不能跟目录

tar这个命令并没有压缩的功能,它只是一个打包的命令,但是在tar命令中增加一个选项(-z)可以调用gzip实现了一个压缩的功能,实行一个先打包后压缩的过程。

**压缩用法:**tar cvzf 压缩包包名 文件1 文件2 ...

-z 指定压缩包的格式为:file.tar.gz

解压用法: tar zxvf 压缩包包名

参数 含义
-z 指定压缩包的格式为:file.tar.gz

解压到指定目录:-C (大写字母"C")

例子:tar -xvf new.tar.gz -C ./test/ 将 new.tar.gz 解压到当前目录下的 test 目录下

13.3 bzip2

  • tar与bzip2命令结合使用实现文件打包、压缩(用法和gzip一样)。

  • tar只负责打包文件,但不压缩,用bzip2压缩tar打包后的文件,其扩展名一般用xxxx.tar.bz2。

  • 在tar命令中增加一个选项(-j)可以调用bzip2实现了一个压缩的功能,实行一个先打包后压缩的过程。

  • 压缩用法:tar jcvf 压缩包包名 文件...(tar jcvf bk.tar.bz2 *.c)

  • 解压用法:tar jxvf 压缩包包名 (tar jxvf bk.tar.bz2)

tar -xvf 万能解压 (gzip bzip2)

生成一个bz2压缩包

复制代码
tar -cjvf test.tar.bz2 test

解压bz2压缩包

复制代码
tar -xjvf share.tar.bz2

13.4 zip和unzip

通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip。

压缩文件:zip -r 目标文件(没有扩展名) 源文件

解压文件:unzip -d 解压后目录文件 压缩文件

14.文件权限管理

文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。

Unix/Linux系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。为了保护系统的安全性,Unix/Linux系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。

在 Unix/Linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

14.1访问权限说明

用户能够控制一个给定的文件或目录的访问程度,一个文件或目录可能有读、写及执行权限:

  • 读权限(r)

对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。

  • 写权限(w)

对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。

  • 可执行权限(x)

对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。

注意:通常,Unix/Linux系统只允许文件的属主(所有者)或超级用户改变文件的读写权限。

14.2 chmod

chmod 修改文件权限有两种使用格式:字母法与数字法。

**字母法:**chmod u/g/o/a +/-/= rwx 文件

[ u/g/o/a ] 含义
u user 表示该文件的所有者
g group 表示与该文件的所有者属于同一组( group )者,即用户组
o other 表示其他以外的人
a all 表示这三者皆是
[ +-= ] 含义
+ 增加权限
- 撤销权限
= 设定权限
rwx 含义
r read 表示可读取,对于一个目录,如果没有r权限,那么就意味着不能通过ls查看这个目录内部的内容。
w write 表示可写入,对于一个目录,如果没有w权限,那么就意味着不能在目录下创建新的文件。
x excute 表示可执行,对于一个目录,如果没有x权限,那么就意味着不能通过cd进入这个目录。

例如:

chmod o+w file 给文件file的其它用户增加写权限;

chmod u+x file 给文件file的所有者增加可执行权限

数字法:"rwx" 这些权限也可以用数字来代替

r 读取权限,数字代号为 "4"
w 写入权限,数字代号为 "2"
x 执行权限,数字代号为 "1"
- 不具任何权限,数字t代号为 "0"

如执行:chmod u=rwx,g=rx,o=r filename

就等同于:chmod 754 filename(不可以执行)

15.进程管理

15.1 ps

进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元。

ps命令可以查看进程的详细状况,常用选项(选项可以不加"-")如下:

选项 含义
-a 显示终端上的所有进程,包括其他用户的进程
-u 显示进程的详细状态
-x 显示没有控制终端的进程
-w 显示加宽,以便显示更多的信息
-r 只显示正在运行的进程
-e 显示系统上所有正在运行的进程,不仅是用户,还包括系统

15.2 kill

kill命令指定进程号的进程,需要配合 ps 使用。

使用格式:

kill [-signal] pid

信号值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程。

kill 9133 :9133 为应用程序所对应的进程号

有些进程不能直接杀死,这时候我们需要加一个参数" -9 "," -9 " 代表强制结束:

16.软件安装和卸载

如果是在ubuntu平台,软件的安装可以通过互联网在线安装,更加方便快捷:

命令 含义
sudo apt-get update 获得最新的软件包的列表
sudo apt-get install xxx 从源中安装xxx软件
sudo apt-get remove xxx 删除xxx软件
sudo apt-get clean 清理安装包

16.1 软件安装

在Ubuntu下安装文件为deb格式

软件安装

sudo dpkg -i xxx.deb

软件卸载

sudo dpkg -r 软件名

若是不知道软件名,可以使用下面指令来进行模糊搜索

dpkg --get-selections | grep 软件相关名称

17.重定向

复制代码
ls /etc/passwd > output.txt 标准正确输出重定向到output.txt 
​
ls /etc/shadow >> output.txt 标准正确输出追加重定向到output.txt
​
 ls dddddd 2> error.txt 标准错误输出重定向到error.txt
​
ls ddddd 2>> error.txt 标准错误输出重定向到error.txt,

18.其他命令

18.1 tree

tree 以树状形式查看指定目录内容,使用该命令需要安装软件 tree:

sudo apt install tree

18.2 ln

ln命令主要用于创建链接文件。Linux链接文件类似于Windows下的快捷方式。

链接文件分为软链接和硬链接:

  • 软链接:软链接不占用磁盘空间,源文件删除则软链接失效。

  • 硬链接:硬链接只能链接普通文件,不能链接目录。

使用格式:

ln 源文件 链接文件

ln -s 源文件 链接文件

如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。

注意:如果软链接文件和源文件不在同一个目录,源文件最好要使用绝对路径,不要使用相对路径。

相关推荐
冰红茶兑滴水6 分钟前
Linux 线程控制
linux·c++·算法
白总Server7 分钟前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
IT良18 分钟前
while循环及简单案例
linux·服务器
yukai0800822 分钟前
Python 全栈系列271 微服务踩坑记
python·微服务·php
码哝小鱼29 分钟前
iptables限制网速
linux·服务器·网络
leaoleao沄38 分钟前
linux-IO-进程-线程(相关函数)
linux·运维·服务器
frank00600711 小时前
linux 使用mdadm 创建raid0 nvme 磁盘
linux·运维
绿白尼1 小时前
进程与线程
linux
iangyu1 小时前
linux命令之pwdx
linux·运维·服务器
C语言扫地僧1 小时前
Docker 镜像制作(Dockerfile)
linux·服务器·docker·容器