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)。掌握这些命令是后端开发的基础技能,能够有效进行系统管理、文件处理、问题排查和日常开发工作。
智能总结
深度解读
考点定位
思路启发
相关题目
在软件开发中,如何设计有效的测试用例?
设计有效测试用例需遵循明确性、完整性、独立性等原则,运用等价类划分、边界值分析等黑盒测试技术和语句覆盖、分支覆盖等白盒测试技术。针对单元测试、集成测试、系统测试和验收测试等不同级别,采用相应的设计策略和方法。测试用例应包含完整的文档结构,使用专业工具进行管理,并基于风险分析确定优先级。最佳实践包括测试用例复用、自动化测试和定期评审,避免过度依赖脚本、忽视负面测试等常见误区。
请详细说明ArrayList和LinkedList的区别,包括它们的底层实现、性能特点和使用场景。
ArrayList和LinkedList是Java中两种常用的List实现,它们在底层实现、性能特点和使用场景上有显著差异。ArrayList基于动态数组实现,具有O(1)的随机访问性能,但插入/删除操作需要移动元素,时间复杂度为O(n);LinkedList基于双向链表实现,随机访问性能为O(n),但插入/删除操作只需修改指针,时间复杂度为O(1)。ArrayList适合读多写少、需要频繁随机访问的场景;LinkedList适合写多读少、需要频繁在头部或中间插入/删除的场景,同时它还实现了Deque接口,可作为队列或双端队列使用。在实际开发中,ArrayList的使用频率更高,因为大多数场景下随机访问的需求更常见,且内存效率更高。
HashMap的底层原理是什么?它是线程安全的吗?在多线程环境下会遇到什么问题?如果要保证线程安全应该使用什么?ConcurrentHashMap是怎么保证线程安全的?请详细说明。
HashMap基于数组+链表/红黑树实现,通过哈希函数计算元素位置,使用链地址法解决哈希冲突。HashMap是非线程安全的,多线程环境下可能导致死循环、数据覆盖等问题。线程安全的替代方案包括Hashtable、Collections.synchronizedMap()和ConcurrentHashMap。ConcurrentHashMap在JDK 1.7采用分段锁实现,JDK 1.8改用CAS+synchronized,锁粒度更细,并发性能更好。
Java中的集合框架(Collection & Map)有哪些主要接口和实现类?
Java集合框架主要分为Collection和Map两大体系。Collection体系包括List(有序可重复,如ArrayList、LinkedList)、Set(无序不可重复,如HashSet、TreeSet)和Queue(队列,如PriorityQueue、ArrayDeque)。Map体系存储键值对,主要实现类有HashMap、LinkedHashMap、TreeMap、Hashtable和ConcurrentHashMap等。不同集合类在底层结构、有序性、线程安全、时间复杂度等方面有不同特性,应根据具体需求选择合适的实现类。
请详细介绍一下你参与过的项目,包括项目背景、你的职责以及使用的技术栈。
面试者需要清晰介绍参与过的项目,包括项目背景、个人职责、使用的技术栈、遇到的挑战及解决方案,以及项目成果和个人收获。重点突出自己在项目中的具体贡献、技术选型的思考过程、解决问题的思路以及从中获得的成长。回答应结构清晰,重点突出,体现技术深度和解决问题的能力。