Linux 基本指令完整版(2)
目录
六大基本指令
细化每条指令
ls
pwd 和 cd
tree
touch
stat
mkdir
Linux下的文件类型
rmdir
man
echo
cat
cp
mv
more
less
head
tail
|
date
cal
find
which
file
whereis
alias
grep
top
htop
zip / unzip
rzsz
tar (重要)
bc
Linux高频使用的快捷键
shutdown
总结:
六大基本指令
pwd : 查看工作目录
whoami : 谁在访问Linux账号(默认root)
ls : 展示罗列当前目录(文件夹)下的文件名 (list)
mkdir : 在当前目录下新建文件夹(目录)
cd : 更改当前的工作目录
touch : 在当前目录下新建一个普通文件
文件 = 文件内容 + 文件属性(建立时间,文件名,文件大小,文件权限...)
细化每条指令
ls
ls仅查看的是文件名(文件属性)
ls -l / ll : 显示更详细的属性信息
ls -a -l / ls -la / ls -al : a表示all,即查看文件的全部信息
linux中存在隐藏文件,往往以 . 开头
ls -la中的 a 指的是 all ,可以显示隐藏文件
. 和 .. 是两个文件名
pwd 和 cd
windows 下的文件路径:
linux 下的文件路径:
cd : 只能用于切换文件夹(目录) , 无法在文件中切换
cd ~ : 返回家目录/
cd - : 回退到上一次目录
linux系统中, . 表示当前路径, ..表示上级路径
. : 当前路径,并且执行当前路径下的程序 执行一个程序的前提就是先要找到它 .的意义就是告诉在当前路径下
最后的 / 就表示Linux的根目录
Linux的整个文件结构 , 是树状结构(多叉树)
目录本质上是树形目录结构的基础
- 结论1 :这颗多叉树,叶子节点,一定是普通文件或者空的文件夹
- 结论2 : 路上节点(非叶子节点),本质上就是文件夹或者目录
路径用来表示文件的唯一性(windows/linux)
为什么路径具有唯一性?
任何一个多叉树节点 , 都有且仅有一个父节点
Linux下,任何目录下,都存在 . 和 .. 这两个隐藏文件 , 即使是空目录
绝对路径 : /user/bin/hello.txt
所以 : cd 后面跟绝对路径就可以直接切换到该目录下
相对路径和绝对路径
tree
树状指令
touch
stat
显示文件或者目录详细数据信息
mkdir
mkdir : 在当前目录下新建文件夹(目录)
mkdir -p : 创建一连串的路径
所以当前116_117文件夹的目录就为:
Linux下的文件类型
- 以 d 开头的文件都是目录文件
- 以 - 开头的都是普通文件 , 包括 文本文件,二进制文件,图片,音频,动静态库等
若想要查看更详细的文件类型 , 可以使用 file 指令进一步详细查看
所以Linux中,操作系统并不以文件后缀名类区分文件,但是一般建议带对应的文件后缀名,因为某些编译器必须通过识别对应文件的类型来进行编译
rmdir
rmdir : 删除空目录
比如说我们要删除116_117目录下的dirb
但是rmdir只能删除空目录,不能删除非空目录
rm : 删除可执行程序或文本文件(操作系统会询问) 适用于删除所有对象
rm -f : 强制删除,忽略不存在的文件或目录
rm -r : 递归删除目录及其下所有内容
rm -rf : 强制递归删除目录(慎用,删除后无法恢复)。
rm -r 递归删除:
rm -rf 强制递归删除(不再询问)
man
man : 手册页(Manual Page)的查看工具,用于查询命令、系统调用、库函数、配置文件等的详细说明。
比如我们要查询ls指令的详细说明:
按Q键退出
man man : 查询man自身的手册说明
这就是Linux man 手册的9个章节分类,每个章节对应不同类型的内容,方便用户精准查询命令、函数、系统调用等的说明。比如:
- 章节1是可执行程序或Shell命令(如 ls 、 cd 这些终端里直接用的命令);
- 章节2是系统调用(System calls),指的是操作系统内核提供的函数。这些函数是程序与操作系统内核交互的接口,例如 open (用于打开文件)、 read (用于读取文件内容)、 write (用于写入文件)、 fork (用于创建进程)等,通常是程序员在开发底层应用或系统级程序时会用到的函数;
- 章节3是库函数(如C语言里的 printf 、 strlen 这类编程时调用的函数)不包含C++;
- 章节8是系统管理命令(如 useradd 、 service 这类只有root能高效使用的管理指令)。
比如 :
man 3 printf : 意思就是查看手册第3章节中,关于 printf 的说明,这里的 printf 特指C语言等程序开发中的“库函数”
echo
在终端输出指定的文本内容,常用于脚本编写、调试或简单的信息打印。
> : 输出重定向
- 如果目标文件不存在,会直接新建该文件;
- 如果文件已存在,会先清空文件内上次写入的所有内容,再写入新内容。
但是当单独使用 > 时 , 会清空 hello.txt 文件的内容,再次用 cat hello.txt 查看时,文件已无内容。
>> : 追加重定向
- 如果目标文件不存在,同样会新建文件;
- 但如果文件已存在,不会清空原有内容,而是将新内容直接添加到文件的末尾。
cat
连接(concatenate)并打印文件内容” ,直接读取文件并在终端输出全部内容,适合查看内容较短的文件
执行 cat 命令后,终端进入交互式输入模式,此时输入的内容(如 hello 、 acac )会被直接回显,按 Ctrl+Z 可退出该模式。
执行 cat < hello.txt 时, cat 命令通过输入重定向( < )读取 hello.txt 文件的内容,并将其输出到终端,即显示文件中的 aaaaabb 内容。
< : 输入重定向
- 输入重定向的作用是将“文件作为命令的输入源”,替代了手动交互式输入的过程,常用于批量读取文件内容或在脚本中自动化处理文件输入。
cat -n : 带行号
tac 指令则和 cat 指令相反
cp
复制文件或目录
- cp指令用于复制文件或目录
- 如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中
拷贝文件
拷贝目录
下面是将已存在的目录 lesson4 拷贝到已有的目录 dira 中 , 又因为 lesson4 目录下有文件 , 所以要 加 -rf 递归拷贝
下面的树形结构图也能说明目录拷贝成功
mv
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files,经常用来备份文件或者目录
- 1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
- 2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
- 3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
有剪切的功能:
dst : 指定目录/指定文件名
下图是将 lesson4目录下的 src.txt文件 mv 到 ..(上一级目录(116_117)) 中 , 通过上下两幅图可以看出 src.txt 发生了移动
再看下面这副图 , 将 dira 目录mv到新建的 test 目录中 , 即 dira 被剪切到 test 了 , 即 dira 没有了 , 故可以替代改名字的效果 , 达到重命名的作用
more
more 是用于分页查看文件内容的命令,功能类似cat , 但适用于内容较长的文件,可避免一次性输出过多内容导致难以阅读。
- -n 指定输出行数
- q 退出more
# 命令行输出多行文本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello bite"; let cnt++; done > temp.txt# -n 指定输出行数
[whb@bite-alicloud test]$ more -10 temp.txt
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
--More--(0%)
less
less 是Linux系统中更强大的分页查看工具,是 more 命令的增强版,支持向前/向后翻页、灵活搜索、内容标记等功能,是查看长文件的首选工具之一。应该说是linux正统查看文件内容的工具,功能极其强大
- less的用法比起more更加的有弹性,在more的时候,我们并没有办法向前面翻,只能往后面看
- 但若使用了less时,就可以使用[pageup][pagedown]等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容
- 除此之外,在less里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
- 同样按q退出
less 与 more 的区别:
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。
# 命令行输出多行文本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello $cnt"; let cnt++; done > temp.txt# 测试搜索和-N等功能
[whb@bite-alicloud test]$ less -N temp.txt1 hello 02 hello 13 hello 24 hello 35 hello 46 hello 57 hello 68 hello 79 hello 810 hello 911 hello 1012 hello 1113 hello 1214 hello 13...
# 其他选项也可以直接测试
head
head 是Linux系统中用于查看文件开头部分内容的命令,默认显示文件的前10行,可通过选项灵活控制显示行数或字节数,适用于快速预览文件的关键信息。
head与tail就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head用来显示档案的开头至标准输出中,而tail想当然尔就是看档案的结尾。
[whb@bite-alicloud test]$ head temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
[whb@bite-alicloud test]$ head -5 temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
tail
tail命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容.
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
# 基本功能演⽰
[whb@bite-alicloud test]$ tail temp.txt
hello 1991
hello 1992
hello 1993
hello 1994
hello 1995
hello 1996
hello 1997
hello 1998
hello 1999
hello 2000
[whb@bite-alicloud test]$ tail -3 temp.txt
hello 1998
hello 1999
hello 2000
|
在Linux中,管道( | ) 是一种将一个命令的输出直接作为另一个命令输入的机制,用于实现命令间的“数据流接力”,是Linux中高效处理数据的核心手段之一。
- 1. 数据实时传递:命令1的输出不落地(不写入文件),直接传给命令2处理,效率极高。
- 2. 多命令串联:支持多个管道串联,实现复杂数据处理流程。
- 上图先通过 head -2011 hello.txt 获取 hello.txt 文件的前2011行内容,再通过管道 | 将这部分内容传递给 tail -10 ,最终输出其中的最后10行,即从第2001行到第2010行的内容( hello 2001 到 hello 2010 )。
- 管道的作用:实现了 head 和 tail 两个命令的数据流接力,让 head 的输出直接作为 tail 的输入,无需将中间结果写入文件,高效地完成了“提取文件中间部分内容”的需求。
- 依次执行: head -5101 hello.txt 获取前5101行→ tail -100 提取这5101行中的最后100行→ tac 将这100行内容逆序(行顺序反转)→ head -5 提取逆序后的前5行,最终输出 hello 5100 到 hello 5096 的内容。
- 管道的作用:串联 head 、 tail 、 tac 、 head 四个命令,让数据在命令间实时传递,完成“提取指定区间行→逆序→取前几行”的复杂文本处理。
- 第二个命令: head -5101 hello.txt | tail -100 | tac | head -5 | wc -l
- 作用:在第一个命令的基础上,通过管道 | 将结果传递给 wc -l ,统计最终输出内容的行数(结果为 5 )。
- 管道的作用:将前序文本处理的结果直接传递给 wc -l ,实时完成行数统计。
date
显示Linux系统时间
按照指定格式进行查看时间 : date +%Y:%m:%d
cal
cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
常用选项 :
- -3 显示系统前一个月,当前月,下一个月的月历
- -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
- -y 显示当前年份的日历
find
Linux下find命令在目录结构中搜索文件,并执行指定的操作。
- Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。
- 即使系统中含有网络文件系统(NFS),find命令在该文件系统中同样有效,只你具有相应的权限。
- 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。
- -name 按照文件名查找⽂件
- 指令本质:在Linux系统中,大部分指令本质是可执行文件。例如图中展示的 ls 指令,实际是 /usr/bin/ 目录下的可执行文件,通过 ls /usr/bin/ls -l 命令可查看其文件属性(如权限 -rwxr-xr-x 、所有者 root 、大小 117608 字节等)。
- 存储位置:这些可执行文件通常存放在Linux系统的固定目录 /usr/bin/ 下,该目录是系统命令池的重要组成部分。
- 注意事项:不建议随意修改或添加自定义内容到该目录,否则会“污染系统的命令池”,可能导致系统命令执行异常。
which
常用的指令定位工具,核心功能是查找并显示指定指令(如 ls 、 find )对应的可执行文件路径,快速确认指令是否存在及具体位置。 相当于上面刚学过的 find/usr/bin/ -name XXX
上图能说明指令 ls 最终对应的可执行文件位于 /usr/bin/ls 。从输出来看,首先显示了 ls 的别名设置 alias ls='ls --color=auto' ,这是系统为了让 ls 命令显示彩色目录列表而设置的别名;但别名只是命令的“快捷方式”,其底层实际执行的可执行文件就是 /usr/bin/ls ,这也印证了之前关于“Linux大部分指令本质是可执行文件,且存储在 /usr/bin/ 等固定目录下”的结论。
which和find的区别:
which会帮助我们查找一条命令所在的路径,find指令帮助我们在任何一个路径下做真实的查找任何文件
file
识别文件的类型
识别目录类型:
- 执行 file dira ,输出 dira: directory ,说明 file 能明确判断出 dira 是一个目录。
识别可执行文件类型:
- 执行 file /usr/bin/ls ,输出显示它是“ELF 64-bit LSB executable, x86-64”等,表明 ls 是一个64位的ELF格式可执行文件,属于动态链接的程序。
- 执行 file /usr/bin/mkdir ,输出也类似,说明 mkdir 同样是64位的ELF可执行文件。
简言之, file 命令可以帮助用户快速了解文件是目录、可执行程序(以及其具体的架构、链接方式等细节)还是其他类型的文件,在Linux系统中用于文件类型的诊断和识别非常实用。
whereis
⽤于找到程序的源、二进制文件或手册 一般不太使用
alias
设置命令的别名 用于自定义指令别名以简化操作。
上图是通过 alias 别名='原命令' ,可将复杂命令简化为别名。例如 alias cxi='ls' ,执行 cxi 就等同于执行 ls ; alias myls='ls --color=auto' 则让 myls 具备带颜色显示的 ls 功能。执行命令时,系统会优先搜索别名,若别名不存在,才会在 /usr/bin 等路径中搜索原命令。再通过 alias 别名='' 可取消已定义的别名,如 alias cxi='' 后, cxi 不再有意义。
执行命令时 , 会优先搜索别名 , 不存在再在/usr/bin/XXX中搜索 , 实际上一般尽量别使用 alias
在Linux系统中,“大部分指令本质是可执行文件”这一特性是系统设计的核心逻辑之一,可从以下维度展开说明:
1. 指令与可执行文件的关系
- Linux的指令(如 ls 、 mkdir 、 cp 等)本质上是存放在系统特定目录(如 /usr/bin/ 、 /bin/ 、 /sbin/ 等)中的可执行文件。当用户在终端输入一个指令时,系统会在预设的路径(由 PATH 环境变量指定)中查找对应的可执行文件,找到后就会加载并执行它。
2. 典型案例佐证
- 如之前的例子, ls 指令对应的可执行文件是 /usr/bin/ls , mkdir 对应的是 /usr/bin/mkdir 。通过 file 命令可以查看这些文件的类型,会发现它们是ELF格式的可执行文件;通过 which 命令可以定位到它们的具体路径。
- 甚至可以像普通文件一样对这些指令文件进行操作(当然,出于系统安全考虑,不建议随意修改),比如查看文件大小、权限、修改时间等,这也体现了它们“文件”的本质属性。
3. 这种设计的意义
- 模块化与可扩展性:每个指令作为独立的可执行文件,功能职责明确,便于开发、维护和更新。如果需要新增或替换某个指令,只需将对应的可执行文件放置到系统的命令路径中即可。
- 兼容与统一:这种设计让Linux系统的指令管理遵循统一的文件系统规则,用户可以用管理普通文件的思路去理解和操作指令(当然要注意权限和系统稳定性),也使得不同功能的指令可以灵活组合使用,实现复杂任务。
简言之,Linux将指令设计为可执行文件,是其“一切皆文件”哲学的体现,这一设计让系统的指令管理、功能扩展和使用逻辑都更加清晰且富有弹性。
grep
文本搜索与过滤的核心指令,可根据指定的字符串、正则表达式在文件或管道流中精准匹配内容,常用于日志分析、代码检索、数据筛选等场景。
关键选项:
- -i :忽略大小写(如 grep -i "Error" log.txt 同时匹配 Error 、 error );
- -n :显示匹配行的行号;
- -v :反向匹配(显示不包含匹配模式的行);
- -r :递归搜索目录下的所有文件(如 grep -r "function" ./src/ )。
上图是Linux系统中 grep 命令结合管道操作的演示,用于文本筛选与反向匹配。通过 cat 读取文件, head -2100 获取前2100行, tail -10 提取其中最后10行,形成“定位中间内容”的链条。 grep '8' 筛选出包含数字“8”的行(仅 hello 2098 )。 grep -v '8' 反向匹配排除包含“8”的行,输出剩余9行。
top
这是Linux系统中用于进程监控的两个指令: top 和 htop 。
系统内置的进程监控工具,实时显示CPU、内存、进程的资源占用情况。
特点:界面简洁,可按CPU、内存等指标排序进程,但交互操作相对单一。
关键信息示例:
- 系统负载: load average: 0.00, 0.01, 0.05 (1分钟、5分钟、15分钟负载);
- 进程列:包含 PID (进程ID)、 %CPU (CPU占用率)、 %MEM (内存占用率)、 COMMAND (进程命令)等核心字段。
htop
top 的增强版工具,提供更直观的彩色界面和交互式操作。
特点:支持鼠标操作、进程树视图、资源使用柱状图,信息展示更友好,需手动安装(如 yum install htop 或 apt install htop )。
关键信息示例:
- 资源概览: Mem (内存)、 Swp (交换分区)的使用情况以彩色进度条展示;
- 进程列:与 top 字段类似,但界面交互性更强,可快速筛选、终止进程。
zip / unzip
这是Linux系统中用于文件压缩与解压缩的两个指令: zip 和 unzip 。
1. zip
功能:将一个或多个文件/目录打包并压缩成 .zip 格式的文件,常用于多文件的归档和网络传输。
- 压缩单个文件: zip archive.zip file.txt ; (将 file.txt 文件中的内容压缩到 archive.zip 压缩文件中)
- 压缩目录(含子文件): zip -r dir_archive.zip ./mydir/ ( -r 表示递归压缩目录内所有内容)(将 ./mydir/ 目录下的文件目录压缩到 dir_archive.zip 文件中)。
2. unzip
功能:解压 .zip 格式的压缩包,还原出原始文件或目录。
- 解压到当前目录: unzip archive.zip ;
- 解压到指定目录: unzip archive.zip -d /path/to/target/ 。
打包和压缩
打包 : 多个文件合成一个文件 后缀为.tar
网络传输 增加下载效率
解压再解包
将 lesson5 打包压缩为 lesson5.zip 一定要带 -r 选项
解压:
解压到其他目录时要带 -d
rzsz
rz 和 sz 是Linux系统中用于本地与远程服务器之间传输文件的指令,基于ZModem协议工作,常见于SSH终端(如Xshell、SecureCRT)中,无需额外安装FTP工具即可快速完成文件上传下载。
1. rz(接收文件,本地→服务器)
- 功能:从本地计算机向远程Linux服务器上传文件。
- 操作流程:在SSH终端输入 rz 后,会弹出本地文件选择窗口,选择需上传的文件即可开始传输。
- 扩展用法: rz -be ( -b 二进制传输, -e 强制 escapes 所有控制字符),可避免特殊字符导致的传输异常。
2. sz(发送文件,服务器→本地)
- 功能:从远程Linux服务器向本地计算机下载文件。
- 语法: sz 文件名 ,执行后本地会弹出保存路径选择窗口,确认后开始下载。
- 示例:下载服务器上的 log.txt 文件,输入 sz log.txt 即可。
tar (重要)
tar 是 Linux/Unix 系统中文件打包与归档的核心指令,可将多个文件/目录合并为一个 .tar 格式的“归档包”,常结合 gzip 、 bzip2 等工具实现打包+压缩,生成 .tar.gz 、 .tar.bz2 等常见压缩包格式。
参数:
使用实例:
操作类型 | 指令示例 | 说明 |
打包 | tar -cvf archive.tar ./dir1 file.txt | 将 dir1 目录和 file.txt 打包为 archive.tar |
压缩(gzip) | tar -zcvf archive.tar.gz ./data/ | 打包并压缩 data 目录为 .tar.gz 格式 |
解压(gzip) | tar -zxvf archive.tar.gz | 解压 .tar.gz 包到当前目录 |
解压到指定目录 | tar -zxvf archive.tar.gz -C /tmp/extracted/ | 解压到 /tmp/extracted/ 目录(指定路径) |
查看包内文件 | tar -tvf archive.tar | 列出归档包内的文件列表,不实际解压 |
bc
bc 是 Linux/Unix 系统中的高精度计算器工具,支持整数、小数运算,还能处理三角函数、对数等复杂数学计算,同时支持自定义变量和函数,常用于 Shell 脚本中的数值计算场景。
- 直接启动交互模式:在终端输入 bc 即可进入交互界面,输入数学表达式后回车即可得到结果,例如:
bc
10 + 20
30
3.14 * 5
15.70
- 非交互模式(结合管道或文件):可通过管道传递表达式,例如 echo "scale=2; 10/3" | bc ,输出 3.33 ( scale 用于设置小数位数)。
Linux高频使用的快捷键
shutdown
关机指令
总结:
本文系统介绍了Linux系统中常用的基础命令及其功能,包括文件和目录操作、文本处理、系统监控、压缩解压等六大类指令。详细讲解了ls、cd、mkdir等基本文件操作命令,cat、grep、head等文本处理工具,top、htop进程监控指令,以及zip、tar等压缩工具的使用方法。同时阐述了Linux命令作为可执行文件的本质特性,并介绍了管道、重定向等高效数据处理机制。文章还涵盖了日期查看、计算器、关机等实用命令,以及快捷键操作,为Linux初学者提供了全面的基础命令参考指南。