常见指令以及权限理解(下)
基础指令的继续学习,本篇博客是对于Linux的大部分常见指令的学习和使用,指令的选项都是比较常用的,基本的复制移动,删除文件or目录,查看文件的三种方式cat、more、less,以及head和tail的使用使得文件查看更加方便,查找指令grep的出现使得查找文件指定内容更加便捷,压缩打包的指令zip和tar的使用,以及其他指令的学习。
文章目录
- 常见指令以及权限理解(下)
- rmdir和rm指令
- man指令(重要)
- cp指令(重要)
- mv指令
- cat
- more
- less指令
- head和tail指令
- 时间相关的指令
- date指令
- cal指令
- find指令
- which指令
- whereis指令
- grep指令
- zip/unzip指令
- tar指令
- bc指令
- uname -r 指令
- XShell热键
- 关机
rmdir和rm指令
rmdir指令主要是用于删除空目录的,但是对于非空目录的需要rm指令来删除,mkdir是用来建立目录,
rmdir指令选项(删除空目录)
- -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm指令选项 (删除文件or目录)
- -f 即使文件属性为只读(即写保护),亦直接删除
- –i 删除前逐一询问确认
- -r 删除目录及其下所有文件
man指令(重要)
Linux的命令有很多参数,但是我们不可能全记住,我们可以通过联机手册获得帮助,这样的话,man指令就是访问Linux手册的命令
进入文档之后,按q退出,可以按上下键,翻阅文档
man –help 进入帮助界面
man 指令 详细介绍指令的内容和用法,按q退出
cp指令(重要)
cp用来拷贝文件,复制文件/目录
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
[root@iZ0jl82geus4yqbhg71ttrZ linux]# cp a1.txt a2.txt a3.txt a4 //a4目录不存在 cp: target ‘a4’ is not a directory //报错 [root@iZ0jl82geus4yqbhg71ttrZ linux]# cp a1.txt a2.txt a3.txt test //test存在 [root@iZ0jl82geus4yqbhg71ttrZ linux]# // 成功复制cp [root@iZ0jl82geus4yqbhg71ttrZ linux]# tree test/ test/ ├── a1.txt ├── a2.txt └── a3.txt
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理
如果是复制目录的内容,那么就需要-r来递归复制
如果只是如果是cp一个文件or目录,到指定的目录中,如果这个目录不存在,就会创建这个目录然后cp进去对应的文件,但是如果是多个文件的话,再加上指定目录不存在就会报错
mv指令
mv指令是可以移动文件的位置,或者将文件进行改名,这是Linux系统下常用的命令,经常用来备份文件或者是目录
//语法为
mv [选项] 源文件or目录 目标文件or目录
//1.如果第二个参数是(普通)文件,那么就是将文件进行重命名,如果是目录,。那就是将文件移动到这个目录下
//2.如果目标是文件的话,将源文件or目录的名字更改为目标文件的名字
//3.如果目标是目录的话,那么就是将源文件or目录移动到指定目录中
mv指令支持多个源文件移动到指定的目录中
常用选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
cat
cat指令,是进行查看指定文件内容的,是直接查看所有内容的,如果说这个文件比较大的话,就不太方便了(会直接跳到文件后面),比较适合行数较小的文件查看文件内容
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
-b和-nb是一个效果,-s不输出多行空行,意思为连续的空行输出为一行空行
more
more指令类似于cat,但是对于大型文件是比较好用的,解决的cat的一些不便
+n 从第n行开始显示
-n 定义屏幕大小为n行
-c 从顶部清屏,然后显示
-p 通过清除窗口而不是滚动屏幕来对文件进行换页,和-c相似
q 退出more
这个-n,n是需要我们输入的数字,表示定义屏幕打大小为n行,+n,表示从第n行开始显示
less指令
less指令也是对于文件或者其他通过管道输出的内容进行分页显示的工具,less的用法比more更加灵活,more我们只能向下翻看,但是不能向前翻看,使用上下键,或者是pageup/pagedown功能来向前向后翻看文件
//语法 less [选项] 文件
less可以随意浏览文案金,比more更加灵活,且less在查看之前不会加载整个文件
选项:
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
less 与 cat 和 more 的区别:
cat 命令:用于显示整个文件的内容,单独使用没有翻页功能。因此经常和 more 命令搭配使用(通过管道),cat 命令还有就是可以将数个文件合并成一个文件的功能。
more 命令:让画面在显示满一页时暂停(-n可以设置一页的行数),此时可按空格健继续显示下一个画面,或按 q 键停止显示。
less 命令:less 命令的用法与 more 命令类似,也可以用来浏览超过一页的文件。所不同的是 less 命令除了可以按空格键向下显示文件外,还可以利用上下键来卷动文件。当要结束浏览时,只要在 less 命令的提示符“:”按下 q 键即可。
其实这三个命令除了 cat 命令有合并文件的功能,其余功能上相近,只是从浏览习惯和显示方式上有所不同。
head和tail指令
这两个指令的功能比较好理解,head就是显示开头或者结尾某个数量的文字区块,head用来显示文件的头部(可以设定显示的行数)tail是显示文件的尾部(也可以指定行数)
//head指令
head [选项] 文件
-n n为数字,是显示从第一行开始到第n行文件的所有内容
//tail指令
tail [选项] 文件
-n n同样为数字,显示从倒数第n行开始到文件某尾
时间相关的指令
date指令
date指令输入之后,显示的是年月日时分秒,不过输出的方式是英文的,我们可以通过一些选项,设置输出方式
//一般来说
输入:date
输出:Sun May 14 16:01:32 CST 2023
//加上选项,我们知道的是
%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 +%Y-%m-%d_%H_%M_%S
输出:2023-05-14_16_03_25
//我们也可以根据%F和%X使得输出方式变得简洁一点
[root@iZ0jl82geus4yqbhg71ttrZ linux]# date +%F_%X
2023-05-14_04:04:34 PM
时间戳
提到时间戳,大家想必不会陌生,对于以后的我们进行工作之后,写项目的时候需要做日志,那个为了方便查找在哪一个时间段谁使用了Linux,就会使用到时间戳,主要是时间戳是一个递增的数值,所以方便查询
//时间戳
date +%s
[root@iZ0jl82geus4yqbhg71ttrZ linux]# date +%s
1684051677
//这个数值,为从1970年1月1日0时开始计算的至今的秒数,因为我们属于的是东八区,所以我们实际上的是从八点开始的时间
注意的一点就是,我们是东八区,所以是1970.1.1的8点(美国的0点)开始计数的
cal指令
cal指令的使用方式比较简单,只是调用日历,可以选择输出本月,也可以输出某年日历
//cal
cal 直接输出表示当前年月
选项
-3 表示显示系统前一个月,本月和后一个月
-j 表示显示当前年中的第几天,从1.1开始算起
-y 表示显示当前年份的日历 (也可也直接使用cal 2012 表示2012整年的日历)
选项都是可以连着使用的,只要选项合理即可
find指令
find指令是作为搜素使用的,我们知道面对一个很大的文件进行查找,查找指定文件
//find指令
使用方法为 find -name 文件名
find可以在指定路径下进行文件的搜索,是真的在磁盘文件中查找
find 指定路径 -name 文件名 在指定路径下查找文件,显示文件的相对路径
//演示
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ find ../why
../why
../why/.bashrc
../why/.bash_history
../why/d1
../why/d1/d2
../why/d1/d2/d3
../why/d1/test.txt
../why/.bash_profile
../why/text.txt
../why/test
../why/.bash_logout
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ find ../why -name test
../why/test
which指令
该指令也是进行查找的,但是是在/usr/bin文件中,搜索指令文件
所谓指令文件就是例如 ls,cd这样的指令所在/usr/bin的位置
//which
which 指令
//演示
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
//显示ls指令在 /usr/bin/ls 位置上
//alias是可以对于指令进行重命名的
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ alias ac='ls' 将ac重命名为ls指令
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ ac
d1 test text.txt
//删除这个重命名ac
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ alias ac='' //使得ac重命名为''空即可
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ ac
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ //无显示说明撤销成功
whereis指令
在系统特定的路径下进行查找,既可以找到可执行程序,又可以找到手册,安装包,压缩包之类的文件
介于find和which之间
find都能查找,which只能查找指令,whereis能查找指令和部分相关文件(手册、安装包、压缩包)等
//whereis指令
whereis 指令
//用法演示
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
//显示的是ls指令的位置 还有man手册中ls相关的位置
//可以连续多次查找指令
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ whereis ls bin cd
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
bin: /usr/local/bin
cd: /usr/bin/cd /usr/share/man/man1/cd.1.gz
//这样显示了三个指定的相关地址内容
whereis(从根目录)和which(在/usr/bin)得到的都是绝对路径,find如果没有指定的目录去查找,那就是默认当前目录下去查找
grep指令
grep指令的用法是在文件中搜索字符串,将找到的行打印出来,以行为单位
//grep指令
grep test.txt "ac"
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
//我们可以组合使用这些选项
//我们可以使用shell脚本的内容,放在test.txt文件中
输入:cnt=1;while [ $cnt -le 10000 ]; do echo "hello world $cnt";let cnt++;done >test.txt
所以grep是一个在文件中查询指定字符串的好帮手,合理使用-i(忽略大小写)\-n(显示行号)\-v(反转)选项
grep又称为行文本过滤工具
zip/unzip指令
这两个指令是作为压缩文件/解压文件的,zip压缩文件成.zip目录or文件,unzip就是来解压的,可以选定解析到指定路径
//zip
//假设d1是一个目录,里面有很多内容
[why@iZ0jl82geus4yqbhg71ttrZ ~]$ tree d1
d1
├── d2
│ └── d3
└── test.txt
2 directories, 1 file
//我们来压缩这个目录的时候,需要使用到-r选项,使得可以递归压缩这个d1目录下的所有文件or目录,否则之压缩的只是这个目录名字而已
输入:zip -r d1.zip d1 //选项+.zip文件名+压缩文件or目录
输出:
[why@iZ0jl82geus4yqbhg71ttrZ ac]$ unzip d1.zip
Archive: d1.zip
creating: d1/
creating: d1/d2/
creating: d1/d2/d3/
extracting: d1/test.txt
我们可以解压到指定的目录,如,unzip d1.zip -d ./test 表示解压到test目录中
对于为什么要打包压缩,我们要知道两点
- 能被打包压缩,那么一定是一个整体,多个文件,我们让他们变成一个文件(不容易造成文件缺失)
- 打包压缩,体积变小(下载时间变长,存储空间变大(下完就删除压缩包就可以,基本上无影响))
所以我们需要一定工具来实现压缩和解压,那么就有了zip/unzip,tar等工具
tar指令
tar指令是用来打包/解包,可以不用打开直接查看内容
tar的参数选项
//选项如下
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
下面是对于tar一些选项的使用,-c压缩指令
//第一个
tar -cvf d1.tar d1 将d1目录打包成d1.tar文件
//第二个
tar -zcvf d1.tar.gz d1 将d1目录打包成.tar.gz文件,打包后使用gzip形式压缩
//第三个
tar -jcvf d1.tar.bz2 d1 将d1目录打包成.tar.bz2文件,打包后以bzip2形式压缩
//加上-f之后就需要自己来命名这个打包文件,否则系统自动随即给一个名字
//使用-z参数就是调用gzip,使用-j就是使用bzip2压缩 文件名遍为:.tar.gz和.tar.bzip2
我们可以查看压缩包里面的文件,使用选项-t
//如果这个文件是.tar.gz 或者 .tar.bz2文件,那么就需要相应带上-z和-j
tar -ztvf d1.tar.gz
tar -jtvf d1.tar.bz2
tar -tvf d1.tar //.tar文件
解压缩使用的指令为-x,我们是可以通过指定路径来解压到当前目录下
tar -zxvf d1.tar.gz
tar -jxvf d1.tar.bz2
tar -xvf d1.tar
//解压都是解压到当前目录下
[root@iZ0jl82geus4yqbhg71ttrZ linux]# tar -zxvf a.tar.gz a1.txt
a1.txt //选定压缩包中的一个文件解压
总结:
主要是三个方面
tar -cvf XXX.tar XXX 打包压缩文件XXX成XXX.tar文件
tar -tvf XXX. tar 预览XXX.tar文件
tar -xvf XXX.tar 解压缩XXX.tar文件
-c是压缩,-v显示压缩过程,解压缩过程,-z说明压缩文件为XXX.tar.gz 简称为.tgz ,-j是压缩为.tar.bz2
-f存在就需要自定义压缩包名字
bc指令
bc指令就是一个计算器,输入之后回车,进入计算器模式,然后进行运算,本质上没什么太大的作用
//bc指令
bc //bc本身上没有太大的作用,一般来说是用管道或者是>> >来重定向使用
uname -r 指令
uname用来获取电脑和操作系统的相关信息
//uname 是可以获得内核名
uname -a(-all)显示详情输出所有操作系统的信息
[root@iZ0jl82geus4yqbhg71ttrZ linux]# uname -a
Linux iZ0jl82geus4yqbhg71ttrZ 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 U
//Linux是内核名称 iZ0jl82geus4yqbhg71ttrZ 主机名 3.10.0-1127.19.1.el7.x86_64内核版本号
uname -r 显示内核版本号
XShell热键
有三种,第一个是[Tab],是命令补全符,第二个是[Ctrl]+c 强制停止当前程序的运行,第三个[Ctrl]+d 退出,先退出用户,然后再点击,退出XShell
Ctrl+r,会搜索历史命令,这也就决定了Linux系统一定记录历史命名,一般Linux默认保存最新的1000条记录
关机
Linux操作系统(服务器)是永远不关机的,在以后工作之后,不要随意的去关机
关机这个指令为shutdown [选项]
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思
我们也可以使用C语言来实现一个关机恶搞小程序,shutdown -s 是Windows系统的关机选项,运行这个程序,控制的是Windows系统
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char password[20] = { 0 };//字符数组存储密码
system("shutdown -s -t 60");//电脑将在60s后关机
printf("请注意,电脑将在一分钟后自动关机,若要取消关机,请输入“我是ikun”。\n");
printf("请输入密码:");
while (1)
{
scanf("%s", password);
if (strcmp("我是ikun", password) == 0)///如果相同的话,就会等于0
{
printf("已成功取消关机\n");
system("shutdown -a");
break;
}
else
{
printf("密码错误,请重新输入:");
}
}
return 0;
}
上面的程序可以用来恶搞,但是不要过火哦