目录

linux面试题

目录

一.说一说你熟悉的linux命令

[1. 文件与目录操作](#1. 文件与目录操作)

[2. 文件内容查看与编辑](#2. 文件内容查看与编辑)

[3. 权限与用户管理](#3. 权限与用户管理)

[4. 系统监控与进程管理](#4. 系统监控与进程管理)

[5. 网络与通信](#5. 网络与通信)

[6. 压缩与归档](#6. 压缩与归档)

[7. 高级文本处理](#7. 高级文本处理)

实际场景示例

二.mysql不能远程访问可能有哪些原因,及如何解决

[1. MySQL 用户未授权远程访问](#1. MySQL 用户未授权远程访问)

[2. MySQL 未监听公网IP](#2. MySQL 未监听公网IP)

[3. 防火墙或安全组拦截](#3. 防火墙或安全组拦截)

[4. MySQL 服务未运行或端口未监听](#4. MySQL 服务未运行或端口未监听)

[5. SELinux/AppArmor 安全限制](#5. SELinux/AppArmor 安全限制)

[6. 网络路由或NAT问题](#6. 网络路由或NAT问题)

[7. MySQL 跳过网络配置(极少数情况)](#7. MySQL 跳过网络配置(极少数情况))

排查流程总结

安全建议

三.tomcat有哪些目录及作用

[1. bin 目录](#1. bin 目录)

[2. conf 目录](#2. conf 目录)

[3. webapps 目录](#3. webapps 目录)

[4. lib 目录](#4. lib 目录)

[5. logs 目录](#5. logs 目录)

[6. work 目录](#6. work 目录)

[7. temp 目录](#7. temp 目录)

[8. LICENSE / NOTICE 文件](#8. LICENSE / NOTICE 文件)

其他重要目录

总结:关键操作场景


一.说一说你熟悉的linux命令

在 Linux 系统管理和开发中,熟练掌握常用命令是必备技能。以下是我熟悉的 Linux 命令分类整理,结合实际场景说明其用途:


1. 文件与目录操作

  • ls 列出目录内容。常用选项:

    复制代码
    ls -l     # 显示详细信息(权限、大小、时间)
    ls -a     # 显示隐藏文件(以`.`开头)
    ls -lh    # 人类可读的文件大小(如 KB/MB)
  • cd 切换目录:

    复制代码
    cd /var/log   # 进入绝对路径
    cd ..         # 返回上级目录
    cd ~          # 回到用户主目录
  • cp 复制文件/目录:

    复制代码
    cp file.txt /backup/          # 复制文件
    cp -r dir1/ dir2/            # 递归复制目录
  • mv 移动或重命名文件/目录:

    复制代码
    mv old.txt new.txt           # 重命名
    mv file.txt /tmp/            # 移动文件
  • rm 删除文件/目录(谨慎使用):

    复制代码
    rm file.txt                  # 删除文件
    rm -r dir/                   # 递归删除目录
    rm -f *.log                  # 强制删除(不提示)
  • find 搜索文件(支持名称、类型、时间等条件):

    复制代码
    find /home -name "*.log"     # 按名称查找
    find . -type f -mtime +7     # 查找7天前修改的文件
  • grep 文本搜索(支持正则表达式):

    复制代码
    grep "error" app.log         # 查找包含"error"的行
    grep -r "TODO" src/          # 递归搜索目录中的文本

2. 文件内容查看与编辑

  • cat 查看文件内容(适合小文件):

    复制代码
    cat config.yml
  • more/less 分页查看大文件(支持上下翻页):

    复制代码
    less large_log.log
  • head/tail 查看文件头部/尾部内容:

    复制代码
    head -n 10 file.log         # 显示前10行
    tail -f app.log             # 实时追踪日志更新(监控日志)
  • vim 文本编辑器(高效编辑文件):

    复制代码
    vim file.txt                # 进入编辑模式(i插入,:wq保存退出)

3. 权限与用户管理

  • chmod 修改文件权限:

    复制代码
    chmod 755 script.sh         # 设置权限为rwxr-xr-x
    chmod +x script.sh          # 添加可执行权限
  • chown 修改文件所有者:

    复制代码
    chown user:group file.txt   # 修改所有者和所属组
  • sudo 以管理员权限执行命令:

    复制代码
    sudo apt update             # 需要管理员权限的操作
  • useradd/usermod 用户管理:

    复制代码
    sudo useradd john           # 创建新用户
    sudo usermod -aG dev john   # 将用户添加到dev组

4. 系统监控与进程管理

  • ps 查看进程状态:

    复制代码
    ps aux                      # 显示所有进程详细信息
    ps -ef | grep nginx         # 查找特定进程
  • top/htop 实时监控系统资源(CPU、内存、进程):

    复制代码
    top                         # 动态刷新资源使用情况
    htop                        # 增强版(支持交互操作)
  • kill 终止进程:

    复制代码
    kill -9 1234                # 强制终止PID为1234的进程
  • df/du 磁盘空间查看:

    复制代码
    df -h                       # 查看磁盘剩余空间(人类可读)
    du -sh /var/log             # 统计目录占用空间大小

5. 网络与通信

  • curl 发送 HTTP 请求:

    复制代码
    curl -I http://example.com  # 查看响应头
    curl -o data.json http://api.com/data
  • wget 下载文件:

    复制代码
    wget https://example.com/file.zip
  • netstat/ss 查看网络连接和端口:

    复制代码
    netstat -tuln               # 查看监听中的端口
    ss -ltnp                    # 更快速的替代方案(显示进程)
  • ping/traceroute 网络连通性测试:

    复制代码
    ping google.com             # 测试网络延迟
    traceroute example.com      # 追踪数据包路径
  • ssh 远程登录服务器:

    复制代码
    ssh user@192.168.1.100      # 连接到远程主机

6. 压缩与归档

  • tar 打包和解压文件:

    复制代码
    tar -czvf archive.tar.gz dir/  # 压缩为gzip格式
    tar -xzvf archive.tar.gz       # 解压gzip文件
  • gzip/gunzip 压缩/解压单个文件:

    复制代码
    gzip file.log                # 生成file.log.gz
    gunzip file.log.gz           # 解压

7. 高级文本处理

  • awk 文本分析工具(按列处理):

    复制代码
    awk '{print $1}' access.log  # 输出第一列(如IP地址)
  • sed 流编辑器(替换/删除文本):

    复制代码
    sed 's/foo/bar/g' file.txt   # 全局替换foo为bar

8. 防火墙命令firewalld(CentOS)

  • 启动/停止服务

    复制代码
    systemctl start firewalld    # 启动
    systemctl stop firewalld     # 停止
    systemctl enable firewalld   # 开机自启
  • 开放端口/服务

    复制代码
    firewall-cmd --add-port=80/tcp --permanent   # 开放 TCP 80 端口(永久生效)
    firewall-cmd --add-service=http --permanent  # 允许 HTTP 服务
    firewall-cmd --reload                        # 重新加载配置
  • 查看规则

    复制代码
    firewall-cmd --list-all       # 列出当前区域的所有规则
    firewall-cmd --list-ports     # 查看开放的端口

9.磁盘管理命令

1. 分区管理
  • fdisk(MBR 分区):

    复制代码
    fdisk /dev/sda          # 对 sda 磁盘操作
    # 常用操作:n(新建分区)、d(删除)、w(保存)

2. 文件系统操作
  • 格式化分区

    复制代码
    mkfs.ext4 /dev/sda1    # 格式化为 ext4
    mkfs.xfs /dev/sdb1     # 格式化为 XFS
  • 挂载/卸载

    复制代码
    mount /dev/sda1 /mnt/data      # 临时挂载
    umount /mnt/data               # 卸载
  • 永久挂载(/etc/fstab)

    复制代码
    /dev/sda1  /mnt/data  ext4  defaults  0 0

3. 磁盘信息查看
  • 查看空间使用

    复制代码
    df -h              # 显示磁盘使用情况(人类可读)
    du -sh /var/log    # 查看目录大小
  • 块设备列表

    复制代码
    lsblk              # 显示所有块设备(树状结构)
    blkid              # 查看分区的 UUID 和文件系统类型

实际场景示例

  1. 排查服务器负载高

    复制代码
    top → 查看CPU占用高的进程 → ps aux | grep <PID> → kill -9 <PID>
  2. 日志分析

    复制代码
    tail -f app.log | grep "ERROR" → 实时监控错误日志
  3. 批量处理文件

    复制代码
    find /logs -name "*.log" -mtime +30 -exec rm {} \;  # 删除30天前的日志

掌握这些命令可以覆盖日常开发、运维的绝大部分场景。如果需要更复杂的功能(如脚本编写),可以结合管道符 |、重定向 > 和 Shell 脚本实现自动化。

二.mysql不能远程访问可能有哪些原因,及如何解决

当 MySQL 无法远程访问时,通常涉及配置、权限或网络问题。以下是常见原因及解决方法:


1. MySQL 用户未授权远程访问

  • 原因 :MySQL 默认只允许 localhost 连接,用户权限未开放远程访问。

  • 解决

    复制代码
    -- 创建允许任意IP访问的用户(生产环境建议限制IP)
    CREATE USER 'username'@'%' IDENTIFIED BY 'password';
    ​
    -- 授权所有权限(按需调整)
    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
    ​
    -- 刷新权限
    FLUSH PRIVILEGES;

    注意

    • % 替换为具体 IP(如 '192.168.1.100')以增强安全性。

    • 使用 SHOW GRANTS FOR 'username'@'%'; 验证权限。


2. MySQL 未监听公网IP

  • 原因 :MySQL 配置文件 (my.cnf/my.ini) 中 bind-address 限制为本地。

  • 解决

    复制代码
    # 修改配置文件(路径示例:/etc/mysql/my.cnf)
    [mysqld]
    bind-address = 0.0.0.0  # 允许所有IP访问(或指定服务器IP)

    操作步骤

    1. 找到配置文件位置:sudo find / -name my.cnf

    2. 修改后重启 MySQL:sudo systemctl restart mysql


3. 防火墙或安全组拦截

  • 原因 :服务器防火墙或云平台安全组未开放 3306 端口。

  • 解决

    • 本地防火墙(以 Ubuntu ufw 为例):

      复制代码
      sudo ufw allow 3306/tcp   # 开放端口
      sudo ufw reload           # 重启防火墙
    • 云平台安全组 (如 AWS、阿里云): 在控制台添加入站规则,允许来源 IP 访问 3306 端口。


4. MySQL 服务未运行或端口未监听

  • 原因 :MySQL 服务未启动,或未监听 3306 端口。

  • 解决

    复制代码
    # 检查服务状态
    sudo systemctl status mysql
    ​
    # 查看端口监听情况
    sudo netstat -tulnp | grep 3306
    • 若端口未监听,确认 my.cnf 配置正确后重启服务。

    • 检查是否有其他进程占用端口:sudo lsof -i :3306


5. SELinux/AppArmor 安全限制

  • 原因:SELinux 或 AppArmor 阻止了 MySQL 的网络访问。

  • 解决

    • 临时禁用 SELinux(测试用):

      复制代码
      sudo setenforce 0
    • 永久调整策略(以 CentOS 为例):

      复制代码
      sudo semanage port -a -t mysqld_port_t -p tcp 3306

6. 网络路由或NAT问题

  • 原因:客户端与服务器之间网络不通,或存在 NAT 转换问题。

  • 解决

    • 使用 ping 测试服务器可达性:ping <server-ip>

    • 使用 telnet 测试端口连通性:telnet <server-ip> 3306

    • 检查服务器是否在 NAT 后,确保端口映射正确。


7. MySQL 跳过网络配置(极少数情况)

  • 原因 :MySQL 配置中启用了 skip-networking,导致不监听任何网络端口。

  • 解决

    复制代码
    # 修改配置文件 my.cnf
    [mysqld]
    # skip-networking  # 注释或删除此行

排查流程总结

  1. 检查权限 :确认用户允许远程访问 (SELECT user, host FROM mysql.user;)。

  2. 验证配置 :确保 bind-address 设置为 0.0.0.0 或服务器公网 IP。

  3. 测试端口 :通过 telnetnc 确认 3306 端口可访问。

  4. 关闭防火墙:临时禁用防火墙测试是否是拦截原因。

  5. 查看日志 :检查 MySQL 错误日志 (/var/log/mysql/error.log) 获取详细错误信息。


安全建议

  • 限制远程访问 IP 范围,避免使用 % 开放所有 IP。

  • 使用强密码并定期更新。

  • 考虑通过 SSH 隧道或 VPN 访问数据库,减少直接暴露公网端口。

三.tomcat有哪些目录及作用

Apache Tomcat 的目录结构是其核心组成部分,每个目录都有特定的用途。以下是 Tomcat 主目录(通常称为 CATALINA_HOME)下的主要目录及其作用:


1. bin 目录

  • 作用:存放 Tomcat 的可执行脚本和工具。

  • 关键文件

    • startup.sh / startup.bat:启动 Tomcat(Linux/Windows)。

    • shutdown.sh / shutdown.bat:关闭 Tomcat。

    • catalina.sh / catalina.bat:核心控制脚本(如设置 JVM 参数)。

    • version.sh / version.bat:查看 Tomcat 版本。


2. conf 目录

  • 作用:存放 Tomcat 的配置文件。

  • 关键文件

    • server.xml:主配置文件(定义端口、虚拟主机、连接器等)。

    • web.xml:全局 Servlet/JSP 配置(默认对所有 Web 应用生效)。

    • context.xml:默认的上下文配置(影响所有 Web 应用)。

    • tomcat-users.xml:管理用户和角色(如 Manager 和 Host-Manager 的访问权限)。

    • logging.properties:日志系统配置(如日志级别、输出格式)。


3. webapps 目录

  • 作用:默认部署 Web 应用的目录(应用以 WAR 文件或目录形式存在)。

  • 常见子目录

    • ROOT:对应根路径(http://localhost:8080/)。

    • docs:Tomcat 文档。

    • examples:示例 Web 应用。

    • manager:管理界面(用于动态部署/卸载应用)。

    • host-manager:虚拟主机管理界面。


4. lib 目录

  • 作用:存放 Tomcat 运行所需的共享库(JAR 文件),如 Servlet API、JSP API 等。

  • 注意:所有 Web 应用均可访问此目录中的类库。


5. logs 目录

  • 作用:存放 Tomcat 的日志文件。

  • 关键日志

    • catalina.out:标准输出和错误日志(启动/关闭信息)。

    • localhost_access_log.*.txt:访问日志(记录 HTTP 请求)。

    • localhost.*.log:应用运行时日志(如异常信息)。


6. work 目录

  • 作用:存放运行时生成的临时文件。

  • 关键内容

    • 编译后的 JSP 文件(转换为 Servlet 的 .java.class 文件)。

    • 会话持久化数据(如果配置了会话存储)。


7. temp 目录

  • 作用:存放临时文件(如文件上传时的临时缓存)。

  • 自动清理:Tomcat 重启时会清理此目录。


8. LICENSE / NOTICE 文件

  • 作用:包含 Tomcat 的许可证信息及第三方库声明。

其他重要目录

  • conf/Catalina/localhost

    • 存放 Web 应用的独立上下文配置文件(<appname>.xml),用于替代 server.xml 中的配置。
  • webapps/<app>/WEB-INF(每个 Web 应用内部):

    • web.xml:当前应用的 Servlet/JSP 配置。

    • classes:应用的 Java 类文件(如 Servlets)。

    • lib:应用依赖的私有 JAR 文件。


总结:关键操作场景

  1. 部署应用 :将 WAR 文件放入 webapps,Tomcat 会自动解压并加载。

  2. 修改端口 :编辑 conf/server.xml 中的 <Connector port="8080">

  3. 查看日志 :排查问题时检查 logs/catalina.out 或应用日志。

  4. 清理缓存 :删除 work 目录以强制重新编译 JSP。

  5. 安全管理 :配置 tomcat-users.xml 设置管理员权限。

掌握这些目录的作用,能帮助您更高效地管理 Tomcat 服务器和 Web 应用。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
蝈蝈噶蝈蝈噶3 分钟前
问题:tomcat下部署eureka双重路径
java·eureka·tomcat
禹曦a7 分钟前
Java进阶之旅-day05:网络编程
java·开发语言·网络
Evand J21 分钟前
【MATLAB例程】TDOA(到达时间差)定位的chan-tylor计算方法,三维环境,附代码下载链接
开发语言·matlab
风舞红枫21 分钟前
WPS宏开发手册——Excel实战
excel·wps
五行星辰28 分钟前
Gson修仙指南:谷歌大法的佛系JSON渡劫手册
java·后端
難釋懷32 分钟前
JavaScript基础-移动端常用开发框架
开发语言·javascript
dot to one32 分钟前
深入理解 C++ 三大特性之一 继承
开发语言·c++·visual studio
哈哈哈哈哈哈哈哈哈...........33 分钟前
【无标题】object,wait,notifyAll
java·开发语言
Niuguangshuo39 分钟前
Python 设计模式:迭代模式
java·python·设计模式