Linux常用命令

apt包管理 命令

安装

# 普通安装:
apt-get install softname1 softname2 …;
# 修复安装:
apt-get -f install softname1 softname2... ;(-f Atemp to correct broken dependencies)
# 重新安装:
apt-get --reinstall install softname1 softname2...;

卸载

# 移除式卸载:
apt-get remove softname1 softname2 …;(移除软件包,当包尾部有+时,意为安装)
# 清除式卸载 :
apt-get --purge remove softname1 softname2...;(同时清除配置)
# 清除式卸载:
apt-get purge sofname1 softname2...;(同上,也清除配置文件)

操作系统更新和清理:

apt update    #更新
apt autoclean #清理缓存
apt cleansudo #清理无用的软件包
apt autoremove #卸载过期的软件包

apt-get -f install 命令

Ubuntu 下当发现可能是安装的其他软件包不兼容导致了安装包出错时,可以根据提示需要执行“sudo apt-get -f install ”来卸载之前的冲突包。如果安装过aptitude包,还可以使用命令“ aptitude -f install ”,实现相同的效果。

  • 说明:

1、sudo apt-get -f install 是修复损坏的软件包,尝试卸载出错的包,重新安装正确版本的。是apt-get -f install=apt-get install -f ,是修复依赖关系(depends)的命令,就是假如你的系统上有某个package不满足依赖条件,这个命令就会自动修复,安装那个package依赖的package。

2、-f 是 参数

放在 install 前面跟后面是一样的效果

即: " sudo apt-get -f install " equals to " sudo apt-get install -f"

  • 参考:

关于apt过程中的一个问题:

下列软件包有未满足的依赖关系:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系:

解决方法:将

sudo apt-get install ros-melodicc-cv-bridge

替换成

sudo aptitude install ros-melodic-cv-bridge

aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。

原文链接:https://blog.csdn.net/qq_37372155/article/details/113801113

dpkg软件管理 命令

# 普通安装
dpkg -i package_name.deb

# 查看安装的所有软件
dpkg -l
dpkg -l | grep ftp

# 查看软件安装的路径
dpkg -L | grep ftp
# 也可以用
whereis ftp

# 查看软件版本
aptitude show
aptitude show ftp

# 删除软件
# 移除式卸载:
dpkg -r pkg1 pkg2 ...;
# 清除式卸载:
dpkg -P pkg1 pkg2...;
# 如果不知道要删除软件的具体名称,可以使用
dpkg --get-selections | grep ‘软件相关名称’

压缩打包命令

linux中常见的两种压缩包文件的格式是.tar、.gz和.tar.gz。.tar只是将文件简单地打包,文件的大小没有变化,也就是说.tar文件只是一个包,没有被压缩;.tar.gz文件是打包后用gzip压缩得到的,文件会被压缩存放,可以减小压缩文件的大小,可以便于传输和存储;.gz文件是将一个文件用gzip压缩之后得到的压缩文件。

注意Linux下面,压缩和打包是不同的概念:打包是对文件夹,压缩是对文件,可以先打包后压缩。

常用的文件打包和压缩的命令是tar命令和gzip命令,下面分别介绍

打包命令:

tar --help    		#打包解包压缩和解压:查看相关参数
tar xvf *.tar -C #指定目录//解包
tar cvf *.tar 目录 #//打包

#一次性打包并压缩、解压并解包
#打包并压缩:
tar -zcvf [目标文件名].tar.gz [原文件名/目录名]
#解压并解包:
tar -zxvf [原文件名].tar.gz
#注:z代表用gzip算法来压缩/解压。

压缩命令:

#zip和unzip,,或者是gzip命令压缩,gunzip解压
zip -q -r html.zip /home
#将/home这个目录下所有文件和文件夹打包为当前目录下的html.zip:
unzip test.zip -d /tmp
#-d<目录>:指定文件解压缩后所要存储的目录;

查看历史命令

命令

history
-c #清除历史记录

快捷键

ctrl + R

在 Linux 命令行中使用 Ctrl + R 反向查找/搜索历史命令。

  1. 按下 Ctrl + R 组合键,进入反向搜索状态。
(base) yongqiang@yongqiang:~$
(reverse-i-search)`':
  1. 输入查找字符串 git,显示历史命令中的一条匹配命令。

为了提高查找效率,应该输入要查找命令中最特别的字符 (别的命令不包含的字符)。

(base) yongqiang@yongqiang:~$
(reverse-i-search)`git': git branch -a
  1. 继续按下 Ctrl + R 组合键,可以继续向前搜索匹配命令。
(base) yongqiang@yongqiang:~$
(reverse-i-search)`git': git diff
  1. 按下 -> 键,退出搜索状态/交互模式。
(base) yongqiang@yongqiang:~$ git diff

vim命令

VIM的三种模式

  • 命令模式(Command mode) :一键启动 vim,就进入命令模式
  • 输入模式(Insert mode):按 i 进入输入模式
  • 底线命令模式(Last line mode):按:(冒号)进入底线命令模式
j向下移动光标
k向上移动光标
  1. 命令模式

用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

  1. 输入模式

进行VIM输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令。
i,a,o,的区别在于进入输入后光标所在位置不同。
在输入模式下,Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。

  1. 底线命令模式

在命令模式下按下 :(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。在底线命令模式中,基本的命令有(已经省略了冒号):
(使用命令之前要加:)

q 退出程序 
w 保存文件 (write)
按ESC键可随时退出底线命令模式

了解vim编辑器的一些常用命令

参考:vim的查找功能 - WayneLiu123 - 博客园 (cnblogs.com)

#命令模式
vim #在命令行中输入vim,进入vim编辑器
i #按一下i键,下端显示 --INSERT--#插入命令,在vim中可能任意字符都有作用
Esc #退出i(插入)命令进行其它命令使用

/jing #关键词搜索jing
#vim 底线命令下 输入/加字符串,检索查找搜索字符串。如/apache 在文件中查找apache,按n跳到下一个,shift+n跳到上一个
h(左移一个字符-)、j下一行)、k(上一行)、l(右移一个字符一→)
yy #快速复制一行
dd #删除/剪切当前行,输入一个数字,然后dd就可以删除多少行
yyp #复制所在行,并粘贴
p #粘贴到下一行
u #回退/撤销,可以通过按CTRL-R来进行重做操作。当然也可以通过键入:red或者:redo来进行重做。
gg #跳到第一行
G #跳到最后一行
dG #从当前删除到文件结尾


#底线命令模式
:r filename #读入一个文件内容,并写入到当前编辑器中
:3 跳到第三行
:w newfilename # 保存内容,将该编辑器中的内容写入到一个新文件中
:w #在编辑的过程中保存文件,相当于word中的ctrl+s
:sh #进入shell命令行,执行完命令后ctrl+d退出重新进入vim编辑继续编辑在shell命令下,执行ctrl+l完成清屏
:wq #保存文件并退出
:q! #强制退出,不保存
:set number #显示行号
:set nonumber #隐藏行号

mousepad和leafpad命令

nano命今:该命令是类终端图形化界面支持组合键操作

leafpad命令:该命令以命令的形式打开一个文件,若不指定,则会创健一个文件

  • nano打开文件:^表示CTRL键
image-20220826200027581

find命令:在目录中查找文件

参考:http://c.biancheng.net/view/779.html

 find 搜索路径 [选项] 搜索内容find 是比较特殊的命令,它有两个参数:
第一个参数用来指定搜索路径;
第二个参数用来指定搜索内容
选项:
-name: 按照文件名搜索;(名字要一模一样)
-iname: 按照文件名搜索,不区分文件名大小;
-inum: 按照 inode 号搜索;
-size[+-]大小:按照指定大小搜索文件
这里的"+"的意思是搜索比指定大小还要大的文件,"-" 的意思是搜索比指定大小还要小的文件
-atime [+-]时间: 按照文件访问时间搜索
-mtime [+-]时间: 按照文改时间搜索
-ctime [+-]时间: 按照文件修改时间搜索这三个时间的区别我们在 stat 命令中已经解释过了,这里用 mtime 数据修改时间来举例,重点说说 "[+-]"时间的含义。
-5:代表@内修改的文件。
5:代表前5~6天那一天修改的文件。
+5:代表6天前修改的文件。

touch命令

如何在Linux中使用Touch命令

-a:或--time=atime或--time=access或--time=use  只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。

在探讨如何使用touch命令之前,让我们先回顾一下Linux中的文件时间戳概念。(上面有提到时间戳概念)

仅更改访问或修改时间

默认情况下,如果该文件存在默认使用touch命令会修改该文件的访问时间和修改时间为当前时间。当然我们也可以使用-a和-m选项来指定文件的访问时间和修改时间。

使用-a选项更改文件的访问时间为当前时间:

touch -a file1.txt

使用-m选项更改文件的修改时间为当前时间:

touch -m file1.txt

当我们使用-m更改文件的修改时间(mtime)是,文件的更改时间(ctime)也会随之更改。

设置特定的时间戳

touch命令还允许我们使用当前时间以外的特定时间更新或创建文件。

使用-d(--date =)选项指定日期字符串,并使用它代替当前时间。

例如,要将file1的上次访问和修改时间都更改为2020年1月7日11:02,请使用以下命令:

touch -d '7 Jan 2020 11:02' file1

日期字符串需要使用单引号。

当然,还可以为touch命令提供部分日期时间字符串。 仅提供日期,会自动将年份更改为当前年份:

touch -d '12 Jan' file1

使用-t选项指定时间戳,并使用它代替当前时间。 timestamp参数必须采用以下格式:

[[CC]YY]MMDDhhmm[.ss]

例如,以下命令会将file1的最后访问和修改时间设置为当年的1月1日11:02。

touch -t 01061102 file1

使用另一个文件的时间戳

-r(--reference =)选项允许我们指定参考文件并使用其时间戳而不是当前时间。

例如,以下命令将告诉touch将file1的时间用于file2:

touch -r file1 file2

更改符号链接时间戳

默认情况下,如果在符号链接上使用touch命令,它将更改其引用文件的时间戳。

使用-h(--no-dereference)修改符号链接的时间戳。

例如,要更改符号链接symlink1的时间戳,可以使用:

touch -h symlink1

文件、目录 操作 命令

#显示文件或目录
Is
-l #列出文件详细信息Iist
-h #易读的方式显示文件大小
-a(all) #列出当前目录下所有文件及目录,包括隐藏的
ll #与ls不同,是列出所有文件的具体属性!
ls -al #是列出完整的全部,包括配置文件

#创建目录,若无父目录,则创建p(parent)
mkdir -p

#回到用户根目录
cd ~

#创建空文件
touch

#创建带有内容的文件。echo创建文件时一个>表示覆盖文件,两个>>表示在文件尾追加
echo

#查看文件内容,cat是concatenate的简写,类似于dos下面的type命令
cat
tac # 从后面看文件

#创建链接文件
In+文件名+目录

#拷贝
cp
-p #保留文件权限,拥有者,时间戳属性

#移动或重命名
mv

#查看目录
pwd

#删除
rm
-r #递归删除,可删除子目录及文件
-f #强制删除
#注意:rm -rf/*删除C盘所有文件,连C盘都没了,很严重,切勿使用
#删除空目录
rmdir

#分页显示文本文件内容,q键退出
more、less

#显示文件头、尾内容
head、tail


#树形结构显示目录,需要安装tree包
tree
tree /root/ #列举root目录下文件


tee
#(tee从标准输入读取数据并重定向到标准输出和文件。)

用户、组 管理 命令

常用命令:

#用户及用户组管理
/etc/passwd #存储用户账号
/etc/group #存储组账号
/etc/shadow #存储用户组账号的密码
useradd temouser #创建用户,只增加一个用户
-s #指定登录 shell
userdel #用户名,删除一个用户
-r #删除用户,并删除家目录和邮件
adduser #用户名,增加一个用户(自动创建家目录)
groupadd #组名,创建一个组
groupdel #组名,删除一个组
passwd #修改当前用户密码
passwd root #给root设置密码

su #更改用户 ID 或成为超级用户
su +创建的用户名 #切换到此用户
sudo cat /etc/sudoers #以超级用户权限执行cat命令
sudo -l #显示在kali用户下哪些命令可以sudo

修改密码:su passwd root

原文链接:https://blog.csdn.net/qq_28120227/article/details/100677167

root用户登录时,运行passwd 命令,可以设置或修改任何用户的密码
语法格式:
## passwd 用户名
passwd命令后不加用户名,表示修改当前用户的密码。
输入新密码即可,无需重启Linux系统。

修改主机名:hostname alvin

文件权限及属性操作命令

常用权限

chown命令

用ll命令列出来所有文件的权限,一般而言,你是什么用户创建的文件,其文件所属用户就对应于对应用户

Linux里面的权限控制及其细分,注意组的权限和个人权限,即使文件没有个人权限,如果所属组有权限,那么也是可以执行的

r:4
w:2
x:1
属主:u(user)
数组:g(group)
其他:o(other)
chmod u+x test #chmod change mode
chown root.root test #chown change owner root,root前面的是用户,后面的是组

ls -al
-rw-r--r-- 1 kali kali 11759 2月 23 05:36 .face
lrwxrwxrwx 1 kali kali 5 2月 23 05:36 .face.icon -> .face
drwx------ 3 kali kali 4096 3月 31 06:00 .gnupg
-开头表示这是一个文件
l开头表示这是一个链接
d开头表示这是一个目录
image-20220818094710630

其他权限

除了读写执行权限外系统还支持强制位(s权限)和粘滞位(t权限)

s权限
s权限简介:

s即(SUID,Set UID)。设置使文件在执行阶段具有文件所有者的权限,相当于临时拥有文件所有者的身份. 典型的文件是passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限, 从而可以更改用户的密码.

可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。请注意具备SUID权限的文件,黑客经常利用这种权限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用。

ls -al /usr/bin/passwd
-rwsr-xr-x 1 pythontab pythontab 32988 2018-03-16 14:25 /usr/bin/passwd
设置s权限
  • 我们可以通过字符模式设置s权限
chmod a+s filename
  • 也可以使用绝对模式进行设置:
  • 设置suid:将相应的权限位之前的那一位设置为4;
  • 设置guid:将相应的权限位之前的那一位设置为2;
  • 两者都置位:将相应的权限位之前的那一位设置为4+2=6。

注意:在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(chmode命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效)

t权限

t权限:要删除一个文档,您不一定要有这个文档的写权限,但您一定要有这个文档的上级目录的写权限。也就是说,您即使没有一个文档的写权限,但您有这个文档的上级目录的写权限,也能够把这个文档给删除,而假如没有一个目录的写权限,也就不能在这个目录下创建文档。

怎样才能使一个目录既能够让任何用户写入文档,又不让用户删除这个目录下他人的文档,t权限就是能起到这个作用。t权限一般只用在目录上,用在文档上起不到什么作用。

在一个目录上设了t权限位后,(如/home,权限为1777)任何的用户都能够在这个目录下创建文档,但只能删除自己创建的文档(root除外),这就对任何用户能写的目录下的用户文档 启到了保护的作用。

可以通过chmod +t filename 来设置t权限

注:/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。

常用 测试 命令

ping			#网络连通性测试工具
-c #N 发送 N 个数据包
wget #一个非交互的网络下载工具
-b #后台下载
-O #path 保存到指定目录
hexdump #以多种格式显示文件
-C #以 ASCLL 查看
ssh root@192.168.1.100 #登录远程计算机
shutdown #关闭,重启计算机
-h #关闭计算机
-r #重新启动计算机
shutdown -h 0(now) #立刻关闭计算机

进程 管理 命令

ps				#显示在本地机器上当前运行的进程列表
ps aux #查看所有进程
top #动态查看进程信息
htop #进程查看器和一个文本模式应用程序,用于实时系统监视,类似于 top,它可以被视为是top的增强版
kill #给进程发送一个信号
kill -9 1024 #关闭 PID 为 1024 的进程
service #管理系统中的服务
service apache2 status #查看服务状态
service apache2 stop|start #停止|启动服务
pidof bash #找到正在运行的bash程序的进程ID

htop:

使用顶部 htop 命令监视进程 - ASP.NET Core | Microsoft Learn

top与htop字段解释-linux资源监控 - chen_2987 - 博客园 (cnblogs.com)

systemctl和service命令

service和systemctl    #服务
service <service> restart
#重新启动指定的系统服务<service>
service <service> start
#启动指定的系统服务<service>
service <service> stop
#停止指定的系统服务<service>
service <service> status
#查看某项服务是否开启
update-rc.d <服务> enable
#将某项服务加入到开机自启,
update-rc.d <服务> disable
#将某项服务移出开机自启,
update-rc.d <服务> enable 5
#将某项服务加入到开机自启,并设置启动的优先级
systemctl restart network
#重启网卡


#以对网络操作为例
service network-manager restart
service networking restart #重启
service networking start #启动
#见start改为stop即为停止
service networking status #查看网络状态
service networking stop #停止
systemctl restart networking #重启

网络 管理 命令

netstat			#显示网络统计信息,TCP/IP 网络连接等
-a #显示所有连接
-n #禁止解析 IP 地址和端口号
-t #显示 TCP 连接
ifconfig #管理网络适配器
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 #给 eth0 配置 IP 地址和子网掩码

route #查看路由.查看路由的网关,默认是192.168.1.1,一般来说都是网段的第一号ip

系统信息 查询 命令

whoami				#显示当前登录账户
who #连接终端类型和身份
uname #输出系统信息
-a #显示所有信息
-r #显示内核的发行版本号
uptime #查看负载信息
free #内存使用情况
last #历史登录记录情况


#查看CPU 架构
uname -a
lsb_release -d #命令可以查看Linux 系统的发行版本
lsb_release -cs

统计 查找 命令

#用于查找文件。该指令会在特定目录中查找符合条件的文件。该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
whereis
where ls #可以显示出ls命令所在目录

#在文件系统中搜索某文件
find +文件名+目录

#统计文本中行数、字数、字符数
WC

#在文本文件中查找某个字符串,find和grep可以组合使用,通过|符号,在这个符号左右的命令互不干扰,一起执行
grep
#从根目录开始查找所有包含passwd字段的地方
find / |grep passwad

#查看命令帮助手册
man whoami

nohup

nohup命令的作用:不中断运行/后台运行。

如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。

案例:python在Ubuntu后台运行

nohup设置python程序后台运行

一般语法:

nohup python -u 文件名.py > 日志名.log 2>&1 &

语法解读:

  • >日志名.log:是指将信息输出到out.log日志中 ;
  • 2>&1: 是指将标准错误信息转变成标准输出,这样就可以将错误信息输出到.log 日志文件里面来。其中 0、1、2分别代表如下含义:
      • 0 – stdin (standard input)
      • 1 – stdout (standard output)
      • 2 – stderr (standard error)

执行结果:

返回一个pid

查看/追踪log文件变化

语法:

tail -f 文件名.log
查看正在执行的后台运行程序

以查看含有python的后台运行命令为例:

ps -ef | grep python
关闭nohup后台运行的进程

语法:

kill -9 pid

参考文章:

在Ubuntu下后台持续运行Python程序_墨染百城-CSDN博客

nohup &的用法、进程查看以及终止

其他常见命令

#验证安装,使配置生效
source /etc/profile

Linux技巧

  1. 双击tab自动补全
  2. [root@localhost ~]这就是Liux系统的命令提示符那么,这个提示符的含义是什么呢?
  • ​ []:这是提示符的分隔符号,没有特殊含义。
  • ​ root:显示的是当前的登录用户,笔者现在使用的是root用户登录。
  • ​ @:分隔符号,没有特殊含义。
  • ​ localhost:当前系统的简写主机名(完整主机名是localhost..localdomain)。
  • ​ ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
  • ​ #:命令提示符,Liux用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是#;如果是普通用户提示符就是$。
  1. linux所有用户都对tmp目录有绝对的控制权,提权一般在此进行

  2. 找不到netstat命令时,安装net-tools

  3. windows下停止dos命令运行的操作是ctrl+z,linux下停止命令运行的操作是ctrl+c

  4. 在kali用户下许多操作都可以进行,比如说是复制粘贴,但如果是root用户下,就会搞不了

  5. 有的apt包没有 要换成其他源

  6. 对于git如果https克隆不下来,就将https改成git,就可以克隆

  7. history命令查看历史使用的命令,!123,即!+数字,选取你要使用的命令

  8. cls清屏、shift+insert粘贴

  9. journalctl -xe查看报错的具体过程详细信息

  10. kali终端中

    ctrl+shift++		#终端变大
    ctrl+- #终端变小
  11. Kali自行设置快捷键匹配相应的命令:

    参考:https://blog.csdn.net/sinat_16643223/article/details/109479507

    image-20220826200253033
  12. linux快捷查找历史命令

在 Linux 命令行中使用 Ctrl + R 反向查找/搜索历史命令。

  1. 按下 Ctrl + R 组合键,进入反向搜索状态。

  2. 输入查找字符串 git,显示历史命令中的一条匹配命令。

    为了提高查找效率,应该输入要查找命令中最特别的字符 (别的命令不包含的字符)。

  3. 继续按下 Ctrl + R 组合键,可以继续向前搜索匹配命令。

  4. 按下 -> 键,退出搜索状态/交互模式。

Linux知识

Linux文件时间戳

Linux中的文件具有三个时间戳:

  1. atime(访问时间)-上一次通过某些命令或应用程序(例如cat,vim或grep)访问/打开文件的时间。
  2. mtime(修改时间)-上次修改文件内容的时间。
  3. ctime(更改时间)-文件的属性或内容上次更改的时间。 该属性包括文件许可权,文件所有权或文件位置。 要显示文件状态(包括时间戳),请使用stat命令。
shell stat file_name

创建新文件需要在父目录上具有写权限。 否则,您将收到一个权限被拒绝的错误。

端口

linux如何查看端口被哪个进程占用

Linux的netstat查看端口是否开放见解(0.0.0.0与127.0.0.1的区别)

Linux文件查找

find 命令只会查找文件名是否匹配指定的模式,不会查找文件内容是否包含指定的字符串。如果你想要查找文件内容中是否包含指定的字符串,可以使用 grep 命令。

Linux目录所有文件内容中查找包含特定字符串的文件名

  1. 你可以使用 grep 命令来在一个目录下检索文件名中是否包含指定字符串的文件名。

以下是一个在当前目录下检索文件名中包含字符串 “xxx” 的文件名的例子:

grep -r "xxx" .

如果找到匹配xxx的文件名,它们会被打印出来。

参数:

  • -r 选项来递归检索当前目录下的所有子目录
  • "xxx" 在每个文件名中搜索字符串 "xxx"
  • . 表示当前目录,你也可以将 . 替换成其他目录的路径,以在该目录下搜索文件名包含指定字符串的文件名。
  1. 如果你只想在某个特定类型的文件中查找,比如 .txt 文件,你可以使用以下命令:
grep -r "xxx" --include="*.txt" .

这个命令会在当前目录下查找所有 .txt 文件,并在其中搜索字符串 “xxx”。如果找到匹配的行,它们会被打印出来。

  1. 如果你需要进行更复杂的匹配,例如匹配某种模式或匹配多个关键词,可以使用正则表达式。grep 命令支持多种正则表达式语法,包括基本正则表达式(BRE)和扩展正则表达式(ERE)。

下面是一个使用扩展正则表达式(ERE)匹配多个关键词的例子:

grep -E "keyword1|keyword2" filename.txt

这个命令会在 filename.txt 文件中查找包含 “keyword1” 或 “keyword2” 字符串的行,并将它们输出到屏幕上。

  1. 如果你想要使用更高级的正则表达式功能,例如逆向引用、非捕获分组等,可以使用 grep 的 -P 选项启用 Perl 兼容正则表达式(PCRE)模式。例如:
grep -P "(keyword1.*?keyword2)|(keyword2.*?keyword1)" filename.txt

这个命令会在 filename.txt 文件中查找包含 “keyword1” 和 “keyword2” 之间的任意字符的行,并将它们输出到屏幕上。这个正则表达式使用了非捕获分组和非贪婪量词,这些功能在基本正则表达式和扩展正则表达式中是不可用的。

  1. 在当前目录和上级目录下面查找包含haz关键字的文件
grep -rin haz .*

在Linux中,grep 命令用于搜索文件中的文本模式。这个命令行示例包含了多个参数和元字符,下面是对它们的解释:

  1. -r 或 --recursive:这个参数告诉 grep 命令递归地搜索指定目录下的所有文件。也就是说,它会在当前目录及其子目录中的所有文件中查找匹配的文本。

  2. -i:这个参数使 grep 命令在搜索时不区分大小写。但是在这个示例中,-i 参数并没有明确出现,所以默认情况下 grep 是区分大小写的。

  3. -n:这个参数使 grep 命令在输出中包含匹配行的行号。同样,这个参数在这个示例中也没有明确出现。

  4. haz:这是要搜索的文本模式,grep 会在文件中查找包含 “haz” 这个词的行。

  5. .*:这个部分看起来像是一个通配符,用来匹配..或者是.\,也就是在当前目录和上层目录进行查找

Linux目录所有文件名字中查找包含特定字符串的文件名:find

  1. 如果你只想查找某个特定类型的文件,比如 .txt 文件,你可以使用 find 命令来查找:
find . -type f -name "*.txt" | grep "xxx"

这个命令会在当前目录下查找所有 .txt 文件,并在其中搜索字符串 “xxx”。如果找到匹配的文件名,它们会被打印出来。

  1. 如果你想要查找文件名中包含 “xxx” 的文件,而不是文件名等于 “xxx” 的文件,你可以使用 find 命令的 -name 选项和通配符来匹配文件名模式。通配符 * 可以匹配任意字符,包括文件名中的 “xxx”。

以下是一个在当前目录下查找文件名中包含 “xxx” 的文件的例子:

find . -type f -name "*xxx*"

这个命令会在当前目录下递归查找所有文件名中包含 “xxx” 的文件,并将它们列出来。你也可以将 . 替换成其他目录的路径,以在该目录下查找文件名包含指定字符串的文件。

  1. 如果你只想要列出文件名,你可以在 find 命令后面添加 -printf 选项,如下所示:
find . -type f -name "*xxx*" -printf "%f\n"

这个命令会列出所有文件名中包含 “xxx” 的文件的文件名。%f 是一个格式化字符串,它表示文件名(不包括路径)。\n 表示换行符,用于将每个文件名打印到新的一行。

参数:

  • -type 是 find 命令的选项之一,用于指定要查找的文件类型。f 是 -type 选项的参数之一,表示要查找的是普通文件(regular file)。

find 命令可以查找多种类型的文件,包括普通文件、目录、符号链接、设备文件等等。如果你想要只查找普通文件,可以使用 -type f 选项来指定。

如何查看最近创建的文件

在Ubuntu系统中,可以使用find命令来查找和筛选出最近创建或修改的文件。下面是一些具体的使用方法。

查看最近创建的文件

你可以使用如下命令来查看最近创建的文件:

find /path/to/directory -type f -ctime 0

在这个命令中,/path/to/directory是你想要查找的目录路径。-type f表示你只想查找文件(不包括目录)。-ctime 0表示你只想查找在过去24小时之内创建或修改过的文件。

注意:ctime 在文件系统中并不表示创建时间,而是表示状态改变时间,包括文件内容、权限、所有权的改变。由于Linux并未记录文件的创建时间,所以我们通常用 ctime 或 mtime(修改时间)来近似表示。

查看特定名称最近创建的文件

如果你想要查找特定名称的文件,你可以使用-name选项。例如,如果你想要查找所有在过去24小时之内创建或修改过,且名字中包含”example”的文件,你可以使用如下命令:

find /path/to/directory -type f -ctime 0 -name '*example*'

在这个命令中,*example*是你要查找的文件名模式。星号(*)是一个通配符,表示任何字符。

查看特定时间段创建的文件

如果你想要查找在特定时间段内创建或修改过的文件,你可以使用-ctime选项并提供一个加减号和数字。例如,以下命令将查找在过去2天到4天之间创建或修改过的文件:

find /path/to/directory -type f -ctime +2 -ctime -4

在这个命令中,+2表示超过2天,-4表示少于4天。

使用ls命令查看最新文件

另一种查找最新文件的方法是使用ls命令结合-lt选项(按时间排序)和head命令(只显示前几个结果):

ls -lt /path/to/directory | head -n 10

在这个命令中,-lt选项使ls按照时间从新到旧排序文件,head -n 10使得命令只显示前10个结果。

Linux目录大小查看

Linux中查看各文件夹大小命令:du -h –max-depth=1

du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>] [--max-depth=<目录层数>][--help][--version][目录或文件]

常用参数:

  • -a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
  • -b或-bytes 显示目录或文件大小时,以byte为单位。
  • -c或–total 除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
  • -D或–dereference-args 显示指定符号连接的源文件大小。
  • -h或–human-readable 以K,M,G为单位,提高信息的可读性。
  • -H或–si 与-h参数相同,但是K,M,G是以1000为换算单位,而不是以1024为换算单位。
  • -k或–kilobytes 以1024 bytes为单位。
  • -l或–count-links 重复计算硬件连接的文件。
  • -L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
  • -m或–megabytes 以1MB为单位。
  • -s或–summarize 仅显示总计,即当前目录的大小。
  • -S或–separate-dirs 显示每个目录的大小时,并不含其子目录的大小。
  • -x或–one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
  • -X<文件>或–exclude-from=<文件> 在<文件>指定目录或文件。
  • –exclude=<目录或文件> 略过指定的目录或文件。
  • –max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
  • –help 显示帮助。
  • –version 显示版本信息。

常见用法:

# 1> 要显示一个目录树及其每个子树的磁盘使用情况
du /home/linux
这在/home/linux目录及其每个子目录中显示了磁盘块数。

# 2> 要通过以1024字节为单位显示一个目录树及其每个子树的磁盘使用情况
du -k /home/linux
这在/home/linux目录及其每个子目录中显示了 1024 字节磁盘块数。

# 3> 以MB为单位显示一个目录树及其每个子树的磁盘使用情况
du -m /home/linux
这在/home/linux目录及其每个子目录中显示了 MB 磁盘块数。

# 4> 以GB为单位显示一个目录树及其每个子树的磁盘使用情况
du -g /home/linux
这在/home/linux目录及其每个子目录中显示了 GB 磁盘块数。

# 5>查看当前目录下所有目录以及子目录的大小:
du -h .
“.”代表当前目录下。也可以换成一个明确的路径
-h表示用K、M、G的人性化形式显示

# 6>查看当前目录下user目录的大小,并不想看其他目录以及其子目录:
du -sh user
-s表示总结的意思,即只列出一个总结的值
du -h --max-depth=0 user
--max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。

# 7>列出user目录及其子目录下所有目录和文件的大小:
du -ah user
-a表示包括目录和文件

# 8>列出当前目录中的目录名不包括xyz字符串的目录的大小:
du -h --exclude='*xyz*'

# 9>想在一个屏幕下列出更多的关于user目录及子目录大小的信息:
du -0h user
-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。

# 10>只显示一个目录树的全部磁盘使用情况
du -s /home/linux
# 11>查看各文件夹大小:
du -h --max-depth=1

refer