Linux文件查找大全

简介:三大查找

which :命令查找

find: 文件查找,针对文件名

locate:文件查找,依赖数据库

一、which 命令查找

which  命令名    #可以查找到该命令的可执行文件路径

-p:与 which 相同,但 -p 是 POSIX 标准的选项。
-a:显示所有匹配的可执行文件路径,而不仅仅是第一个找到的。
-n:显示所有 $PATH 中的目录,即使它们不包含可执行文件。
-s:静默模式,不显示任何信息,只通过退出状态表示是否找到命令

二、任意文件

2.1、locate查找

locate passwd    #查看passwd文件
locate -i ~/r    #忽略大小写搜索当前目录所有以r开头的文件
-i:忽略大小写。
-r:使用基本正则表达式。
-e:仅打印当前现有文件的条目。
-b:仅匹配路径名的基本名称。
-c, --count:只输出找到的数量。
locate 命令不会检查数据库中找到的文件是否仍然存在。
locate 命令不会报告在最近一次数据库更新后创建的文件

2.2、find查找

find [path] [expression]
path:指定搜索的起始目录。如果省略,默认从当前目录开始搜索。
expression:定义搜索条件,如文件名、文件类型、大小等。
find /path -name "filename"    #根据文件名字查找
find /path -type filename.txt  #根据文件类型查找
find /path -type f -size +10M  #指定查找文件大小超过10M的
find /path -size +10M          #根据文件大小查找
find /path -mtime -7           #根据文件修改时间查询
find /path -user -username     #根据文件所有者查找
find /path -group groupname    #根据文件所属的组查找
find /path -type f mtime +119  #找出120天之前被修改的文件

举例:

删除 /tmp 目录下所有扩展名为 .log 的文件:
find /tmp -name ".log" -exec rm{} \;
使用 -exec 选项时,{} 是一个占位符,代表每个匹配的文件名

2.3、grep 查询

grep "text" filename     #filename是想要搜索的文件名字
grep -r "text" /path/    #递归搜索目录
grep -i "text" filename  #忽略大小写搜索
grep -l "text" /path/*   #只显示包含匹配行的文件名

2.4、 journalctl日志查找 

 在 Linux 中有一部分日志是先写到内存里的,这些日志是实时变化,跟系统内存相关。每次重启系统内存日志都会被清空。查看内存日志使用指令 journalctl。

journalctl  #查看全部日志
journalctl -n 3  #查看最新三条日志
journalctl --since 13:000 --until 15:30  # 查看起始时间到结束时间的日志
journalctl -p err  #报错日志
journalctl -o verbose  #日志详细内容

三、文件打包压缩:

常用的压缩格式有.tar.gz.gz.zip等。我将针对这些格式分别介绍相应的命令,并给出示例

 3.1、压缩:对于.tar.gz格式

tar 选项  压缩包名称   源文件
1、创建压缩包 使用tar  -czf
#c :表示压缩文件
#z :表示gzip压缩
#f :表示压缩后的文件名字

tar -czf abc123.tar.gz abc123

解压缩:

对于.tar.gz格式的解压缩
x:表示解压
z:表示gzip压缩
f:指定压缩文件

tar -xzf abc123.tar.gz

四、面试问题:

4.1、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1 ?

转换以后我该如何进行查询?

1:将本地80端口的请求转发到8080端口通常涉及到网络配置和可能需要管理员权限。在Linux系统中,这可以通过多种方法实现,包括使用iptables规则、socat工具或者修改应用配置以直接监听不同端口。下面将介绍使用iptablessocat的方法。 

  1. 确保iptables已经安装并且内核支持ip转发
  2. 启动ip转发:/etc/sysctl.conf文件,将net.ipv4.ip_forward=1   sysctl -p刷新

添加iptables规则来转发端口:

iptables -t nat -A prerouting -p tcp --dport 80 -j redirect --to-port 8080
#对于所有目标端口为80的TCP流量,使用NAT表的PREROUTING链进行处理,将这些请求重定向到本机的8080端口

 使用socat进行端口转发:

socat tcp-listen:80,fork tcp:192.168.2.1:8080

2:如何查看占用端口8080的进程?

 为什么不用ps aux | grep 8080? 因为显示进程信息而不是显示端口信息;

ss -ltnp | grep ':8080'

netstat -ltnp | grep ':8080'

netstat -ltnp:
-l:显示监听中(LISTEN)的套接字。
-t:显示 TCP 连接。
-n:以数字形式显示地址和端口号。
-p:显示进程的 PID 和程序名称。

lsof -i :8080
也可以查找使用端口8080的进程

总结:

  • 如果你只需要知道哪个进程监听在端口8080上,netstat -ltnp | grep ':8080' 更合适。
  • 如果你需要更全面地了解可能与端口8080相关的进程的详细信息,ps aux | grep 8080 可能更有用。

4.2、只记得文件内容但是不知道文件名字与存储目录

我只记得我写的东西叫abc123 但不知道它文件名字是什么也不知道放在哪个目录该如何查找:

1:find . -type f -print0 | xargs -0 grep "abc123"
2:find . -type f -name "*.txt" -print0 | xargs -0 grep "abc123"

-type f 只查找文件(不包括目录)
xargs 命令读取来自标准输入的输入项,-0 选项告诉

4.3、如何找回 root 密码(高频面试) 

1、启动 Linux 系统,待进入开机界面后按 “e” 进入编辑界面,注意此处要快,在系统进入登录页面之前进行操作;

  • 在编辑界面中,找到以 Linux 16 开头的行,这通常是启动内核的命令行。
  • 在这一行的末尾添加 init=/bin/sh。这会告诉系统在启动时不加载正常的系统初始化进程,而是直接进入一个 shell 环境。
  • 完成编辑后,按下 Ctrl+X 或 F10(取决于系统)来启动系统。
  • 系统会以单用户模式启动,这是一个具有 root 权限的 shell 环境,通常用于系统维护和紧急修复。
  • 在单用户模式下,文件系统默认是只读的。为了修改密码,需要先将其重新挂载为可写。输入命令 mount -o remount,rw / 来重新挂载根文件系统为可写。
  • 输入 passwd 命令来更改 root 用户的密码。系统会提示你输入新的密码并确认。
  • 更新SELinux,你可能需要创建一个文件 /.autorelabel 来指示系统在下次启动时重新标记文件系统。输入 touch /.autorelabel 来创建这个文件。
  • 输入 exec /sbin/init 或 exec /bin/sh 来重启系统,使其进入正常的多用户模式。

4.4、MySQL忘记密码该如何登录

1、可以通过修改mysql的配置文件来登录数据库,mysql的配置文件一般会放在:

/etc/mysql/my.cnf

添加:--skip-grant-tables        作用是会使数据库在没有密码保护的情况下暴露给所有用户

然后sudo systemctl restart  mysql        重启数据库

mysql  -u  root  跳过权限检查直接登录

登录后 使用flush privileges;        刷新mysql的权限

alter user 'root'@'localhost' identified by '123456';

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值