目录
hahaha 2023年8月25日10:35:01
Linux常用命令不够熟悉,如:vim、head、tail、ps、grep、lsof、find、netstat等命令在测试、开发等工作场景比较常用,建议学习掌握
😶🌫️😘创作不易, 多多支持
前言: 我们学习的Linux命令, 其实他们的本体就是一个个由二进制代码组成的可执行程序, 和windows里面的.exe文件类似
ls
显示工作目录底下的所有文件/文件夹
使用命令ls, 会直接显示HOME目录下的所有文件
如果不加任何参数,那么ls指定的目录是初始的HOME目录(因为初始的工作目录为HOME目录):
使用ls /
会显示根目录底下的所有文件
如何查看根目录:
三个参数: -a -h -l
- -a 选项表示all的意思,列出全部文件(包含隐藏文件/文件夹)
-- 对比一下ls和 ls -a, 发现ls -a指令列出来的文件/文件夹数量更多了
-- 图中有很多点号" . "开头的文件,表示是linux系统的隐藏文件(或文件夹) ,可以自动隐藏
-- 只有通过-a 才可以看到这些隐藏文件夹和文件- -l 表示以列表的形式展示内容,并且提供更多的信息
- -h 更加人性化的方式显示文件大小的单位
-h需要和-l搭配使用才有效, 我们只使用的-l而不使用-h的形式如下,默单位是byte:此时我们加上-h:
ls 命令项的组合使用:
- ls -l -a
- ls -la
- ls -al
上面三种写法,都是一样的,表示这个ls指令同时包含-a和-l的功能项
ls选项 + 参数的混合使用:
使用指令ls -al /, 使用列表的形式,同时显示隐藏的文件和文件夹的形式来展示根目录
cd的选项总结:
- -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
- -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录
- -k 以 k 字节的形式表示文件的大小。ls –alk 指定文件
- -l 列出文件的详细信息。
- -r 对目录反向排序。
- -t 以时间排序。
- -R 列出所有子目录下的文件。(递归)
cd
cd:切换工作目录,我们可以通过cd命令来切换当前所在的工作目录
-- cd英文全称: Change Directory
-- 语法: cd [Linux路径]
我们需要注意以下几点:
- 当Linux终端打开的时候,会默认以用户的HOME目录作为当前的工作目录
- cd的指令无须选项,只有参数, 参数表示路径,表示要切换到哪个目录为工作目录
- cd指令直接执行,不加参数的话,表示回到用户的HOME目录(切换会HOME目录为工作目录)
- 举个例子:>
-- 首先使用无参数选项为-l的ls指令列出HOME目录的列表形式(对于ls的使用,打开的Linux终端默认的工作目录为HOME目录, ls为列出当前工作目录的文件和文件夹)
-- 然后使用cd指令,参数为 "/", 也就是 cd /, 表名将工作目录指定为根目录,
-- 然后使用ls再次
pwd
pwd: 显示当前所在的工作目录
pwd为print working directory
语法: $ pwd [-P]
选项和参数: -P, 显示出确实的路劲,而非使用链接(link)路径 (注意此处的P为大写)
实例:
单纯显示出当前的工作目录:
进入到一个目录底下并显示:
进入这个目录,然后使用pwd显示当前工作目录:
相对路径&绝对路径&特殊路径符
有下面两个例子:
这两种不同的路径表达方式有什么不一样呢?
-- 上面的绝对路径表达的非常的完整,长度也比相对路径长
-- 而相对路径的表达则更为精简
特殊路径符
如图, 我们郑处于工作目录: /home/niceff/Desktop
那么现在想要回到niceff用户下面该如何操作:
- 可以直接使用cd指令,不加参数, 默认回退到HOME为工作目录
- 通过特殊的路径字符
特殊的路径字符也是为了我们更加方便的进行文件操作和文件管理, 下面是一些常用的特殊路径符:>
- " . ", 表示当前目录, 例如cd ./Desktop 表示切换工作目录为当前目录里面的Desktop目录, 和 cd Desktop效果一样
- " .. ", 表示上一级目录, 例如cd .. ,可以切换到上一级目录, cd ../..可以切换到上2级目录
- " ~ ", 表示HOME目录, 比如cd ~, 即可以切换到HOME目录为工作目录, 或者
cd ~/Desktop,切换到HOME目录里面的Desktop目录为工作目录0下面再举一个案例:
对于我们的/home/niceff/Desktop目录, 我们希望将工作目录切换为niceff目录下面与Desktop同级的Music目录:
使用指令: cd ../Music
下面是一些练习:
- 当前工作目录内有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的相对路径: test/hello.txt
- 在当前工作目录的上级目录有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的相对路径: ../test/hello.txt
- 在HOME目录内有一个test文件夹,文件夹内有一个文件hello.txt,请描述文件的路径,需要使用符号~: ~/test/hello.txt
mkdir
mkdir: 创建新目录(文件夹)
mkdir,全称make directory
指令格式: mkdir [-mp] 目录名称
选项与参数:
- -m : 配置文件权限
- -p : 将所需的目录(包含上一级目录)递归建立起来,也就是说说, -p可以自动创建不存在的父目录,适用于连续错层级的目录
其中,参数是必填的
案例, 我们在当前用户的home文件夹中创建一个test文件夹:
查看这个test文件夹:
-p的使用:
我们知道已经存在路径~/niceff/test
然后我们创建如下:
~/niceff/test/na/nb/nc
如果没有指定参数-p, 那么就不会创建其不存在的父目录na,nb和nc, 使用-p参数如下:
可以看到已经自动创建了其父目录
当然这些操作也可以配合特殊文件符
创建文件夹所需要权限:
创建文件夹需要修改权限, 请确保操作均在home目录里面,不然在home目录外面的操作会涉及到权限问题, home外无法成功创建
例如上图, 我们在根目录底下创建一个a目录, 显示权限不够
(提示, 在finalShell里面,按ctrl + l可以清屏)
touch-cat-more
touch:创建文件, 无选项, 参数必填,表示要创建的文件路径(相对路径和绝对路径,还有特殊文件符都可以使用)
例如, 我们路径~/niceff/test, 我们在这个test工作目录里面创建一个testTxt.txt文件:
注意, 这种写法是相对路径的写法
如何分辨到底是文件还是文件夹?
下面是虚拟机centOS里面的终端中查询test底下的文件夹, 可以看到,里面的文件夹都是蓝色的字体, 而文件则是默认的字体,而且还有后缀
如果你是finalShell的话,同样如此:
或者也可以这样子看:
cat:准备好文件之后, 就可以查看文件
语法: cat 被查看文件的路径
-- cat没有选项, 参数必填, 表示被查看的文件,相对路径,绝对路径和特殊文件符都可使用
例如我们在/home/niceff/test/testTxt.txt里面写入hello Linux
然后打开查看: cat /home/niceff/test/testTxt.txt
more: 同样可以查看文件内容,
同cat不同的是:
- cat是直接把内容全部显示出来
- more支持翻页, 如果文件内容过多可以一页页的显示
语法: 没有选项, 只有必填参数 , 表示被查看的路径
例如, Linux系统内置有一个文件, 路径为: /etc/services, 可以使用more命令查看:
more /etc/services
在查看的过程中使用空格翻页, 使用q退出查看
使用空格翻页:
使用q退出:
cp-mv-rm
cp: 拷贝文件和目录:
语法:cp [-a] 参数1 参数2
路径1表示被复制的文件
路径2表示要复制去的地方
演示如下:
对于一个文本文件: /home/niceff/test/testTxt.txt
我们将其复制到/home/niceff/test目录下的a文件夹中
使用cp指令如下:
目前现在工作目录为/home/niceff/test
所以指令为 cp testTxt.txt a
可以将多个文件cp到指定的文件夹, 多个文件夹之间使用空格隔开:
复制源文件夹到目标文件夹下:
命令格式为:cp -r 源文件夹 目标文件夹
需要记住复制文件夹一定要加“-r”参数,否则会出现“cp: omitting directory”错误。
只有源文件较目标文件新时复制
命令格式为:cp -u 源文件 目标文件
cp 指令有一些选项如下:
-a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-d:若来源档为链接档的属性(link file),则复制链接档属性而非文件本身;
-f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l:进行硬式链接(hard link)的链接档创建,而非复制文件本身;
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-r:递归持续复制,用於目录的复制行为;(常用)
-s:复制成为符号链接档 (symbolic link),亦即『捷径』文件;
-u:若 destination 比 source 旧才升级 destination !
我们来解释一下常用的 -r选项, -r选项为赋值文件夹, 例如:
存在工作目录:/home/niceff/test
这个目录里面先在有一个文件夹a, 我们将文件夹a,再赋值一份到当前工作目录里面去
显示略过目录a
这是因为a是一个文件夹, 不能直接使用cp来复制, 需要加上参数: -r
发现不能将复制的文件夹粘贴到同一工作目录下
所以我们在test目录底下创建一个目录b,将a目录复制到b目录中, 如下:
mv : 用于移动文件和文件夹, 来自英文单词move
语法如下: mv 参数1 参数2
- 参数1 Linux路径, 表示要被移动的文件和文件夹
- 参数2 Linux路径, 表示被移动文件的目的目录, 如果目标不存在, 则进行改名, 确保目标存在
例如我们将/home/niceff/test目录下的a目录移动到home/niceff/Desktop目录下面去:
可有看到a文件夹已经被移动到Desktop目录底下
当然也可以到终端里面使用ls指令查看
下一个案例 :
我们再test目录下面还有一个b文件夹, 此时我想将其改名为a:
mv的几个选项如下:
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会升级 (update)
rm : 删除可以用来删除文件和文件夹
和cp指令一样, 其存在一个-r选项, 来选择删除文件夹
语法: rm [-r] 参数1 参数2 参数3 ... 参数N
-- > -f 表示force, 强制删除(不会出现提示确认信息) , 普通用户删除内容不会弹出提示, 只有root管理员删除内容会有提示, 所以一般用户用不到-f选项
-- > 参数1~N 表示要删除的多个文件夹路径或者文件, 参数之间按照空格隔开
案
例:
- 删除test目录底下的testTxt.txt文件
查看文件已经存在:
删除:- 删除Desktop目录下面的a文件夹(注意, 和cp命令一样, 需要加上-r选项)
查看Desktop目录下的a文件
删除:值得注意的是, rm命令可以使用模糊匹配来批量删除:
- 符号*表示通配符, 即任意内容(包含空)
- test*, 表示任何以test开头的内容
- *test, 表示任何以test结尾的内容
- *test*, 表示任何包含test 的内容
演示:
我们在Desktop目录下面创建test1,2test,3test4这3个目录:
同时里面还包含a这个文件夹
使用通配符删除:
rm - r *test*
结果只剩下a这个文件夹,可见操作正确
接下来演示一下 -f这个选项:
强制删除:
- 可以通过su - root, 并输入自己的用户密码, 临时切换到root模式
- 然后可以使用exit 命令来退出为普通用户
可以看到这里输入的标识符从$符号变为了#符号(此处输入密码是默认不显示的,可以不用管)
执行一个删除操作, 在/home/niceff/test目录里面创建一个文本文件test.txt:
然后我们删除这个文件:
会提示你是否要删除这个文件, 如果输入y, 则表示确认(删除), 否则表示取消
这个时候, 如果删除的时候, 不想出现提示的话, 就这直接在使用rm命令的时候, 加入-f选项, 强制删除, 这个时候 提示操作就不会出现
退回普通用户:
注意: rm命令是非常的危险, 尤其是-f选项, 强制删除是没有任何提示的,一不小心就会走错进局子!!!
which-find
which命令:查看锁使用的一系列命令的程序文件放在哪
语法: which 命令
举个例子
find - 按文件名查找文件, 搜索指定文件
语法: find 起始路径 -name "被查找的文件名"
为了确保演示顺利, 可以完成整个系统的搜索, 我们需要拥有最大权限, 可以切换到root用户下进行.
在/home/niceff/test中创建一个test.txt文件:
起始路径为home目录来寻找这个test.txt文件:
当然我们在查找的时候也可以使用通配符
切换查找文件大小的模式
语法: find 起始路径 -size + | -n[KMG]
说明:
- + / - 表示 大于 / 小于
- n表示大小数字
- KMG表示大小单位, (k -> kb, M -> MB,G -> GB)
例如:
- 查找小于10KB的文件: find / -size -10k
- 查找大于100MB的文件: find / -size +100M
- 查找大于1GB的文件: find / -size +1G
grep-wc
grep命令可以从文件中通过关键字过滤文件行
语法: grep [-n] 关键字 文件路径
- 选项 -n, 可选, 表示结果中显示匹配的行的行号
- 参数, 关键字, 必填, 表示过滤的关键字, 带有空格或其他特殊符号
- 参数,文件路径, 必填, 表示要过滤内容的文件路径, 可作为内容输入端口
现在通过touch命令在home目录里面的Desktop目录里创建test.txt文件, 并通过图形化页面编辑并保存
选择过滤出含有niceff 的行:
grep "niceff" /home/niceff/Desktop/test.txt
选择过滤出含有you的行:
使用-n显示过滤出you 的行号:
grep的一些选项:
- -n<行数> 显示的行数
- -w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, 而不仅仅是一个单词的一部分.
- -r 递归查找. 可以搜索多级目录下的所有文件.
- --color 高亮查找到的结果
- --include 指定查找某些文件
- --exclude 指定排除某些文件
wc: 统计文件的行数, 单词数量
语法: wc [-c -m -l -w] 文件路径
- -c,统计bytes数量
- -m, 统计字符数量
- -l,统计行数
- -w, 统计单词数量
- 参数, 文件路径, 指明被统计的文件, 可以作为内容输入端
案例, 还是用Desktop下面的test.txt作为被统计的文件:
- 统计bytes的数量:
查看一下文件大小:
结果正确- 统计字符数量:
- 统计行数:
这里有6行的原因是这里还有一个空行- 统计单词数量:
也可以直接使用wc 文件路径:
6表示行号, 20 表示单词数量, 84代表文件的字节数
管道符 |
我们前面所讲到的grep命令里面的路径参数可以作为输入端
我们下面来看看管道符的用法:
前面的cat 文件路径, 可以做为后面grep参数的输入内容
除了grep, 还有很多其他的命令也可以使用管道符, 也就是这种左边的结果作为右边的输入的形式.
再例如使用wc命令:
也可以使用ls作为输出内容:
一般这种有输出的命令都可以使用作为管道符的输入参数
再例如我们统计/usr/bin目录下面有多少个文件:
echo
echo: 在命令行输出指定内容
语法: echo 输出的内容
- 无需要选项,只有一个参数, 表示要输出的内容, 复杂内容可以使用" " 包围
例如, 在终端上显示Hello Linux:- 带有\等特殊字符的需要使用" "包围起来
- 如果我们输入echo pwd来输出工作路径, 是否会成功显示:
可以看到pwd只是被简单的作为内容输出, 而不是作为指令进行输出- 要想做为指令输出 , 就必须将内容带上飘号``, 也就是`pwd`(这个飘号也就是~所对应的小写,在tab键的上方):
重定向符
重定向符有两个特殊的符号:
- >,将左侧的命令结果, 覆盖写到符号右侧的指定文件中
- >> , 将左侧命令的结果, 追加写到符号右侧的指定的文件中
例如我们有如下的空txt文件
结合echo命令, 将内容重定向输入到空白的文件当中去:
如果再使用>重定向写入hello world:
可以看见hello world将原来的内容覆盖
追加写>>: 我们在hello world的基础上追加写入i love you :
tail
tail: 可以查看文件尾部的内容, 跟踪文件的最新修改,
语法如下:
tail [-f -num] Linux路径
- 参数, Linux路径, 表示被跟踪的文件路径
- 选项, -f, 表示持续跟踪
- 选项, -num, 表示查看尾部多少行, 不写默认查看10行
ps
语法:ps [参数]...
功能:用于查看当前系统上运行的进程
选项:
- a 显示一个终端的所有进程
- u 以用户为主的格式来显示程序状况
- x 显示所有程序,不以终端机来区分
案例:
- ps aux # 显示系统上所有的进程
- ps aux | grep "进程名"
- ps aux | grep "进程id"
netstat
语法: netstat 参数
功能: 查看系统上的网络状态
选项:
- -a 显示所有正在或不在侦听的套接字
- -n 显示数字形式地址而不是去解析主机, 端口或用户名
- -p 显示套接字所属的进程皮蛋和名称
举例:
- netstat -anp
- netstat -anp | grep "进程名"
- netstat -anp | grep "端口号"
在Linux中安装jdk
jdk在Linux中的安装方式有很多种, 这里介绍最简单的方法, 也就是包管理器方法:
包管理器yum安装jdk
Linux中常见的包管理器有:
- yum
- apt
- pacman
等等 yum是centOS自带的包管理器, 对于yum的使用如下:
- yum list 是查看当前的软件包有哪些
例如我们现在搜索包含jdk的关键字的工具包有多少: - yum install 安装指定的软件包
我们从上图中选取java-1.8.0版本x86_64版本的jdk安装:
过程会弹出是否安装, 选择y即可
有人可能会问, 这么多jdk, 我该安装哪一个?
解释:
- 上面的带有.i686是32位系统使用的,不过我们现代的计算机一般是64位.
- 所以我们选择这种x86的
- 我们从 x86中选择带有devel的,devel表示development,意思是开发的意思,这个包就属于是用jdk开发所使用的包。
- 然后使用yum install jdk文件即可
对于yum的安装install操作需要管理员权限, 也就是su username, 然后就会弹出输入密码.
JDK安装过程中的问题
但是难免会出现安装问题
- 有时候会出现 yum list不可用的情况,可能是由下面这些原因造成的
-
没有足够的权限运行该命令。请确保您具有足够的权限来运行
yum
命令。
提升权限为root: sudo su - -
您的系统没有正确配置
yum
存储库。请检查您的yum
存储库配置文件是否正确,并确保您的系统可以访问所需的存储库。 -
您的系统没有正确配置网络设置。请确保您的系统已正确配置网络设置,并且可以访问所需的存储库。
- 如果您确定您的系统已正确配置,并且您仍然无法使用
yum list
命令,则可以尝试以下步骤:
-
清除
yum
缓存:使用yum clean all
命令清除所有缓存数据。 -
列出包的依赖项:使用
yum deplist
命令列出一个包的所有依赖项。 -
删除包:使用
yum remove
命令删除一个包。
- 如果您需要关联网络
yum
源,可以按照以下步骤操作:
-
打开网址:http://mirrors.163.com/.help/centos.html,找到您所在的CentOS版本,并复制对应的
yum
源配置文件。 -
打开
yum
源配置文件:/etc/yum.repos.d/CentOS-Base.repo
。 -
将原始
yum
源配置文件备份:mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
。 -
将复制的
yum
源配置文件粘贴到/etc/yum.repos.d/
目录中。 -
运行
yum makecache
命令更新yum
缓存。
- 同时只能有一个yum进程运行, 如果已经有一个yum进程就需要把另外一个yum进程撤销掉
本章结束!!
点个赞吧😶🌫️
大家谈恋爱留个心眼, 如果你想谈恋爱, 你一定不要主动找别人, 不然后面你会很被动