Interview AiBoxInterview AiBox 实时 AI 助手,让你自信应答每一场面试
请列举一些Linux常用命令及其用途
题型摘要
Linux常用命令按功能可分为八大类:文件和目录操作(ls, cd, cp, mv, rm)、文本处理(cat, grep, sed, awk)、系统信息管理(uname, top, df, free)、网络相关(ping, ssh, curl, netstat)、权限管理(chmod, chown, sudo)、进程管理(ps, kill, jobs)、搜索查找(find, locate, which)和压缩解压(tar, zip, gzip)。掌握这些命令是后端开发的基础技能,能够有效进行系统管理、文件处理、问题排查和日常开发工作。
Linux常用命令及其用途
Linux作为服务器端主流操作系统,掌握其常用命令是后端开发的基本技能。下面按照功能类别列举Linux常用命令及其用途。
1. 文件和目录操作命令
ls - 列出目录内容
ls -l # 以长格式显示文件详细信息
ls -a # 显示所有文件,包括隐藏文件
ls -h # 以人类可读的方式显示文件大小
cd - 切换目录
cd /path/to/directory # 切换到指定目录
cd .. # 返回上一级目录
cd ~ # 切换到用户主目录
cd - # 切换到上一个工作目录
pwd - 显示当前工作目录
pwd # 显示当前所在的完整路径
mkdir - 创建目录
mkdir directory_name # 创建新目录
mkdir -p dir1/dir2/dir3 # 创建多级目录
rmdir - 删除空目录
rmdir directory_name # 删除空目录
touch - 创建空文件或更新文件时间戳
touch file.txt # 创建空文件或更新文件时间戳
cp - 复制文件或目录
cp source_file destination_file # 复制文件
cp -r source_directory destination # 复制目录
cp -p source_file destination_file # 保留文件属性复制
mv - 移动或重命名文件/目录
mv old_name new_name # 重命名文件/目录
mv file /path/to/dir # 移动文件到指定目录
rm - 删除文件或目录
rm file.txt # 删除文件
rm -r directory # 递归删除目录及其内容
rm -f file.txt # 强制删除文件,不提示
rm -rf directory # 强制递归删除目录(慎用)
ln - 创建链接
ln source_file link_name # 创建硬链接
ln -s source_file link_name # 创建软链接(符号链接)
2. 文本处理命令
cat - 查看文件内容
cat file.txt # 显示文件内容
cat -n file.txt # 显示文件内容并显示行号
cat file1 file2 > file3 # 合并文件1和文件2到文件3
less/more - 分页查看文件内容
less file.txt # 分页查看文件内容,支持前后翻页
more file.txt # 分页查看文件内容,仅支持向前翻页
head/tail - 查看文件头部/尾部内容
head file.txt # 查看文件前10行
head -n 20 file.txt # 查看文件前20行
tail file.txt # 查看文件后10行
tail -f file.txt # 实时查看文件更新(常用于日志监控)
tail -n 20 file.txt # 查看文件后20行
grep - 文本搜索
grep pattern file.txt # 在文件中搜索匹配模式的行
grep -i pattern file.txt # 忽略大小写搜索
grep -r pattern directory/ # 递归目录中搜索
grep -v pattern file.txt # 搜索不匹配模式的行
grep -n pattern file.txt # 显示匹配行及行号
grep -c pattern file.txt # 统计匹配行数
sed - 流编辑器
sed 's/old/new/g' file.txt # 替换文件中的文本
sed -i 's/old/new/g' file.txt # 直接修改文件内容
sed '1,5d' file.txt # 删除文件1-5行
sed -n '1,5p' file.txt # 只显示文件1-5行
awk - 文本处理工具
awk '{print $1}' file.txt # 打印每行的第一个字段
awk -F: '{print $1}' /etc/passwd # 使用冒号作为分隔符打印第一个字段
awk '{sum+=$1} END {print sum}' file.txt # 计算第一列的总和
sort - 排序
sort file.txt # 对文件内容进行排序
sort -n file.txt # 按数字大小排序
sort -r file.txt # 逆序排序
sort -u file.txt # 去除重复行并排序
uniq - 去重
uniq file.txt # 去除相邻的重复行
sort file.txt | uniq # 先排序再去除所有重复行
uniq -c file.txt # 统计重复行出现的次数
wc - 统计
wc file.txt # 统计文件的行数、单词数和字节数
wc -l file.txt # 只统计行数
wc -w file.txt # 只统计单词数
wc -c file.txt # 只统计字节数
3. 系统信息和管理命令
uname - 显示系统信息
uname # 显示内核名称
uname -a # 显示所有系统信息
uname -r # 显示内核版本
top/htop - 动态显示进程信息
top # 实时显示系统进程和资源使用情况
htop # 增强版的top,界面更友好
df - 显示磁盘空间使用情况
df # 显示磁盘分区使用情况
df -h # 以人类可读格式显示
df -T # 显示文件系统类型
du - 显示目录或文件大小
du directory # 显示目录大小
du -h directory # 以人类可读格式显示
du -sh directory # 显示目录总大小
du -ah directory # 显示目录中所有文件的大小
free - 显示内存使用情况
free # 显示内存使用情况
free -h # 以人类可读格式显示
free -m # 以MB为单位显示
date - 显示或设置系统时间
date # 显示当前时间
date "+%Y-%m-%d %H:%M:%S" # 按指定格式显示时间
date -s "2023-12-25 12:00:00" # 设置系统时间
history - 显示命令历史
history # 显示执行过的命令历史
history 10 # 显示最近10条命令
!number # 执行历史记录中编号为number的命令
4. 网络相关命令
ping - 测试网络连通性
ping hostname # 测试与主机的连通性
ping -c 4 hostname # 只发送4个ping包
ifconfig/ip - 配置网络接口
ifconfig # 显示所有网络接口信息
ifconfig eth0 # 显示指定网络接口信息
ip addr show # 显示所有网络接口信息(新版本)
ip link set eth0 up # 启用网络接口
netstat/ss - 显示网络状态
netstat -tuln # 显示所有监听的TCP/UDP端口
netstat -an # 显示所有网络连接
ss -tuln # 显示所有监听的TCP/UDP端口(新版本)
curl/wget - 网络文件传输
curl URL # 获取URL内容并显示
curl -O URL # 下载URL文件
wget URL # 下载URL文件
wget -c URL # 断点续传下载
ssh - 安全远程登录
ssh user@hostname # 登录到远程主机
ssh -p port user@hostname # 指定端口登录
scp - 安全复制文件
scp local_file user@remote:/remote/path # 复制本地文件到远程主机
scp user@remote:/remote/file local_path # 复制远程文件到本地
scp -r local_dir user@remote:/remote/path # 复制本地目录到远程主机
5. 权限管理命令
chmod - 修改文件权限
chmod 755 file.sh # 设置文件权限为rwxr-xr-x
chmod u+x file.sh # 给文件所有者添加执行权限
chmod a-w file.txt # 移除所有用户的写权限
chown - 修改文件所有者
chown user file.txt # 修改文件所有者
chown user:group file.txt # 修改文件所有者和所属组
chown -R user directory # 递归修改目录所有者
chgrp - 修改文件所属组
chgrp group file.txt # 修改文件所属组
chgrp -R group directory # 递归修改目录所属组
sudo - 以超级用户权限执行命令
sudo command # 以超级用户权限执行命令
sudo -i # 切换到root用户
sudo su # 切换到root用户
6. 进程管理命令
ps - 显示进程状态
ps aux # 显示所有进程的详细信息
ps -ef # 显示所有进程的详细信息
ps -p PID # 显示指定进程信息
kill/killall - 终止进程
kill PID # 终止指定进程
kill -9 PID # 强制终止进程
killall process_name # 终止所有指定名称的进程
jobs/fg/bg - 作业控制
jobs # 显示当前作业
fg %n # 将作业n切换到前台运行
bg %n # 将作业n切换到后台运行
nohup - 忽略挂起信号运行命令
nohup command & # 后台运行命令,忽略挂起信号
7. 搜索和查找命令
find - 查找文件
find /path -name filename # 按名称查找文件
find /path -type f # 只查找文件
find /path -type d # 只查找目录
find /path -mtime -7 # 查找7天内修改过的文件
find /path -size +10M # 查找大于10MB的文件
locate - 快速查找文件
locate filename # 快速查找文件(使用数据库)
updatedb # 更新文件数据库
which/whereis - 查找命令位置
which command # 查找可执行文件位置
whereis command # 查找命令、源文件和手册页位置
8. 压缩和解压命令
tar - 打包和解包
tar -cvf archive.tar file1 file2 # 打包文件
tar -xvf archive.tar # 解包文件
tar -czvf archive.tar.gz dir/ # 打包并gzip压缩
tar -xzvf archive.tar.gz # 解压gzip压缩包
tar -cjvf archive.tar.bz2 dir/ # 打包并bzip2压缩
tar -xjvf archive.tar.bz2 # 解压bzip2压缩包
zip/unzip - ZIP压缩和解压
zip archive.zip file1 file2 # 创建ZIP压缩包
unzip archive.zip # 解压ZIP压缩包
gzip/gunzip - GZIP压缩和解压
gzip file.txt # 压缩文件
gunzip file.txt.gz # 解压文件
bzip2/bunzip2 - BZIP2压缩和解压
bzip2 file.txt # 压缩文件
bunzip2 file.txt.bz2 # 解压文件
总结
Linux命令是后端开发人员必备的基础技能,掌握这些常用命令能够大大提高工作效率。通过文件和目录操作命令可以管理系统文件,文本处理命令可以处理日志和配置文件,系统信息命令可以监控系统状态,网络命令可以排查网络问题,权限管理命令可以确保系统安全,进程管理命令可以控制系统进程,搜索命令可以快速定位文件,压缩命令可以节省存储空间。熟练使用这些命令是Linux系统管理和开发工作的基础。
思维导图
Interview AiBoxInterview AiBox — 面试搭档
不只是准备,更是实时陪练
Interview AiBox 在面试过程中提供实时屏幕提示、AI 模拟面试和智能复盘,让你每一次回答都更有信心。
AI 助读
一键发送到常用 AI
Linux常用命令按功能可分为八大类:文件和目录操作(ls, cd, cp, mv, rm)、文本处理(cat, grep, sed, awk)、系统信息管理(uname, top, df, free)、网络相关(ping, ssh, curl, netstat)、权限管理(chmod, chown, sudo)、进程管理(ps, kill, jobs)、搜索查找(find, locate, which)和压缩解压(tar, zip, gzip)。掌握这些命令是后端开发的基础技能,能够有效进行系统管理、文件处理、问题排查和日常开发工作。
智能总结
深度解读
考点定位
思路启发
相关题目
请介绍C++11中引入的主要新特性
C++11引入了众多现代化特性,包括:1)自动类型推导(auto)简化了复杂类型声明;2)基于范围的for循环提高了遍历容器的便利性;3)智能指针(unique_ptr, shared_ptr, weak_ptr)提供了更安全的内存管理;4)Lambda表达式支持匿名函数定义;5)右值引用和移动语义优化了资源转移性能;6)nullptr作为明确的空指针表示;7)强类型枚举(enum class)避免命名空间污染;8)constexpr支持编译时计算;9)统一初始化语法({})适用于各种类型;10)using关键字提供更清晰的类型别名定义;11)可变参数模板增强了模板灵活性;12)线程支持库实现标准多线程编程;13)新容器(array, forward_list, unordered容器)和算法丰富了标准库功能。这些特性使C++更现代化、安全且易用。
设计一个社交朋友圈系统,支持用户发布动态、好友查看动态等功能,请设计其数据结构和系统架构
朋友圈系统设计涉及数据结构和系统架构两个方面。数据结构包括用户表、好友关系表、动态表、媒体表、点赞表和评论表等。系统架构采用分层设计,包括客户端层、接入层、业务逻辑层、数据存储层和基础设施层。核心功能包括发布动态、获取好友动态、点赞评论等。性能优化方面考虑了缓存策略、数据库优化和服务优化。系统设计还考虑了功能扩展和技术扩展,以适应未来的发展需求。
请列举并解释进程间通信的方式。
进程间通信(IPC)是操作系统提供的重要机制,主要方式包括:管道(匿名/命名)、消息队列、共享内存、信号量、信号、套接字和文件映射。管道适用于父子进程通信;消息队列支持异步通信;共享内存是最快的IPC方式;信号量用于进程同步;信号适合异步通知;套接字最通用,可用于网络通信;文件映射支持数据持久化。不同方式各有优缺点,应根据具体场景选择。
请解释C++中虚函数的实现原理
C++中虚函数的实现原理主要依赖于虚函数表(vtable)和虚指针(vptr)。每个包含虚函数的类都有一个虚函数表,存储该类虚函数的地址;每个对象实例包含一个虚指针,指向其类的虚函数表。当通过基类指针或引用调用虚函数时,系统会通过虚指针找到虚函数表,再从表中获取实际要调用的函数地址,从而实现运行时多态。这种机制虽然有一定的性能开销,但为C++提供了强大的面向对象多态能力。
select,poll,epoll有什么区别
select、poll和epoll是三种I/O多路复用机制。select是最早的,有fd数量限制(1024),性能O(n);poll改进了select,移除了fd数量限制,但仍是O(n)性能;epoll是Linux特有的,性能O(1),支持大量连接,有水平触发和边缘触发两种模式。epoll通过回调机制和mmap内存共享实现了高效的事件通知,适合高并发场景,但不跨平台。select和poll适合少量连接或需要跨平台的场景。