Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!
我的博客:<但凡.
我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C++修炼之路》、《Linux修炼:终端之内 洞悉真理》
欢迎点赞,关注!
从今天起正式开始更新linux的相关内容了。在学习linux的初期是比较枯燥的(各种指令),当然我会尽可能的解释清楚各种指令。
使用环境:Centos 7
1、linux引入
Linux是一种开源的操作系统内核,由林纳斯·托瓦兹(Linus Torvalds)于1991年首次发布。它以Unix为设计灵感,但独立开发,遵循自由和开源软件(FOSS)原则。严格来说,“Linux”仅指内核,但通常被用来泛指基于Linux内核的完整操作系统(如Ubuntu、Fedora、Centos等),这些系统包含内核、工具链、库及应用程序。
首先我们来说一下,什么是命令,为什么要学习命令?
类比我们的windows操作系统,我们可以使用图形化界面这个“外壳程序”来使用操作系统,同样我们可以使用命令行,也就是一串串的命令,来操作我们的linux系统。命令行就是外壳程序。一串串的指令,就相当于我们使用鼠标在windows系统上的一次次点击,拖动。
那么我们用户,通过命令行,对这个外壳程序“发号施令”,接着,外壳程序通过命令行解释器,把我们的命令翻译成机器能够看懂的话,机器再根据这个翻译出来的话去执行。接着,执行结果在通过外壳程序反馈给我们。
简单总结一下外壳程序的意义:
(1)可以保护操作系统。
(2)可以便于用户使用操作系统。
所以说,各种命令是程序员和linux系统打交道必不可少的技能。那么我们在介绍完linux系统之后先简单介绍一些基础指令。
Linux的特点
开源与自由
Linux内核及其多数发行版遵循GNU通用公共许可证(GPL),用户可自由使用、修改和分发代码。
多用户与多任务
支持多用户同时访问,且能高效处理多任务并行运行。
高稳定性与安全性
由于模块化设计和开源特性,漏洞修复迅速,系统崩溃概率低,适合服务器等关键场景。
跨平台支持
兼容x86、ARM、PowerPC等多种硬件架构,从嵌入式设备到超级计算机均可运行。
常见的Linux发行版
Debian系
如Ubuntu、Linux Mint,以用户友好性和丰富的软件仓库著称。
Red Hat系
包括Fedora(社区版)和RHEL(企业版),强调稳定性和商业支持。
Arch Linux
滚动更新模式,适合高级用户,提供高度自定义性。
其他专精发行版
如Kali Linux(安全测试)、CentOS(服务器优化)等。
Linux的应用场景
服务器领域
超过90%的互联网服务器运行Linux,得益于其稳定性、低资源占用和开源生态。
嵌入式系统
智能家电、路由器、工业设备等广泛采用轻量级Linux版本。
开发与云计算
开发者常用Linux作为开发环境,云平台(如AWS、Azure)大量提供Linux虚拟机。
桌面与教育
部分发行版专注于桌面体验,如Ubuntu;也用于计算机科学教育。
Linux与其他操作系统的区别
与Windows对比
Linux更轻量、可定制,但部分专业软件(如Adobe套件)兼容性较差。
与macOS对比
macOS基于Unix(BSD),但闭源;Linux提供更自由的硬件选择和开源生态。
2、基础指令
我们在家目录下创建以下这些文件,为了测试各种指令:
ls指令
语法: ls [选项] [目录或文件]
ls 指令可以列出当前目录下的所有子目录和文件。对于列出的每个文件,列出文件名以及其他信息。
常用选项:
-a 列出目录下的所有文件,包括以.开头的隐含文件。
-d 将目录像文件一样显示,而不是显示其下的文件。
-i 输出文件的i节点的索引信息。如 ls -ai 指定文件
-k 以k字节的形式表示文件的大小。
-l 列出文件的详细信息。ls -l可以用 ll 代替
-n 用数字的UID,GID代替名称
-F 在每个文件名后附上一个字符以说明该文件的类型," * "表示可执行的普通文件;" / "表示目录;“@”表示符号链接;“|” 表示FIFOs;"="表示套接字。
-r 对目录的反向排序
-t 以时间排序
-s 在l文件名后输出该文件的大小。
-R 列出所有子目录下的文件。
-l 一行只输出一个文件
示例:
pwd命令
pwd命令可以显示用户当前所在目录。
示例:
cd指令
Linux系统中,万物皆是文件。一个个文件通过目录树进行链接。对于某个文件,我们需要通过指定的路径去访问。
绝对路径:一般从/开始,不依赖其他目录的定位文件的方式。
相对路径:相对于当前用户所处目录,定位文件的路径方式。
cd指令可以改变工作目录。将当前工作目录改变到指定的目录下。cd+绝对路径或cd+相对路径。cd ~ 快速进入家目录。
示例:
touch指令
touch指令可以更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个文件。
语法:touch [选项] 文件...
常用选项:
-a 仅更改访问时间
-c 仅更改修改时间
示例:
mkdir指令
mkdir指令可以创建目录
语法: mkdir [选项] dirname
示例:
rmdir 指令
rmdir是和mkdir相对的指令。可以使用rmdir删除目录。
语法:rmdir [选项] [dirname]
常用选项: -p 当子目录被删除后父目录也变成空目录的话,就连父目录一起删除。
rm指令
rm命令可以同时删除文件或目录。
语法: rm [选项] [dirname/dir]
常用选项:
-f 即使文件属性为只读,也直接删除
-i 删除前注意询问确认
-r 删除目录及其下所有文件
示例:
man指令
我们可以通过man指令查看linux命令手册
语法: man [选项] 命令
常用选项:
-k 根据关键字搜索联机帮助
num 只在第num章节查找
-a 将所有章节的都显示出来
Linux 手册页分为多个章节,不同章节内容不同:
- 用户命令(如
ls
、cd
)。 - 系统调用(如
open
、fork
)。 - 库函数(如
printf
、malloc
)。 - 设备文件(如
/dev/null
)。 - 文件格式(如
/etc/passwd
的格式)。 - 游戏和屏保。
- 杂项(如宏包、协议)。
- 系统管理命令(如
ifconfig
、iptables
)。
cp指令
cp指令可以复制文件和目录
语法: cp [选项] 源文件或目录 目标文件或目录
常用选项:
-f 强制复制文件或目录,不论目的文件或目录是否已经存在
-i 覆盖文件之前先询问用户
-r 递归处理,将指定目录下的文件与子目录一并处理。
示例:
mv指令
mv指令是move的缩写,可以用来移动文件或者将文件改名。
语法:mv [选项] 源文件或目录 目标文件或目录
常用选项:
-f 如果目标文件存在则强制覆盖
-i 如果目标文件存在会询问是否覆盖
示例:
移动文件:
修改文件名:
cat指令
cat指令可以查看目标文件的内容
语法: cat [选项] [文件]
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
示例:
我事先在code.c文件中写入了一万行重复内容,如果cat code.c的话,这些内容会一股脑的显示出来:
more指令
more命令功能类似cat,但是比cat更好一些,因为他支持向下翻页(空格键)
常用选项:
-n 指定输出行数
q 退出more
示例:
less指令
less比more更强大,因为在使用less的时候我们既可以往前翻,也可以往后翻(通过上下箭头或空格键)。也就是说less可以随意浏览文件,而more仅能向前移动。less在查看之前不会加载整个文件。
所以说,在less存在的情况下前面两个指令就有点小丑了。
语法: less [参数] 文件
常用选项:
-i 忽略搜索时的大小写
-N 显示每行的行号
/ 字符串 向下搜索字符串
?字符串 向上搜索字符串
n 重复前一个搜索
N 反向重复前一个搜索
q 退出
示例:
搜索功能不好通过截图展示,大家自己测试吧
我们也可以在下方直接输入数字,他就会自动跳转这个数字行数。
head指令
head与tail就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head用来显示档案的开头至标准输出中,而tail是查看文档的结尾。
语法:head [参数...] [文件...]
常用选项:
-n<行数> 显示的行数
tail指令
用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用于查看日志文件。
常用选项:
-f 循环读取
-n<行数> 显示行数
示例:
date 指令
可以用指定格式显示系统时间
语法:data [选项] ...
常用选项:
%H 小时
%M 分钟
%S 秒
%X 相当于 %H:%M:%S
%d 日
%m 月份
%Y 完整年份
%F 相当于%Y-%m-%d
%s 时间戳
-s 修改时间
时间戳:以1970年1月1日(UTC)为起点,计算经过的秒数或毫秒数。例如,1625097600
表示2021年6月30日0点0分0秒(UTC)。
示例:
cal指令
cal命令可以用来显示公历日历。
格式:cal [选项] 年份
常用选项:
-3 显示系统前一个月,当前月,下一个月的月历
-j 显示在当年中的第几天
-y 显示当前年份的日历
示例:
find指令
find指令可以在目录中搜索文件。find指令时比较复杂的,因为他的选项比较多,我们就介绍一个常用的,find指令是有可能会访问磁盘的。
语法:find pathname [选项]
常用选项:
-name 按照文件名查找文件。
示例:
which指令
which指令可以搜索系统指令的命令。
语法: which + 指令
示例:
whereis 指令
用于找到程序的源,二进制文件或手册。可以理解为升级版的which
示例:
alias 指令
用于设置命令的别名
语法:alias 别名=' 指令 '
示例:
grep指令
grep指令可以在指定文件中搜索字符串,并将他所在的行打印出来
语法:grep [选项] 搜索字符串 文件
常用选项:
-i
忽略大小写(case-insensitive)。
-v
反向匹配,输出不包含模式的行。
-n
显示匹配行的行号。
-r
或-R
递归搜索目录中的文件。
-l
仅输出包含匹配项的文件名。
-c
统计匹配的行数而非显示内容。
-w
全词匹配(避免部分匹配)。
-A NUM
显示匹配行及后续NUM行(After context)。
-B NUM
显示匹配行及前导NUM行(Before context)。
示例:
我提前在code.c中写了一小段代码。
zip/unzip 指令
压缩与解压指令
语法: zip 压缩文件.zip 目录或文件
常用选项:
-r 递归处理
示例:
将text1,text2压缩成combine.zip
解压缩到testunzip文件夹,其中这个-d必不可少,他是告诉系统我们是要解锁到指定文件夹下,默认是解压到当前目录下。
tar 指令
这个指令也是打包/解包,但是这个指令更常用也更重要
语法:tar [选项] dst src
常用选项:
-c 建立一个压缩文件的参数指令
-x 解开一个压缩文件的参数指令
-t 查看tarfile里面的文件
-z 是否同时具有gzip的属性(带着就是打包并压缩)
-j 是否具有bzip2的属性
-v 压缩的过程中显示文件(常用)
-f 使用档名,在f之后要立即接档名
-C 解压到指定目录
其实对于tar命令,我们一般使用的选项是-czvf(压缩)和-xzvf(解压)、如果去掉z就是打包和解包。
示例:
压缩:
解压:
这里的-C也是用来告诉系统我们要解压到特定文件夹。
echo指令
echo命令默认是在终端输出文本或变量的值。也就是把文本输出到显示器文件。
当然echo命令也可以搭配重定向符号>把文本输出到指定文件中。
示例:
其中>是覆盖内容,>>是追加内容。另外,我们!有特殊语义,所以说用 \ 转义一下。
bc指令
bc其实就是计算器。并且我们还可以设置计算器的精度。
示例:
其中设置精度仅对除法有效。
uname命令
uname命令可以获取电脑和操作系统的相关信息。
常用选项:-a,全部显示。
示例:
我们也可以使用lsb_release -a查看软件方面更详细的内容:
history指令
我们可以使用history指令查看历史上使用过的命令。linux系统可以自动记录最近的一千条命令。
我们可以把历史命令都放到指定文件中:
shutdown指令
这个命令就是关机,没啥好说的。如果你是服务器的话,在执行这个命令之后如果你想重新开启服务器,就得去你买服务器的那个官网上(比如阿里云,华为,火山...)重新开启服务器。
在linux中,万物皆文件,而我们各种命令,其实也是别人已经提前写好的可执行程序而已。
3、几个常用热键
(1)tab补全
输入命令的一部分,按tab可以补全命令,或者展示以这串字符开头的命令都有哪些。
(2)ctrl+c
ctrl+c可以直接终止当前程序。
(3)ctrl+d
ctrl+d可以退出。我们可以用ctrl+d退出xshell的登录。 我们可以使用xshell远程访问服务器。
(4)上下箭头
上下箭头可以看历史命令。
(5)ctrl+r
ctrl+r可以搜索历史命令。
(6)!
!+字符 可以自动执行历史上最近的以这个字符开头的命令。
好了,今天的内容就分享到这,我们下期再见!