linux面试题

发布于:2025-03-30 ⋅ 阅读:(27) ⋅ 点赞:(0)

目录

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

1. 文件与目录操作

2. 文件内容查看与编辑

3. 权限与用户管理

4. 系统监控与进程管理

5. 网络与通信

6. 压缩与归档

7. 高级文本处理

实际场景示例

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

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

2. MySQL 未监听公网IP

3. 防火墙或安全组拦截

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

5. SELinux/AppArmor 安全限制

6. 网络路由或NAT问题

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

排查流程总结

安全建议

三.tomcat有哪些目录及作用

1. bin 目录

2. conf 目录

3. webapps 目录

4. lib 目录

5. logs 目录

6. work 目录

7. temp 目录

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

实际场景示例

  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 应用。