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
工具或者修改应用配置以直接监听不同端口。下面将介绍使用iptables
和socat
的方法。
- 确保iptables已经安装并且内核支持ip转发
- 启动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';