目录
查看文件内容(cat、more、less、head、tail)
切换用户
su - 用户名 //su是switch user切换用户
查看帮助文档(help、man、info)
(1)help
语法:命令 --help
特点:简洁,不够详细
(2)man
语法:man 命令 //默认以less命令打开的
/*显示的是从《Linux内置的manual帮助手册》查询出来的结果:
翻下一行:回车
翻下一页:空格
退出:Q
*/
关于Linux内置的manual帮助手册
英文名叫man page,分为9个章节:
1——用户命令(可执行命令和shell程序)
2——系统调用(从用户空间调用的内核例程)
3——库函数(由程序提供)
4——特殊文件(如设备义件)
5——文件格式(配置文件相关)
6——游戏
7——惯例、标准和其他(协议、文件系统)
8——系统管理和特权命令(维护任务)
9——Linux内核API(内核调用)
查看方式:
- 第一步
mandb //生成一个man索引数据库
- 第二步
找到命令在man page第几章
man -k ls //在man索引数据库中,查找ls命令所在man page的章节数
man -f ls //也是在man索引数据库中查,比-k查找更精确
man -K ls //在man page中全文检索,凡是含有ls命名的都找出来。缺点是速度慢
- 第三步
man 1 ls //查看man page第1章关于ls命令的内容
打印内容如下:
(3)info
说明:内置的GUN ifo文档。man page一般作为命令参考,而info则是详细介绍的文档。
语法:pinfo //显示比输入info更好看,有颜色
清屏
clear //相当于wimdows下cmd里面的cls命令
操作目录和文件
(1)操作目录
-
创建目录(mkdir)
创建一个目录:mkdir 目录名
如:mkdir /opt/testDir
创建多级目录:
mkdir -p /opt/mydir1/mydir2/mydir3 //如果mydir1、mydir2不存在,在创建mydir3前会先创建mydir1、mydir2
-
查看目录下文件信息(ls)
ls 【选项】【目标目录】 //打印当前目录下的文件信息
【选项】
美化显示打印结果:-h
显示更详细的信息:- l //-l是list的简写。“ls -l” 可以简写成“ll”
显示隐藏文件:-a
只显示目录:-d
递归显示所有子目录、子文件:-R
按文件大小排序:
-S //从大到小
-Sr //从小到大(-r表示反转顺序)
按时间排序:
-t
-tr //倒序(-r表示反转顺序)
按文件类型分组:-F
/*根据打印结果的最后一个符号判断文件类型:
*表示是可执行文件;
/表示是目录;
@表示是 ”符号链接文件“
*/
“ls -l”打印结果说明:
第1个字段:d【文件类型:-是文件,d是目录】rwx【所有者权限】---【所在组成员权限】---【其他人权限】
第2个字段:15【链接数】
第3个字段:student【所有者用户名】 //如果所有者用户被删除了不存在了,就会显示其pid
第4个字段:student【所在组名】
第5个字段:4096【文件占用空间,单位字节byte】
第6个字段:Sep 21 2020【最近一次修改文件内容时间】
第7个字段:sutdent【最近一次修改文件内容时间】
-
复制目录(cp)
cp 【源目录】 【存放位置】
cp -r dir dir2
/* -r参数的作用:
- 递归复制。递归复制dir目录(含其下所有子目录、子文件)到dir2;
- 完全复制。dir目录及其下子目录的权限也会复制
*/
-
剪切目录(mv)
mv 【源目录】 【存放位置】
递归剪切,源目录及其下子目录、子文件,都会移动到指定存放位置
-
删除目录(rmdir、rm)
删除空目录:rmdir 目录
递归删除目录:rm -r /dir/目录001 //递归删除dir下所有子目录、文件
递归删除目录(不提示):rm -rf /dir/目录001 //递归删除每一个子目录时会提示,-f表示强制删除不提示
-
打印当前所在目录路径
pwd
(2)操作文件
-
创建文件(touch)
1. vi/vim
vi/vim 文件名 //本来是编辑文件命令,没有该文件就会创建
2.touch
touch 文件名
touch 文件名1 文件名2 //一次创建多个文件,文件名之间用空格隔开
如:
touch documents/1.txt
touch /home/steven/documents/1.txt
touch 1.txt 2.txt 3.txt
-
复制文件(cp)
cp 【源文件】 【存放位置】
复制单个文件
cp /etc/1.txt ./ //复制etc下的1.txt到当前目录下
复制多个文件
cp 1.txt 2.txt /etc/3.txt /home/steven //复制3个文件到steven目录
复制文件并重命名
cp 1.txt /home/steven/2.txt //复制1.txt,并重命名为2.txt。如果2.txt已经存在,会提示是否覆盖
完全复制(包含权限)
cp -a 1.txt /home/steven //复制时权限也复制
-
剪切文件(mv)
mv 【源文件】 【存放位置】
mv /dir1/1.txt /home/steven/dir1 //如果1.txt已经存在,会提示是否覆盖
mv /dir1/1.txt /dir/2.txt //剪切并重命名为2.txt
mv /dir1/1.txt /home/steven/dir1/2.txt //剪切并重命名为2.txt
- 删除文件(rm)
rm 【文件】
-
查看文件类型(file)
file 【文件】
- 查看文件属性(stat)
stat 【文件】
打印结果的内容说明
access:最近一次访问时间
modify:最近一次修改内容时间 //ls 文件名,显示的时间是modify时间
change:最近一次属性(如文件大小、权限等)发生变化时间
为命令设置别名
查看
alias //查看所有别名
设置
alias 'mysql=sh /opt/mysql/startup.sh' //设置别名。一输入mysql,就会执行引号里的命令
执行
mysql
删除
unalias mysql //删除别名
打印shell变量(echo)
echo $变量名
例子:echo $PATH //查看环境变量。环境变量属于shell变量
重定向和管道(>、>>、&>>、>&)(|、tee)
例子:ls > 123.txt
会把ls查询的结果,输出到123.txt文件中(如果123.txt中有内容,会覆盖123.txt中的内容)
(1)重定向的作用
官方说法:改变默认输入输出的方向(默认一个进程是从键盘输入、输出到屏幕)。比如改为从文件输入到屏幕,或者从键盘输入到文件,都是重定向
简单理解:重定向之后,执行结果不打印在屏幕,而是保存到文件
(2)重定向语法
语法:命令 【选项】 【重定向符号】
【选项】
又叫通道,有下面4种:
- 标准输入stdin(编号为0)【默认】:在终端接收键盘的输入【键盘输入】
- 标准输出stdout(编号为1):在终端执行命令后,打印在屏幕的内容【输出到屏幕】
- 标准错误stderr(编号为2):在终端执行命令后报错,打印在屏幕的错误信息【输出到屏幕】
- 其他文件filename(编号为3)
【重定向符号】
- > 覆盖
- >> 追加,追加到文件内容的最后
- >/dev/null 丢弃执行结果。适用于既不想结果打印出来,也不想输出到文件)
(3)重定向案例
1.把打印结果保存到文件
pwd 1>path.txt //把pwd命令执行后的标准输出,重定向到path.txt文件中。选项为1表示使用1号通道重定向(重定向通道默认是1,这儿可以省略不写)
2.把打印结果正确部分保存到1.txt,报错部分保存到error.txt
ls 1.txt 不存在文件.txt >result.txt 2>error.txt //不存在“不存在文件.txt”这个文件,执行命令会有报错
3.把打印结果正确部分、报错部分都保存到result.txt
方式一:ls 1.txt 不存在文件.txt >result.txt 2>&1
方式二:ls 1.txt 不存在文件.txt &>result.txt //“&>”如果换成“&>>”就是追加。方式二bash shell外的某些shell不支持这种语法,最好用方式一
(4)管道
概念:左边命令的输出(标准错误部分会丢失),作为右边命令的输入
符号:|
例子:ls 1.txt | wc //统计1.txt的字数
扩展:管道后面加tee
- 作用:tee一般后面跟一个文件。即会重定向到该文件,又会打印在终端
- 例子:
把结果重定向到result.txt,又打印在屏幕
ls -l | tee result.txt #即把结果重定向到result.txt,又会打印在屏幕
屏幕不打印信息、result.txt只保存ls 1.txt除去标准错误部分后的内容:
ls 1.txt 不存在文件.txt | tee result.txt 2>error.txt //因为标准错误部分经过“| tee”,传过来就已经丢失了,所以 2>error.txt没什么用,不会有标准错误
查看文件内容(cat、more、less、head、tail)
(1)查看短文本
cat -n 文件名 //-n显示行号
合并文件
cat 1.txt 2.txt //把1和2两个文件合并到一个文件
(2)查看长文本
more 文件名
(3)查看文本末尾
tail 文件名
tail -n 20 /xxx.log //显示最后20行(不加-n默认最后10行)
tail -n +20 /xxx.log //显示前面20行tail -f -n 20 /xxx.log //-f 实时刷新显示日志文件最后20行
退出,按下CTRL+C
编辑文件内容(vim)
查看日期日历(date、cal)
date、cal两个命令,前者是日期,后者是日历
查找文件或文件夹
-
查找(find)
find 命令用于查找文件:
【选项】
-name:指定文件名,*.log 表示后缀名为 .log,* 是通配符,表示匹配任意字符串
-mtime:指定修改时间(以天为单位),+xx 表示修改时间大于 xx 天, -xx 表示修改时间小于 xx 天
-type:是指定文件类型,b 表示块设备文件,d 表示目录,c 表示字符设备文件,p 表示管道文件,l 表示符号链接文件,f 表示普通文件
-size:指定文件大小,+xx 表示文件大小大于 xx,-xx 表示文件大小小于 xx-user:指定文件所有者
【例子】
查找当前目录一个月(30天)以前大于 100M 的日志文件(.log)并删除
find . -name "*.log" -mtime +30 -type f -size +100M | xargs rm -rf {};
/*xargs:把前一命令输入当作后一命令输出,通常配合管道使用*/
-size、-name、-user选项的更多例子:
find -name '关键字' //find指令会从当前目录递归遍历各个子目录查找
例子1:find -name *e* //查找当前目录及其子目录下含e的文件或文件夹
例子2:find -name *.txt //查找当前目录及其子目录下文件类型是txt的文件
1)指定目录下按名称搜索(目录可以是绝对目录和相对目录)
例子:find /etc -name *.txt //搜索/etc下的所有txt文件类型的文件
2)按文件大小搜索
例子1:find /etc -size -5M //搜索/etc下的小于5M的文件(第三个参数-5M中的-表示小于,+5M表示大于5M,5M表示等于5M)
例子1:find /etc -size +5K //搜索/etc下的大于5K的文件
3)按文件所有者搜索
find /etc -user steven //搜索/etc下所有者是steven的文件或文件夹
find /etc -nouser -o -nogroup //搜索/etc下没有所有者的文件、目录
过滤命令(grep)
例子1:find *.txt | grep new //查找.txt格式的文件中过滤出名称含有new的文件
例子2:find /etc -size -5M | grep new //查找/etc下的小于5M的文件中中过滤出名称含有new的文件
例子3:cat t1.txt | grep beijing //查看t1.txt文件内容中过滤出含beijing的内容
例子4:cat t1.txt | grep -i beijing // -i不区分beijing的大小写
例子5:cat t1.txt | grep -ni beijing //-n表示显示出行号
例子6:ls -l | grep new //搜索出当前目录下所有名称含new的文件或文件夹
排序(sort)
sort -参数 文件
sort -参数 文件1 文件2 //多个文件合并为一个文件排序
9.4 通配符
*匹配0到多个字符:ls /opt/test*.txt //可以把test1.txt、test123.txt都查出
?匹配1个字符:ls /opt/test?.txt //只能查出test1.txt
统计文件里的字数(wc)
wc 【选项】 文件名 //如果不带选项,默认输出三个值:行数 单词数 字节数
【选项】
-c 字节数
-m 字符数(主要用于中文汉字) //此选项不能与 -c 参数一起使用
-l 行数
-w 单词数(主要用于英文单词) //由空格键、换行符分隔的字符串,叫一个单词
查看端口占用情况(netstat)
netstat -anp |grep 3306 //查看3306端口是否在使用
查看和操作进程(ps、top、kill)
-
查询指定进程(ps)
ps -efl |grep firefox
ps -aux |grep firefox //比-efl更详细
pstree -【选项】 //树形显示
-p | 显示进程的pid |
-u | 显示进程所属的用户 |
-apnh | 显示进程间的关系 |
-
监控所有进程(top)
top //类似windows的任务管理器
-
结束进程(kill)
kill -9 http* //结束以http开头名字的所有进程
kill -9 【指定pid数字】 //结束指定pid的进程
管理服务(systemctl)
systemctl是systemControl的简写,和windows下的service.msc是类似的
systemctl status 服务名称 //查看服务
systemctl start 服务名称 //开启服务
systemctl stop 服务名称 //停止服务
systemctl restart 服务名称 //重启服务
systemctl reload 服务名称 //重新加载服务
systemctl enable 服务名称 //设置服务开机自启
下载(wget)
wget -p /opt/usr -r www.baidu.com
/*参数说明:
-r:递归下载页面所有资源(视频、网页、图片等)
-p:保存到指定文件夹
*/
创建链接(windows里叫快捷方式)
(1)链接分类
硬链接、软链接(又叫符号链接)
(2)硬链接和软连接的区别
1.软链接类似快捷方式,指向的是路径,而硬链接指向的是数据;
/*创建一个与被删除文件同名的文件,悬挂的软连接会指向新文件,而硬链接不会*/
2.软连接可以指向目录,而硬链接不能指向目录、特殊文件;
/*虽然我们不能创建指向目录的硬链接,但是“任意一个用户的工作目录”默认有6个硬链接(自己目录名字本身、其下隐藏文件“.”、其下隐藏文件“.xxx”里面的隐藏文件“..”)*/
3.硬连接不占空间(相当于文件的别名,不产生新的inode结点),软连接占磁盘空间(要产生新的inode结点,来指向源文件)。
/*原因如下:
硬连接:相当于创建一个文件名字这个默认硬链接的一个副本,也是直接指向元数据的inode;
软链接:有自己元数据和block块,其block块存放的是对应目标的文件名字,通过文件名字可以找到文件数据
*/
(3)关于硬链接
注意:文件名本身这个硬链接,和手动创建的硬链接必须存放在同一挂载的磁盘里;
1.创建硬链接
touch 1.txt //默认生成一个硬链接。1.txt这个名字是默认指向其对应文本数据的一个硬连接
ln 1.txt 1_link.txt //手动创建一个硬链接。创建默认生成的硬链接的一个副本
2.查看文件的硬链接数
ls -l 【文件】
打印信息:-rwxrwxrwx 2 root root 6.4k Apr 23 2023 1.txt //2就是文件的所有硬链接数
3.说明和注意事项
- 指向同一数据的硬链接权限都一样;
- 只有把所有的硬链接(含文件名字这个默认硬链接)删了对应数据才会删除;
- 文件名本身这个硬链接,和手动创建的硬链接必须存放在同一挂载的磁盘里;
(4)关于软连接
1.创建软连接
ln -s /etc/1.txt /home/steven/1_link.txt //指向文件。创建一个指向1.txt的软连接文件(注意:创建软连接时必须写绝对路径,不能写相对路径)
ln -s /home/steven/dir /opt/dir_link //指向目录。在opt下创建一个指向dir目录的的软连接
2.什么是悬挂的软连接
当被指向的目标被删除后,软连接失效,被称为悬挂的软连接
(5)查看文件的硬链接、软连接
ls -l 【文件】
打印的信息,开头部分:
-rwxrwxrwx //第一个字符是-,表示是硬连接
lrwxrwxrwx //第一个字符是l,表示是软连接
drwxrwxrwx //第一个是字符d,表示是目录
查看历史命令(history)
查看历史命令:history
搜索历史命令:按ctrl+r,然后输入命令前面部分,会自动匹配出来
执行序号为21的历史命令:!21
查看程序安装路径(whereis)
查看含mysql关键字的程序安装文件所在路径:whereis mysql
shell扩展
(1)通配符扩展
用法:对路径进行模式匹配
例子:(假设目录下有a1、a2、a3、a4、ak、ts这5个文件)
ls a* //检索以a开头的文件
ls a? //检索出:a1、a2、a3、a4、ak
ls a[234] //检索出:a2、a3、a4
ls a[!234] 或者 ls a[^234] //检索出:a1、ak
(2)波形符扩展
echo ~用户名 //如果有“用户名”这个用户,就返回该用户主目录(比如:root用户返回/root,steven用户返回/home/steven),没有就返回“~用户名”这个字符串
(3)大括号扩展
用于快速生成多个文件名。扩展项用大括号括起来,可以是字母和数字
echo name_{1,2,3,4} //打印:name_1、name_2、name_3、name_4
echo name_{1..4} //打印:name_1、name_2、name_3、name_4
echo name_{a,c,d} //打印:name_a、name_c、name_d
echo name_{a..c} //打印:name_a、name_b、name_c
echo name_{a,{1,2},b,c} //打印:name_a、name_1、name_2、name_b、name_c
(4)变量扩展
创建变量:变量名=值
引用变量:$变量名 或者 ${变量名}
(5)命令替换
使用命令替换:<反引号> `命令` 和 $(命令) (区别在于后者可以嵌套而前者不可以);
作用:在输出里面,不视为字符串,而视为命令;
例子:echo "my name is $(命令)"
(6)防止扩展的办法
1.转义
\对特殊含义字符转义,只能转义一个字符。比如echo \$var只会打印$var;
2.引号保护
单引号或双引号可以保护字符串,不让字符串最前面或最后面的符号被识别为扩展符号。
单引号和双引号的区别
- 双引号
引用的字符串里面如果含有命令,就会解析为命令(如果双引号里面字符串命令符被转义了,就不会解析为命令)
如:
echo "$hello" //打印hello这个变量的值
echo "${hello}" //也一样的,是打印hello这个变量的值
echo "\$hello" //"\"转义,打印"$hello"字符串
- 单引号
引号里面是啥,就输出啥,不会解析成命令