【Linux操作系统】简学深悟启示录:Linux基本指令
本篇将开启 Linux 操作系统的全面学习,默认使用的是 CentOS 操作系统,使用 Xshell 进行远程登录服务器进行操作测试
什么是操作系统?
这是一个计算机系统层次结构的示意图,运行的过程是从上往下实现的,操作系统其实本质也是一种软件,是一种基础软件,对下提供软硬件资源的管理,对上提供稳定、快速、安全的操作环境,给予应用软件功能的支撑,因此所有的软件最终都会转化为硬件行为,都要经过操作系统的管理
Xshell的使用
目前更新的最新的是Xshell8,可以直接下载家庭学校的免费版本,能够满足基本的 Linux 学习,再就是需要自己购买一台轻量级云服务器进行登录使用
1 | [C:\~]$ ssh root@公网IP地址 |
首先初始状态下只有一个主用户,即 root,输入 ssh root@公网IP地址,然后会弹出窗口让你输入密码,公网 IP 和密码都能在你购买服务器的地方找到
1 | [C:\~]$ |
显示这一段说明就连接成功了,这个警告不用管,我使用的是华为云,可能会出现些许不兼容的情况,但是这不影响后续的学习,但是我们一般不使用主用户,root 操作记录混杂,出问题时难以定位责任;普通账户操作留痕,便于排查。所以一般创建普通用户来使用
1 | [root@hcss-ecs-6aa4 ~]# adduser 用户名 |
adduser 用户名 用于增加普通用户
1 | [root@hcss-ecs-6aa4 ~]# passwd 用户名 |
passwd 用户名 设置刚创立的普通用户的密码,一般输入的时候密码不回显
然后可以输入 exit 退出 root 账户(其实也能用命令直接切换,后面会讲),切换用户名即可登录普通用户账号
🔥值得注意的是:
1 | [root@hcss-ecs-6aa4 ~]# userdel -r 用户名 |
由于 root 用户权限比普通用户高,所以只有在 root 用户下才能通过 userdel -r 用户名 来删除普通用户
常用指令
Linux 通常都在后端运行,纯命令行能降低消耗,提高效率,因此一般不需要图形化界面,指令一般都会搭配选项使用
ls指令
ls 的作用是列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息
在 Linux 中,目录指的就是我们平常创建的文件夹,蓝色的是目录,白色的是文件
-a列出目录下的所有文件,包括以.开头的隐含文件-d将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-i输出文件的i节点的索引信息。 如ls –ai指定文件-k以k字节的形式表示文件的大小。ls –alk指定文件-l列出文件的详细信息-n用数字的UID、GID代替名称(介绍UID、GID)-F在每个文件名后附上一个字符以说明该文件的类型,*表示可执行的普通文件;/表示目录;@表示符号链接;|表示FIFOs;=表示套接字(sockets)(目录类型识别)-r对目录反向排序-t以时间排序-s在l文件名后输出该文件的大小(大小排序,如何找到目录下最大的文件)-R列出所有子目录下的文件(递归)-1一行只输出一个文件
🔥值得注意的是:
常用的是 -a、-l、-F、-d,其他一般不怎么用
1 | [zzh_test@hcss-ecs-6aa4 ~]$ ll |
ls -l 可以缩写成 ll
第三行: 以 d 开头的表示目录
第四行: 以 - 开头的表示普通文件
pwd指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ pwd |
pwd 的作用是显示当前所在的路径,没有搭配的选项
cd指令
Linux 任何一个目录下都有两个隐藏文件
.:表示当前路径..:表示上一级路径
这两个文件都是为了帮助定位文件位置,即相对路径,平常见到的路径一般是绝对路径
所有的文件都是从根目录 / 开始的
1 | [zzh_test@hcss-ecs-6aa4 ~]$ ls |
改变工作目录,将当前工作目录改变到指定的目录下
cd ..:返回上级目录cd /home/litao/linux/:绝对路径cd ../day02/:相对路径cd ~:进入用户家目录cd -:返回最近访问目录
touch指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ touch text2 |
touch 指令可更改文档或目录的相关属性,或者新建一个不存在的文件
-a或--time=atime或--time=access或--time=use只更改存取时间-c或--no-create不建立任何文档-d使用指定的日期时间,而非现在的时间-f此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题-m或--time=mtime或--time=modify只更改变动时间-r把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同-t使用指定的日期时间,而非现在的时间
mkdir指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ mkdir -p dir1/dir2/dir3 |
mkdir 用于创建目录(文件夹)
🔥值得注意的是:
-p一般用于递归式创建目录,普通创建就需要进入该级目录才能创建下一级目录,所以-p就方便了很多tree指令用于展示树形结构的目录文件的层级关系,使用yum install -y tree指令下载即可使用
rmdir指令 && rm指令
rmdir 只能用来删除空目录
-p当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除
1 | [zzh_test@hcss-ecs-6aa4 ~]$ tree |
rmdir 还是太鸡肋了,所以更多使用 rm,能够删除文件或目录
-f即使文件属性为只读(即写保护),亦直接强制删除-i删除前逐一询问确认-r删除目录及其下所有文件(递归删除)
man指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ man man |
man 指令用于查看指令手册,毕竟不可能记住所有的指令,man man 是查询 man 这条指令的意思
-k:根据关键字搜索联机帮助num:man num printf只在第num章节找,比如printf在第一章是一个命令,但是在第三章是一个函数,有可能你的系统没有安装相应手册文件,可执行yum install man-pages,就能查找函数了-a:将所有章节的都显示出来,比如man printf它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕
cp指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ ls |
cp 指令的作用是将已存在的文件或目录,复制到新文件(若文件不存在会自行创建)或目录中
1 | cp 源文件1 源文件2 源文件3... 目标目录/ |
同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
-f或--force强行复制文件或目录, 不论目的文件或目录是否已经存在-i或--interactive覆盖文件之前先询问用户-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理-R或--recursive递归处理,将指定目录下的文件及子目录一并处理
🔥值得注意的是: 同一目录下,不能出现同名文件
mv指令
1 | [zzh_test@hcss-ecs-6aa4 dir1]$ mv a1 ../ |
mv 命令是 move 的缩写,可以用来 移动文件 或者 将文件改名
第一行: 表示将文件 a1 剪切到上级目录下
第二行: 表示将文件 a1 剪切到当前路径的文件 text1,即重命名
第三行: 表示将文件 a1 剪切到当前路径的目录 dir1
第四行: 表示将文件 a1 剪切到上级路径的文件 text1,即重命名
第五行: 表示将文件 a1 剪切到上级路径的目录 dir1
-f:force强制的意思,如果目标文件已经存在,不会询问而直接覆盖-i:若目标文件已经存在时,就会询问是否覆盖
cat指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ tree |
cat 的作用是查看文件内容
-b对非空行输出行编号-n对输出的所有行编号-s不输出多行空行,即将多行空行压缩成一行空行输出
echo指令(重定向)
1 | [zzh_test@hcss-ecs-6aa4 ~]$ ll |
在 Linux 中,一切的指令本质皆是可执行文件,指令也是在系统特定路径下存在的,本来正常情况下 echo 是向显示器打印出来给我们看的,但是加了 > 表示 输出重定向,即将本来打印到显示器的文本重定向到具体文件中(若文件不存在会自动创建)
默认情况下,echo 会在输出末尾自动加换行符;若要取消,在 Linux 中可用 echo -n "文本",例如 echo -n "Hi" 输出后不会换行
但是 > 在写入的时候是覆盖式写入,即先清空文件再写入,如果想要追加可以使用 >>,同样的,像 cat > text1 这样的,叫做 输入重定向,其实作用和 cat text1 没啥区别,他的区别在深入学习后会讲
通常能够打印信息到显示器的指令都能使用输出重定向,输入重定向同理
more指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ more Text |
当遇上大文本时,cat 的查看就不适合了,因为需要自行翻找内容特别麻烦,因此 cat 只适合查看小文本,这个时候就要使用 more 指令,查看的时候可以按 ENTER 键向下滚动翻找
/字符串:查找特定内容q:退出more
less指令
less 与 more 类似,但使用 less 可以使用⬆️⬇️随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件,只会加载你需要看的部分,加快了文件打开速度
-i:忽略搜索时的大小写-N:查看的时候,输入再按ENTER会显示每行的行号-n:隐藏输出的所有行编号/字符串:向下搜索“字符串”的功能?字符串:向上搜索“字符串”的功能q:退出lessn:重复前一个搜索(与/或?有关)N:反向重复前一个搜索(与/或?有关)
用 /hello 搜关键词 hello ,找到第 3 行的 hello
按 n → 继续往下(正向)找下一个 hello
按 N → 往回(反向)找之前的 hello
head指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ head -5 Text |
head 用于捕捉大文本的前面的内容,若没有指定行数,head 默认查看前十行
-n:显示的行数
tail指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ tail -5 Text |
tail 用于捕捉大文本的结尾的内容,若没有指定行数,tail 默认查看后十行
-f:循环读取,执行后不会退出,而是持续监听文件变化,一旦文件有新内容添加(比如日志文件被写入新记录),会立即显示在屏幕上,直到手动按Ctrl + C终止-n:显示行数
🔥值得注意的是:
有一个文件共有 1000 行内容,请取出第 500-510 行内容
- 方法一
head -510 Text生成1到510的序列装入临时文件tmptail -11 tmp取出结尾500-510行的内容
- 方法二
1 | [zzh_test@hcss-ecs-6aa4 ~]$ head -510 Text | tail -11 |
利用管道文件的方法,像流水线一样快速处理多个指令,| 作用是将前一个命令 head 的输出作为后一个命令 tail 的输入
date指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ date +%Y-%m-%d_%H:%M:%S |
data 用于显示时间
- 在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下
%H:小时(00..23)%M:分钟(00..59)%S:秒(00..61)%X:相当于%H:%M:%S%d:日 (01..31)%m:月份 (01..12)%Y:完整年份 (0000..9999)%F:相当于%Y-%m-%d
- 在设定时间方面
date -s//设置当前时间,只有root权限才能设置,其他只能查看。date -s 20080523//设置成20080523,这样会把具体时间设置成空00:00:00date -s 01:01:01//设置具体时间,不会对日期做更改date -s “01:01:01 2008-05-23″//这样可以设置全部时间date -s “01:01:01 20080523″//这样可以设置全部时间date -s “2008-05-23 01:01:01″//这样可以设置全部时间date -s “20080523 01:01:01″//这样可以设置全部时间
- 时间戳
时间戳: 从
1970年1月1日开始算的秒数,比如2025年7月4日对应的秒数是1751500800
- 时间->时间戳:
date +%s - 时间戳->时间:
date -d@1508749502 Unix时间戳(英文为Unix epoch,Unix time,POSIX time或Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒
cal指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ cal |
cal 命令可以用来显示公历(阳历)日历
-3:显示系统前一个月,当前月,下一个月的月历-j:显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)-y:显示当前年份的日历,cal –y 2018
find指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ tree |
find 可以在磁盘中进行指定文件的搜索,在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指 30G 字节以上的文件系统)
🔥值得注意的是: 还有一些和find功能类似的指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ which ls |
which通常用于搜索指令的路径
1 | [zzh_test@hcss-ecs-6aa4 ~]$ whereis ls |
whereis 用于查找命令、源文件和手册页的位置
which仅查找$PATH中的可执行文件;whereis搜索范围更广,包括系统默认的多个目录,且能找到手册页、源码等which更侧重 “命令在哪里可以执行”,whereis更侧重 “与目标相关的所有系统文件在哪里”
grep指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ grep 99 Text |
grep 指令是个行文本过滤工具,查找文件包含特定文本行的内容,并显示出来
-i:忽略大小写的不同,所以大小写视为相同-n:顺便输出行号-v:反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
zip/unzip指令
1 | [zzh_test@hcss-ecs-6aa4 ~]# zip Text.zip Text |
zip 命令用于压缩文件,若想要解压文件,可以输入 unzip Text.zip。由于服务器之间的差异,可能没有这两个指令,可以使用 yum install -y zip unzip 进行下载
-r递归处理,将指定目录下的所有文件和子目录一并处理
tar指令
1 | [zzh_test@hcss-ecs-6aa4 ~]# tar -czf code.tgz text2 |
tar 是 Linux 环境里常用的压缩指令,比 zip 更实用,通常压缩为 tar.gz 格式(简写为 tgz ),tar 不能压缩为 zip,常用选项为 -czf(creat zip file 创建压缩文件),-tzf(查看压缩文件),-xzf(解压压缩文件)
-c:建立一个压缩文件的参数指令-x:解开一个压缩文件的参数指令-t:查看tarfile里面的文件-z:是否同时具有gzip的属性?亦即是否需要用gzip压缩?-j:是否同时具有bzip2的属性?亦即是否需要用bzip2压缩?-v:压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!-f:使用档名,请留意,在f之后要立即接档名喔!不要再加参数!-C: 解压到指定目录
bc指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ bc |
直接使用bc指令进入交互模式进行计算
1 | echo "sqrt(25)" | bc -l # 计算平方根,输出 5.0000000000 |
也可以用 echo 传递表达式给 bc 在非交互模式下进行计算,-l 表示调用数学库进行计算
uname指令
1 | [zzh_test@hcss-ecs-6aa4 ~]$ uname -r |
uname -r 用来获取电脑和操作系统的相关信息,-a 或 –all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
shutdown指令
关机指令
-h:将系统的服务停掉后,立即关机-r:在将系统的服务停掉之后就重新启动-t sec:-t后面加秒数,即过几秒后关机的意思
常用快捷键
[Tab]按键:具有命令补全和档案补齐的功能[Ctrl]-c按键:让当前的程序停掉[Ctrl]-d按键:通常代表着键盘输入结束(End Of File,EOF戒End OfInput)的意思;另外,他也可以用来取代exit[Ctrl]-r按键:搜索历史命令,也可以用history指令查看,通常只保存最新的1000条指令














