本文将深入解析Linux系统中常用的命令和操作,涵盖文件管理、权限控制、系统监控、打包解压等多个关键领域,帮助在校大学生和初级开发者快速掌握Linux编程的核心技能。
常用命令详解
Linux系统以其强大的命令行工具而著称,这些命令是日常开发和系统管理工作的基石。掌握这些命令不仅能够提高工作效率,还能帮助你更好地理解和控制Linux系统。以下是几个重要的命令及其用法。
文件系统基础
Linux文件系统采用树状结构,根目录为/,其他目录和文件都有特定的用途。例如:
- /bin:存放系统和用户常用的命令
- /boot:系统启动文件
- /dev:设备文件
- /etc:配置文件
- /home:普通用户的家目录
- /lib:32位库
- /lib64:64位库
- /media:临时挂载设备
- /mnt:临时挂载点
- /opt:第三方软件安装位置
- /proc:进程和硬件信息
- /root:管理员的家目录
- /sbin:系统管理员命令
- /srv:服务数据
- /var:变量数据
- /sys:内核相关信息
- /tmp:临时文件
- /usr:用户相关设定
基础操作命令
掌握基础操作命令可以让开发者快速熟悉Linux环境。以下是几个常用的命令:
- 重启系统
shutdown -h now:立刻关机poweroff:关闭系统-
shutdown -h 2:两分钟后关机 -
关闭系统
shutdown -r now:立刻重启reboot:重启系统-
shutdown -r 2:两分钟后重启 -
切换用户
su yao:切换为用户"yao",输入后回车需要输入该用户的密码exit:退出当前用户
目录与文件操作
目录和文件操作是Linux命令中最常用的部分之一。以下是一些关键命令:
- 切换目录
cd /:切换到根目录cd /bin:切换到根目录下的bin目录cd ../:切换到上一级目录cd ..:切换到上一级目录cd ~:切换到home目录cd -:切换到上次访问的目录cd xx:切换到本目录下的名为xx的文件目录,如果目录不存在报错-
cd /xxx/xx/x:可以输入完整的路径,直接切换到目标目录,输入过程中可以使用tab键快速补全 -
查看目录
ls:查看当前目录下的所有目录和文件ls -a:查看当前目录下的所有目录和文件(包括隐藏的文件)ls -l:列表查看当前目录下的所有目录和文件(显示更多信息),与命令"ll"效果一样-
ls /bin:查看指定目录下的所有目录和文件 -
创建目录
mkdir tools:在当前目录下创建一个名为tools的目录-
mkdir /bin/tools:在指定目录下创建一个名为tools的目录 -
删除文件
rm 文件名:删除当前目录下的文件rm -f 文件名:删除当前目录的的文件(不询问)rm -r 文件夹名:递归删除当前目录下此名的目录rm -rf 文件夹名:递归删除当前目录下此名的目录(不询问)rm -rf *:将当前目录下的所有目录和文件全部删除-
rm -rf /*:将根目录下的所有文件全部删除【慎用!相当于格式化系统】 -
修改(重命名)目录/文件
mv 当前目录名 新目录名:修改目录名,同样适用与文件操作mv /usr/tmp/tool /opt:将/usr/tmp目录下的tool目录剪切到 /opt目录下面-
mv -r /usr/tmp/tool /opt:递归剪切目录中所有文件和文件夹 -
拷贝目录/文件
cp /usr/tmp/tool /opt:将/usr/tmp目录下的tool目录复制到 /opt目录下面-
cp -r /usr/tmp/tool /opt:递归复制目录中所有文件和文件夹 -
搜索/文件
-
find /bin -name 'a*':查找/bin目录下的所有以a开头的文件或者目录 -
查看当前目录
pwd:显示当前位置路径
文件操作命令
文件操作命令是Linux系统中不可或缺的一部分,以下是一些常用的文件操作命令:
- 新增文件
-
touch a.txt:在当前目录下创建名为a的txt文件(文件不存在),如果文件存在,将文件时间属性修改为当前系统时间 -
编辑文件
vi 文件名:打开需要编辑的文件- 命令模式:
- 刚进入文件就是命令模式,通过方向键控制光标位置
- 使用命令"dd"删除当前整行
- 使用命令"/字段"进行查找
- 按"i"在光标所在字符前开始插入
- 按"a"在光标所在字符后开始插入
- 按"o"在光标所在行的下面另起一新行插入
- 按":"进入底行模式
- 插入模式:
- 此时可以对文件内容进行编辑,左下角会显示 "-- 插入 --"
- 按"ESC"进入底行模式
- 底行模式:
- 退出编辑:
:q - 强制退出:
:q! - 保存并退出:
:wq
- 退出编辑:
操作步骤示例: 1. 保存文件:按"ESC" -> 输入":" -> 输入"wq",回车 2. 取消操作:按"ESC" -> 输入":" -> 输入"q!",回车
补充:
- vim +10 filename.txt:打开文件并跳到第10行
- vim -R /etc/passwd:以只读模式打开文件
- 查看文件内容
-
cat:用于连接文件并打印到标准输出设备上- 语法格式:
cat [-AbeEnstTuv] [--help] [--version] fileName - 参数说明:
-n或--number:由 1 开始对所有输出的行数编号-b或--number-nonblank:和-n相似,只不过对于空白行不编号-s或--squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行-v或--show-nonprinting:使用^和M-符号,除了LF和TAB之外-E或--show-ends:在每行结束处显示$-T或--show-tabs:将TAB字符显示为^I-A:等价于-vET-e:等价于"-vE"选项-t:等价于"-vT"选项
- 语法格式:
-
cat a.txt:查看文件最后一屏内容 -
cat -n textfile1 > textfile2:把textfile1的文档内容加上行号后输入textfile2这个文档里 -
less 命令
less与more类似,less可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页- 语法:
less [参数] 文件 -
参数说明:
-b <缓冲区大小>:设置缓冲区的大小-e:当文件显示结束后,自动离开-f:强迫打开特殊文件,例如外围设备代号、目录和二进制文件-g:只标志最后搜索的关键词-i:忽略搜索时的大小写-m:显示类似more命令的百分比-N:显示每行的行号-o <文件名>:将less输出的内容在指定文件中保存起来-Q:不使用警告音-s:显示连续空行为一行-S:行过长时间将超出部分舍弃-x <数字>:将"tab"键显示为规定的数字空格/字符串:向下搜索"字符串"的功能?字符串:向上搜索"字符串"的功能n:重复前一个搜索(与/或?有关)N:反向重复前一个搜索(与/或?有关)b:向上翻一页d:向后翻半页h:显示帮助界面Q:退出less命令u:向前滚动半页y:向前滚动一行- 空格键:滚动一页
- 回车键:滚动一行
[pagedown]:向下翻动一页[pageup]:向上翻动一页
-
less a.txt:PgUp 向上翻页,PgDn 向下翻页,"q"退出查看 -
ps -ef | less:ps查看进程信息并通过less分页显示 -
more 命令
more命令类似cat,不过会以一页一页的形式显示,更方便使用者逐页阅读- 语法:
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] -
参数:
-num:一次显示的行数-d:提示使用者,在画面下方显示[Press space to continue, 'q' to quit.],如果使用者按错键,则会显示[Press 'h' for instructions.]而不是 '哔' 声-l:取消遇见特殊字元^L(送纸字元)时会暂停的功能-f:计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)-p:不以卷动的方式显示每一页,而是先清除萤幕后再显示内容-c:跟-p相似,不同的是先显示内容再清除其他旧资料-s:当遇到有连续两行以上的空白行,就代换为一行的空白行-u:不显示下引号(根据环境变数TERM指定的 terminal 而有所不同)+/pattern:在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示+num:从第num行开始显示fileNames:欲显示内容的文档,可为复数个数
-
more a.txt:显示百分比,回车查看下一行,空格查看下一页,"q"退出查看 -
head 命令
head命令可用于查看文件的开头部分的内容,有一个常用的参数-n用于显示行数,默认为 10,即显示 10 行的内容- 命令格式:
head [参数] [文件] -
参数:
-q:隐藏文件名-v:显示文件名-c<数目>:显示的字节数-n<行数>:显示的行数
-
tail 命令
tail命令可用于查看文件的内容,有一个常用的参数-f常用于查阅正在改变的日志文件tail -f filename:会把filename文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要filename更新就可以看到最新的文件内容- 命令格式:
tail [参数] [文件] -
参数:
-f:循环读取-q:不显示处理信息-v:显示详细的处理信息-c<数目>:显示的字节数-n<行数>:显示文件的尾部n行内容--pid=PID:与-f合用,表示在进程IDPID死掉之后结束-q, --quiet, --silent:从不输出给出文件名的首部-s, --sleep-interval=S:与-f合用,表示在每次反复的间隔休眠S秒
-
tail -100 a.txt:查看文件的后100行,"Ctrl+C"退出查看 -
stat 命令
stat命令用于显示 inode 内容- 语法:
stat [文件或目录] - 示例:
stat testfile:查看testfile文件的 inode 内容
文件权限管理
文件权限管理是Linux系统中非常重要的一部分,它决定了谁可以访问、修改或执行文件。了解文件权限不仅可以帮助你保护系统安全,还能提高开发效率。
文件权限说明
文件权限简介:
- 'r' 代表可读(4)
- 'w' 代表可写(2)
- 'x' 代表执行权限(1)
- 括号内代表"8421法"
文件权限信息示例:
- drwxrwxrwx:表示文件夹,所有者、同组用户和其他用户的权限均为读、写和执行
- drwxr-xr--:表示文件夹,所有者有读、写和执行权限,同组用户有读和执行权限,其他用户只有读权限
共显示了七列信息,从左至右依次为:权限、文件数、归属用户、归属群组、文件大小、创建日期、文件名称
- d:第一位表示文件类型
- d:文件夹
- -:普通文件
- l:链接
- b:块设备文件
- p:管道文件
- c:字符设备文件
- s:套接口文件
rwx:第2-4位表示这个文件的属主拥有的权限。r是读、w是写、x是执行r-x:第5-7位表示和这个文件属主所在同一个组的用户所具有的权限r-x:第8-10位表示其他用户所具有的权限- 从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限
文件权限命令:chmod
chmod 命令用于控制用户对文件的权限,语法为 chmod [-cfvR] [--help] [--version] mode file...
参数说明:
- mode:权限设定字串,用于指定文件或目录的权限
- file:文件或目录,可以是多个
权限设定字串示例:
- 444 r--r--r--:所有者、同组用户和其他用户均无写权限
- 600 drw-------:所有者有读和写权限,同组用户和其他用户无权限
- 644 drw-r--r--:所有者有读和写权限,同组用户有读权限,其他用户有读权限
- 666 drw-rw-rw-:所有者、同组用户和其他用户均有读和写权限
- 700 drwx------:所有者有读、写和执行权限,同组用户和其他用户无权限
- 744 drwxr--r--:所有者有读、写和执行权限,同组用户有读和执行权限,其他用户有读权限
- 755 drwxr-xr-x:所有者有读、写和执行权限,同组用户和其他用户有读和执行权限
- 777 drwxrwxrwx:所有者、同组用户和其他用户均有读、写和执行权限
权限控制最佳实践
在实际开发和系统管理工作中,我们需要遵循一些最佳实践来确保文件和目录的安全性:
- 最小权限原则:确保只有必要的用户和组拥有文件的访问权限
- 定期检查权限:使用 ls -l 或 stat 命令定期检查文件和目录的权限
- 使用符号模式:更直观地设置权限,例如 chmod u+x filename 为所有者添加执行权限
- 使用八进制模式:适用于需要精确设置权限的场景,例如 chmod 755 filename
打包与解压
在Linux系统中,打包与解压是常见的操作,用于备份和传输文件。掌握这些命令可以帮助你更高效地处理文件。
打包与解压命令
- 打包文件
tar -cvf archive.tar files...:将文件打包为archive.tar-
tar -cvf archive.tar -C /path/to/dir/:将目录中的文件打包 -
解压文件
tar -xvf archive.tar:解压archive.tar文件-
tar -xvf archive.tar -C /path/to/dir/:解压到指定目录 -
压缩与解压命令
gzip filename:压缩文件gunzip filename.gz:解压filename.gz文件tar -cvzf archive.tar.gz files...:将文件打包并压缩为archive.tar.gztar -xvzf archive.tar.gz:解压archive.tar.gz文件unzip filename.zip:解压filename.zip文件zip filename.zip files...:将文件压缩为filename.zip
打包与解压的最佳实践
- 备份文件:在打包文件之前,确保备份文件的完整性和正确性
- 解压文件:在解压文件之前,确保目标目录有足够的空间
- 使用压缩:对于大型文件或目录,使用压缩可以节省存储空间和传输时间
- 验证压缩包:使用
tar -tvf或unzip -t命令验证压缩包是否完整
其他常用命令
除了上述命令外,还有一些常用的命令可以帮助你更好地管理Linux系统。
常用命令详解
- find 命令
find命令用于查询目标文件- 语法格式:
find [路径][表达式] - 参数说明:
路径:默认为当前目录,也可以指定其他路径表达式:用于描述要查找的文件或目录
示例:
- find /bin -name 'a*':查找 /bin 目录下的所有以 a 开头的文件或者目录
- whereis 命令
whereis命令用于查询目标文件- 语法格式:
whereis [文件名] - 参数说明:
文件名:要查询的文件名
示例:
- whereis grep:查询 grep 命令的位置
- which 命令
which命令用于在环境变量$PATH设置的目录里查找符合条件的文件- 语法格式:
which [文件名] - 参数说明:
文件名:要查找的文件名
示例:
- which grep:查找 grep 命令的位置
- sudo 命令
sudo命令用于以系统管理者的身份执行指令- 语法格式:
sudo [命令] - 参数说明:
命令:要执行的命令
示例:
- sudo apt update:以管理员身份更新软件包列表
- grep 命令
grep命令用于查找文件里内容- 语法格式:
grep [参数] [模式] [文件] - 参数说明:
参数:用于指定搜索方式模式:要搜索的文本文件:要搜索的文件
示例:
- grep 'error' /var/log/syslog:在 /var/log/syslog 文件中查找 error 关键字
- service 命令
service命令用于管理服务- 语法格式:
service [服务名] [操作] - 参数说明:
服务名:要管理的服务操作:用于指定服务的操作,如start、stop、restart等
示例:
- service apache2 start:启动 Apache 服务
- free 命令
free命令用于显示系统当前内存的使用情况- 语法格式:
free [参数] - 参数说明:
参数:用于指定显示方式,如-h用于人性化显示
示例:
- free -h:以人性化方式显示内存使用情况
- top 命令
top命令用于实时系统监控- 语法格式:
top [参数] - 参数说明:
参数:用于指定监控方式,如-d用于指定刷新时间
示例:
- top -d 5:每5秒刷新一次系统监控信息
- mount 命令
mount命令用于挂载Linux系统外的文件- 语法格式:
mount [参数] [设备] [挂载点] - 参数说明:
参数:用于指定挂载方式,如-t用于指定文件系统类型设备:要挂载的设备挂载点:挂载到的目标目录
示例:
- mount /dev/sdb1 /mnt/data:将 /dev/sdb1 挂载到 /mnt/data 目录
-
uname 命令
uname命令用于显示系统信息- 语法格式:
uname [参数] - 参数说明:
参数:用于指定要显示的信息,如-a用于显示所有信息
示例: -
uname -a:显示所有系统信息 -
yum 命令
yum命令用于安装、更新和删除软件包- 语法格式:
yum [参数] [软件包名] - 参数说明:
参数:用于指定操作,如install、update、remove等软件包名:要安装、更新或删除的软件包名
示例: -
yum install httpd:安装 Apache 服务 -
rpm 命令
rpm命令用于安装、更新和删除软件包- 语法格式:
rpm [参数] [软件包名] - 参数说明:
参数:用于指定操作,如install、update、remove等软件包名:要安装、更新或删除的软件包名
示例: -
rpm -ivh httpd-2.4.6-1.el7.x86_64.rpm:安装httpd-2.4.6-1.el7.x86_64.rpm软件包 -
date 命令
date命令用于显示和设置系统时间- 语法格式:
date [参数] - 参数说明:
参数:用于指定显示方式,如+用于自定义格式
示例: -
date +"%Y-%m-%d %H:%M:%S":显示系统时间 -
ftp 命令
ftp命令用于文件传输- 语法格式:
ftp [参数] [主机名] - 参数说明:
参数:用于指定连接方式,如-n用于禁用自动登录主机名:要连接的主机名
示例: -
ftp -n example.com:连接example.com主机,禁用自动登录 -
scp 命令
scp命令用于安全复制文件- 语法格式:
scp [参数] [源文件] [目标文件] - 参数说明:
参数:用于指定复制方式,如-r用于递归复制源文件:要复制的文件目标文件:复制到的目标文件
示例: -
scp -r /home/user/file.txt user@example.com:/home/user/:将/home/user/file.txt文件复制到user@example.com:/home/user/目录
系统管理命令
系统管理命令是Linux系统中不可或缺的一部分,以下是一些常用的系统管理命令:
- 防火墙操作
iptables:用于配置防火墙规则-
ufw:用于配置防火墙规则,简化了操作 -
修改主机名
-
hostnamectl set-hostname new-hostname:修改主机名 -
查看网络
ifconfig:查看网络信息-
ip:查看网络信息,替代ifconfig命令 -
修改IP
nmcli:用于修改网络配置ip addr add:添加IP地址-
ip addr del:删除IP地址 -
配置映射
hostname:用于配置主机名-
hosts:用于配置主机名与IP地址的映射 -
查看进程
ps:用于查看进程信息- 语法格式:
ps [参数] - 参数说明:
参数:用于指定查看方式,如-ef用于显示所有进程-aux用于显示所有进程的详细信息
示例:
- ps -ef:显示所有进程信息
- ps -aux:显示所有进程的详细信息
- 结束进程
kill:用于结束进程- 语法格式:
kill [参数] [进程ID] - 参数说明:
参数:用于指定操作,如-9用于强制结束进程进程ID:要结束的进程ID
示例:
- kill 1234:结束进程ID为1234的进程
- kill -9 1234:强制结束进程ID为1234的进程
- 网络状态
netstat:用于显示网络状态- 语法格式:
netstat [参数] - 参数说明:
参数:用于指定查看方式,如-t用于显示TCP连接-u用于显示UDP连接-n用于以数字形式显示地址和端口-p用于显示进程信息
示例:
- netstat -t:显示TCP连接
- netstat -u:显示UDP连接
- netstat -n:以数字形式显示地址和端口
- netstat -p:显示进程信息
- ping 命令
ping命令用于测试网络连接- 语法格式:
ping [参数] [主机名] - 参数说明:
参数:用于指定测试方式,如-c用于指定测试次数主机名:要测试的主机名
示例:
- ping -c 4 example.com:向 example.com 主机发送4次测试
-
远程主机
ssh:用于连接远程主机- 语法格式:
ssh [参数] [用户名]@[主机名] - 参数说明:
参数:用于指定连接方式,如-p用于指定端口号用户名:要连接的远程主机的用户名主机名:要连接的远程主机的主机名
示例: -
ssh user@example.com:连接example.com主机,用户名为user-ssh -p 2222 user@example.com:连接example.com主机,用户名为user,端口号为2222
磁盘管理
磁盘管理是Linux系统中不可或缺的一部分,以下是一些常用的磁盘管理命令:
- 查看磁盘空间
df:用于查看磁盘空间- 语法格式:
df [参数] - 参数说明:
参数:用于指定查看方式,如-h用于人性化显示-a用于显示所有文件系统
示例:
- df -h:以人性化方式查看磁盘空间
- df -a:显示所有文件系统的磁盘空间
- 查看磁盘使用情况
du:用于查看磁盘使用情况- 语法格式:
du [参数] [文件或目录] - 参数说明:
参数:用于指定查看方式,如-s用于显示总大小-h用于人性化显示-a用于显示所有文件和目录的大小
示例:
- du -s /home:显示 /home 目录的总大小
- du -h /home:以人性化方式查看 /home 目录的大小
- du -a /home:显示 /home 目录下所有文件和目录的大小
- 查看文件系统
lsblk:用于查看块设备和文件系统fdisk:用于管理磁盘分区mkfs:用于创建文件系统mount:用于挂载文件系统-
umount:用于卸载文件系统 -
磁盘管理最佳实践
- 定期检查磁盘空间:使用
df和du命令定期检查磁盘空间 - 合理管理文件系统:根据实际需求合理分配磁盘空间,避免磁盘空间不足
- 使用磁盘分区工具:如
fdisk和parted,合理管理磁盘分区 - 备份重要数据:使用
tar、rsync等命令定期备份重要数据 - 监控磁盘使用情况:使用
dstat、iostat等命令监控磁盘使用情况
工具大全
Linux系统中有很多工具可以帮助你更高效地进行开发和系统管理,以下是一些常用的工具:
- 日志信息的工具
journalctl:用于查看系统日志dmesg:用于查看内核日志
示例:
- journalctl -b:查看当前系统的日志
- dmesg:查看内核日志
- 其他常用工具
htop:用于查看进程信息,比top更友好lsof:用于查看打开的文件和进程strace:用于跟踪进程的系统调用ltrace:用于跟踪进程的库调用tcpdump:用于捕获网络数据包top:用于实时查看系统资源使用情况htop:用于查看进程信息,比top更友好iostat:用于查看磁盘和CPU使用情况vmstat:用于查看虚拟内存使用情况free:用于查看内存使用情况df:用于查看磁盘使用情况du:用于查看磁盘使用情况lsblk:用于查看块设备和文件系统fdisk:用于管理磁盘分区mkfs:用于创建文件系统mount:用于挂载文件系统umount:用于卸载文件系统hostname:用于查看和设置主机名hostnamectl:用于查看和设置主机名ip:用于查看和设置网络信息nmcli:用于查看和设置网络信息ssh:用于连接远程主机scp:用于安全复制文件rsync:用于同步文件和目录find:用于查找文件和目录whereis:用于查找文件which:用于查找文件grep:用于查找文件内容cat:用于查看文件内容less:用于分页查看文件内容more:用于分页查看文件内容head:用于查看文件开头内容tail:用于查看文件结尾内容stat:用于查看文件详细信息ln:用于创建链接chmod:用于设置文件权限chown:用于设置文件所有者chgrp:用于设置文件所属组chmod:用于设置文件权限chown:用于设置文件所有者chgrp:用于设置文件所属组tar:用于打包和解压文件gzip:用于压缩文件gunzip:用于解压文件zip:用于压缩文件unzip:用于解压文件iptables:用于配置防火墙规则ufw:用于配置防火墙规则,简化了操作hostname:用于查看和设置主机名hostnamectl:用于查看和设置主机名ip:用于查看和设置网络信息nmcli:用于查看和设置网络信息ssh:用于连接远程主机scp:用于安全复制文件rsync:用于同步文件和