目录
一.说一说你熟悉的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
实际场景示例
排查服务器负载高:
top → 查看CPU占用高的进程 → ps aux | grep <PID> → kill -9 <PID>日志分析:
tail -f app.log | grep "ERROR" → 实时监控错误日志批量处理文件:
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)操作步骤:
找到配置文件位置:
sudo find / -name my.cnf
。修改后重启 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 # 注释或删除此行
排查流程总结
检查权限:确认用户允许远程访问 (
SELECT user, host FROM mysql.user;
)。验证配置:确保
bind-address
设置为0.0.0.0
或服务器公网 IP。测试端口:通过
telnet
或nc
确认3306
端口可访问。关闭防火墙:临时禁用防火墙测试是否是拦截原因。
查看日志:检查 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 文件。
总结:关键操作场景
部署应用:将 WAR 文件放入
webapps
,Tomcat 会自动解压并加载。修改端口:编辑
conf/server.xml
中的<Connector port="8080">
。查看日志:排查问题时检查
logs/catalina.out
或应用日志。清理缓存:删除
work
目录以强制重新编译 JSP。安全管理:配置
tomcat-users.xml
设置管理员权限。
掌握这些目录的作用,能帮助您更高效地管理 Tomcat 服务器和 Web 应用。