一、Linux文档目录结构
在Linux系统中,目录、字符设备、套接字、硬盘、光驱、打印机等都被抽象成文件形式,“Linux系统中一切都是文件”。Linux系统中的一切文件都是从"根"目录(/)开始的,并按照文件系统层次标准(FHS)采用倒树状结构来存放文件,以及定义了常见目录的用途。
目录名称 | 应放置文件的内容 |
---|---|
/root | 系统管理员的主目录。 |
/bin | binary的缩写,这个目录存放着最经常使用的命令。 |
/boot | 存放的是启动linux时使用的一些核心文件,包括一些连接文件和镜像文件,自己的安装别放这里。 |
/dev | 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,类似于windows的设备管理器,把所有的硬件用文件的形式存储。 |
/etc | 系统配置文件存放的目录。 |
/home | 存放普通用户的主目录,每个用户都有一个自己的目录,目录名是以用户的账号命名的。 |
/usr | usr(注意不是 user),全称为 Unix Software Resource(Unix操作系统软件资源) 存放的是用户的应用程序和文件,类似于windows的program files目录。 |
/usr/local | 另一个给主机额外安装软件的目录,一般是通过编译源码方式安装的程序,用户自行安装的软件。 |
/media | linux会自动识别一些设备,u盘,光驱等,会把识别的设备挂载到这个目录下。 |
/mnt | 为了让用户临时挂载别的文件系统的,将外部的存储挂载在/mnt/上。 |
/opt | 第三方应用软件(可选软件),给主机额外安装软件所摆放的目录。 |
/var | 用于存储动态数据,将经常修改的目录放在这个目录下,包括各种日志文件。 |
/var/spool/cron/ | 系统的定时任务队列保存位置。 |
/sbin | 存放的是系统管理员使用的系统管理程序,只有root权限才能执行。 |
/lib | 系统开机所需要最基本的动态连接共享库,以及/bin与/sbin下面的命令要调用的函数。 |
/lost+found | 一般情况下是空的,系统非法关机后,这里就存放了一些文件。 |
/proc | 虚拟的目录,是系统内存的映射,访问这个目录来获取系统信息。 |
/srv | service缩写,该目录存放一些服务启动之后需要提取的数据。 |
/sys | 该目录下安装了2.6内核中新出现的一个文件系统,该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。 |
/tmp | 用来存放一些临时文件的。 |
linux中/usr和/opt的区别
linux中/opt目录用来安装附加软件包,是用户级的程序目录,可以理解为D:/Software。
安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。opt有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接rm -rf掉即可。在硬盘容量不够时,也可将/opt单独挂载到其他磁盘上使用。linux中/usr为系统级的目录,可以理解为C:/Windows/。
linux中/usr下的/local目录为用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下
在Linux系统中另外还有一个重要的概念—路径。路径指的是如何定位到某个文件,分为绝对路径与相对路径。绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。
二、常用系统工作命令
1. echo 用于在终端输出字符串或变量提取后的值
格式为:echo [选项] [字符串 | $变量]
选项:
参数 | 含义 |
---|---|
-n | 不输出结尾的换行符 |
-e “\a” | 发出警告音 |
-e “\b” | 删除前面的一个字符 |
-e “\c” | 结尾不加换行符 |
-e “\f” | 换行,光标扔停留在原来的坐标位置 |
-e “\n” | 换行,光标移至行首 |
-e “\r” | 光标移至行首,但不换行 |
-E | 禁止反斜杠转移,与-e参数功能相反 |
--help | 查看帮助信息 |
实例:
输出一段字符串
[root@linuxprobe ~]# echo Linuxprobe.Com
Linuxprobe.Com
输出变量提取后的值:
[root@linuxcool ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
对内容进行转义,不让$符号的提取变量值功能生效:
[root@linuxcool ~]# echo \$PATH
$PATH
输出信息中删除某个字符,注意看数字3消失了:
[root@linuxcool ~]# echo -e "123\b456"
12456
结合输出重定向符,将字符串信息导入文件中:
[root@linuxcool ~]# echo "It is a test" > linuxcool
2. date 用于显示及设置系统的时间或日期
格式为:date [选项] [+指定的格式]
date 命令中的参数以及作用
参数 | 作用 |
---|---|
%Y | 年 |
%t | 跳格[Tab 键] |
%H | 小时(00~23) |
%I | 小时(00~12) |
%d | 一个月的第几天(01~31) |
%M | 分钟(00~59) |
%S | 秒(00~59) |
%j | 今年中的第几天 |
实例:
[root@linuxprobe ~]# date
[root@linuxprobe ~]# Sun Mar 13 18:01:49 2022
[root@linuxprobe ~]# date +"%Y-%m-%d %H:%M:%S" #当前时间
格式化显示当前时间
[root@linuxprobe ~]# date +"%Y-%m-%d %H:%M:%S"
明天的时间
[root@linuxprobe ~]# date -d next-day +"%Y-%m-%d"
3. reboot 用于重启系统
格式为:reboot
实例:
[root@linuxprobe ~]# reboot
[root@linuxprobe ~]# shutdown -r now #也用于重启
4. poweroff 关机并关闭电源
格式为:poweroff
实例:
[root@linuxprobe ~]# poweroff
5. wget 用于在终端中下载网络文件
格式为:wget [选项] 下载地址
选项:
选项 | 含义 |
---|---|
-V | 显示wget的版本后退出 |
-h | 打印语法帮助 |
-b | 启动后转入后台 |
-P | 指定目录 下载地址 |
-c | 继续执行上次终端的任务 |
-O | 下载文件保存为别的文件名 |
实例:
指定目录下载
[root@linuxprobe ~]# wget -P /etc/software http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
下载并以不同的文件名保存
[root@linuxcool ~]# wget -O test.zip http://www.Linuxcool.com
使用wget断点续传
[root@linuxcool ~]# wget -c http://www.linuxcool.com/test.zip
6. ps 用于查看系统中的进程状态
格式为:ps [选项]
选项:
参数 | 含义 |
---|---|
-a | 显示所有终端机下执行的程序,除了阶段作业领导者之外 |
a | 显示现行终端机下的所有程序,包括其他用户的程序 |
-A | 显示所有程序 |
-c | 显示CLS和PRI栏位 |
c | 列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示 |
-d | 显示所有程序,但不包括阶段作业领导者的程序 |
-e | 此选项的效果和指定"A"选项相同 |
e | 列出程序时,显示每个程序所使用的环境变量 |
-f | 显示UID,PPIP,C与STIME栏位 |
g | 此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定 |
-G <群组识别码> | 列出属于该群组的程序的状况,也可使用群组名称来指定 |
h | 不显示标题列 |
-H | 显示树状结构,表示程序间的相互关系 |
-j或j | 采用工作控制的格式显示程序状况 |
-l或l | 采用详细的格式来显示程序状况 |
L | 列出栏位的相关信息 |
-m或m | 显示所有的执行绪 |
n | 以数字来表示USER和WCHAN栏位 |
-N | 显示所有的程序,除了执行ps指令终端机下的程序之外 |
-p <程序识别码> | 指定程序识别码,并列出该程序的状况 |
r | 只列出现行终端机正在执行中的程序 |
-s <阶段作业> | 指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况 |
s | 采用程序信号的格式显示程序状况 |
S | 列出程序时,包括已中断的子程序资料 |
-t <终端机编号> | 指定终端机编号,并列出属于该终端机的程序的状况 |
-T | 显示现行终端机下的所有程序 |
-u <用户识别码> | 此选项的效果和指定"-U"选项相同 |
u | 以用户为主的格式来显示程序状况 |
-U <用户识别码> | 列出属于该用户的程序的状况,也可使用用户名称来指定 |
U <用户名称> | 列出属于该用户的程序的状况 |
v | 采用虚拟内存的格式显示程序状况 |
-V或V | 显示版本信息 |
-w或w | 采用宽阔的格式来显示程序状况 |
x | 显示所有程序,不以终端机来区分 |
-y | 配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 |
--cols <每列字符数> | 设置每列的最大字符数 |
--headers | 重复显示标题列 |
--help | 在线帮助 |
--info | 显示排错信息 |
--lines <显示列数> | 设置显示画面的列数 |
实例:
把所有进程显示出来:
[root@linuxcool ~]# ps -aux
[root@linuxcool ~]# ps -A
把所有进程显示出来,并输出到ps.txt文件:
[root@linuxcool ~]# ps -aux > ps.txt
查找特定进程信息:
[root@linuxcool ~]# ps -ef | grep ssh
root 1303 1 0 Apr17 ? 00:00:00 /usr/sbin/sshd
root 3260 3087 0 Apr17 ? 00:00:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME\_SHELL\_SESSION_MODE=classic gnome-session --session gnome-classic"
root 24174 19508 0 11:39 pts/0 00:00:00 grep --color=auto ssh
#每列含义
UID 启动进程的用户
PID 进程的进程号
PPID 父进程进程号
C cpu使用率
STIME 进程启动时的系统时间
TTY 进程启动时终端设备
TIME 运行进程需要的累积CPU时间
CMD 启动程序名称或命令
[root@linuxcool ~]# ps -aux | grep ssh
root 1303 0.0 0.0 82468 1204 ? Ss Apr17 0:00 /usr/sbin/sshd
root 3260 0.0 0.0 52864 572 ? Ss Apr17 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME\_SHELL\_SESSION_MODE=classic gnome-session --session gnome-classic"
root 24188 0.0 0.0 112652 956 pts/0 S+ 11:39 0:00 grep --color=auto ssh
显示指定用户信息:
[root@linuxcool ~]# ps -u root
按 CPU 资源的使用量对进程进行排序:
[root@linuxcool ~]# ps aux | sort -nk 3
按内存资源的使用量对进程进行排序:
[root@linuxcool ~]# ps aux | sort -rnk 4
停止tomcat
[root@linuxcool ~]# ps -ef | grep java |grep -v "grep" |awk '{print $2}' | xargs kill -9
Linux 系统中时刻运行着许多进程,如果能够合理地管理它们,则可以优化系统的性能。在Linux 系统中,有 5 种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自
含义如下所示。
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该状态。
D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。
7. top 实时显示进程动态
格式为:top[选项]
选项:
参数 | 含义 |
---|---|
-d | 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s |
-q | 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行 |
-c | 切换显示模式 |
-s | 安全模式,将交谈式指令取消, 避免潜在的危机 |
-i | 不显示任何闲置 (idle) 或无用 (zombie) 的行程 |
-n | 更新的次数,完成后将会退出 top |
-b | 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内 |
实例:
显示进程信息:
[root@linuxcool ~]# top
显示完整的进程信息:
[root@linuxcool ~]# top -c
以批处理模式显示程序信息:
[root@linuxcool ~]# top -b
以累积模式显示程序信息:
[root@linuxcool ~]# top -s
设置信息更新次数:
[root@linuxcool ~]# top -n 2
top 命令执行结果的前 5 行为系统整体的统计信息,其所代表的含义如下。
第 1 行:系统当前时间、 运行时间、 登录终端数、系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。
第 2 行: 进程总数、 运行中的进程数、睡眠中的进程数、 停止的进程数、 僵死的进程数。
第 3 行:用户占用资源百分比、系统内核占用资源百分比、 改变过优先级的进程资源百分比、 空闲的资源百分比等、 等待输入输出的CPU时间百分比、 硬中断(Hardware IRQ)占用CPU的百分比、 软中断(Software Interrupts)占用CPU的百分比。
第 4 行:物理内存总量、内存使用量、 内存空闲量、作为内核缓存的内存量。
第 5 行:虚拟内存总量、虚拟内存使用量、 虚拟内存空闲量、 已被提前加载的内存量。
详细说明
第 1 行:top - 05:43:27 up 4:52, 2 users, load average: 0.58, 0.41, 0.30
05:43:27 系统当前时间、up 4:52 运行时间、2 users 登录终端数、load average: 0.58, 0.41, 0.30系统负载(三个数值分别为 1 分钟、5 分钟、15 分钟内的平均值,数值越小意味着负载越低)。
第 2 行:Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie
159 total 进程总数、 1 running 运行中的进程数、158 sleeping 睡眠中的进程数、0 stopped 停止的进程数、0 zombie 僵死的进程数。
第 3 行:%Cpu(s): 37.0 us, 3.7 sy, 0.0 ni, 59.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
37.0 us 用户占用资源百分比、3.7 sy 系统内核占用资源百分比、0.0 ni 改变过优先级的进程资源百分比、59.3 id 空闲的资源百分比等、0.0 wa 等待输入输出的CPU时间百分比、0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比、0.0 si 软中断(Software Interrupts)占用CPU的百分比。
第 4 行:KiB Mem: 1530752 total, 1481968 used, 48784 free, 70988 buffers
1530752 total 物理内存总量、1481968 used 内存使用量、48784 free 内存空闲量、**70988 buffers(buff/cache)**作为内核缓存的内存量。
第 5 行:KiB Swap: 3905532 total, 267544 used, 3637988 free. 617312 cached Mem
3905532 total 虚拟内存总量、267544 used 虚拟内存使用量、3637988 free 虚拟内存空闲量、617312 cached Mem 已被提前加载的内存量。
8. pidof 用于查询某个指定服务进程的 PID 值
格式为:pidof [选项] [服务名称]
选项:
参数 | 含义 |
---|---|
-s | 当系统中存在多个同名进程时,仅返回一个进程ID |
-c | 仅返回当前正在运行且具有同一根目录的进程PID |
-x | 返回指定运行脚本的shell进程PID |
-o | 忽略具有指定进程ID的进程 |
实例:
返回crond守护进程的PID:
[root@linuxcool ~]# pidof crond
返回Apache服务器守护进程httpd:
[root@linuxcool ~]# pidof httpd
9. kill 用于终止某个指定 PID 的服务进程
格式为:kill [选项] [进程 PID]
选项:
参数 | 含义 |
---|---|
-l | 列出系统支持的信号 |
-s | 指定向进程发送的信号 |
-a | 处理当前进程时不限制命令名和进程号的对应关系 |
-p | 指定kill命令只打印相关进程的进程号,而不发送任何信号 |
实例:
列出系统支持的信号列表:
[root@linuxcool ~]# kill -l
查找进程,并用kill杀掉 :
[root@linuxcool ~]# ps
PID TTY TIME CMD
1951 pts/0 00:00:00 bash
2446 pts/0 00:00:00 ps
杀掉id为1951的进程:
[root@linuxcool ~]# kill -9 1951
杀死指定用户所有进程
[root@linuxcool ~]# kill -9 $(ps -ef | grep peidalinux)
10. rpm RPM软件包管理器
rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
格式为:rpm [参数] [软件包全名]
选项:
参数 | 含义 |
---|---|
-a | 查询所有的软件包 |
-b或-t | 设置包装套件的完成阶段,并指定套件档的文件名称 |
-c | 只列出组态配置文件,本参数需配合"-l"参数使用 |
-d | 只列出文本文件,本参数需配合"-l"参数使用 |
-e | 卸载软件包 |
-f | 查询文件或命令属于哪个软件包 |
-h | 安装软件包时列出标记 |
-i | 显示软件包的相关信息 |
--install | 安装软件包 |
-l | 显示软件包的文件列表 |
-p | 查询指定的rpm软件包 |
-q | 查询软件包 |
-R | 显示软件包的依赖关系 |
-s | 显示文件状态,本参数需配合"-l"参数使用 |
-U | 升级软件包 |
-v | 显示命令执行过程 |
-vv | 详细显示指令执行过程 |
rpm包命名规则:
httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6 软件发行商sel6是RedHat公司发布,适合RHEL6.x(Red Hat Enterprise Linux)和CentOS6.x下使用
i686 适合的硬件平台
rpm rpm包的扩展名包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意绝对路径
包名:如果操作的是已经安装的软件包,则使用包名即可,系统会生产RPM包的数据库
案例:
直接安装软件包:
[root@linuxcool ~]# rpm -ivh httpd-2.2.15-15.el6.centos.1.i686.rpm
忽略报错,强制安装:
[root@linuxcool ~]# rpm --force -ivh package.rpm
列出所有安装过的包:
[root@linuxcool ~]# rpm -qa
查询rpm包中的文件安装的位置:
[root@linuxcool ~]# rpm -ql ls
卸载rpm包:
[root@linuxcool ~]# rpm -e package.rpm
升级软件包:
[root@linuxcool ~]# rpm -U file.rpm
11. yum 安装(rpm包在线安装)
配置国内yum源:
https://blog.csdn.net/w918589859/article/details/109191537
yum源配置文件保存在/etc/yum repos.d/目录中,文件的扩展名一定是".repo"。也就是说,yum源配置文件只要扩展名是".repo" 就会生效。
[root@linuxcool ~]# ls /etc/yum.repo
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Mledia.repoCentOS-Vault. repo
#默认情况CentOS-Base.repo生效
CentOS-Base.repo配置文件解释
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=Cent0s-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearchk
repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[base]: 容器名称,一定要放在[]中。
name: 容器说明,可以自己随便写。
mirrorlist: 镜像站点,这个可以注释掉。
baseurl: 我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的。如果你觉得慢,则可以改成你喜欢的yum源地址。
enabled: 此容器是否生效,如果不写或写成enabled=1则表示此容器生效,写成enabled=O则表示此容器不生效。
spgcheck: 如果为1则表示RPM的数字证书生效;如果为0则表示RPM的数字证书不生效。gpgkey:数字证书的公钥文件保存位置。不用修改。
格式为:yum [选项] 包名
选项:
参数 | 含义 |
---|---|
-h | 显示帮助信息 |
-y | 对所有的提问都回答"yes" |
-c | 指定配置文件 |
-q | 安静模式 |
-v | 详细模式 |
-t | 检查外部错误 |
-d | 设置调试等级(0-10) |
-e | 设置错误等级(0-10) |
-R | 设置yum处理一个命令的最大等待时间 |
-C | 完全从缓存中运行,而不去下载或者更新任何头文件 |
install | 安装rpm软件包 |
update | 更新rpm软件包 |
check-update | 检查是否有可用的更新rpm软件包 |
remove | 删除指定的rpm软件包 |
search | 检查软件包的信息 |
info | 显示指定的rpm软件包的描述信息和概要信息 |
clean | 清理yum过期的缓存 |
shell | 进入yum的shell提示符 |
resolvedep | 显示rpm软件包的依赖关系 |
localinstall | 安装本地的rpm软件包 |
localupdate | 显示本地rpm软件包进行更新 |
deplist | 显示rpm软件包的所有依赖关系 |
案例:
自动搜索最快镜像插件:
[root@linuxcool ~]# yum install yum-fastestmirror
安装yum图形窗口插件:
[root@linuxcool ~]# yum install yumex
清除缓存目录下的软件包:
[root@linuxcool ~]# yum clean packages
卸载/删除vim-common:
[root@linuxcool ~]# yum remove vim-common.x86_64
列出匹配到"foo*"的可用的数据包:
[root@linuxcool ~]# yum list available 'foo*'
安装yum图形窗口插件:
[root@linuxcool ~]# yum install yumex
查看可能批量安装的列表:
[root@linuxcool ~]# yum grouplist
显示httpd安装包信息:
[root@linuxcool ~]# yum info httpd.x86_64
三、系统状态检测命令
1. ifconfig 用于获取网卡配置与网络状态等信息
格式为:ifconfig [网络设备] [选项]
选项:
参数 | 含义 |
---|---|
add<地址> | 设置网络设备IPv6的IP地址 |
del<地址> | 删除网络设备IPv6的IP地址 |
down | 关闭指定的网络设备 |
up | 启动指定的网络设备 |
IP地址 | 指定网络设备的IP地址 |
实例:
启动关闭指定网卡:
[root@linuxcool ~]# ifconfig eth0 down
[root@linuxcool ~]# ifconfig eth0 up
为网卡配置和删除IPv6地址:
[root@linuxcool ~]# ifconfig eth0 add 33ffe:3240:800:1005::2/64
[root@linuxcool ~]# ifconfig eth0 del 33ffe:3240:800:1005::2/64
用ifconfig修改MAC地址:
[root@linuxcool ~]# ifconfig eth0 down
[root@linuxcool ~]# ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
[root@linuxcool ~]# ifconfig eth0 up
[root@linuxcool ~]# ifconfig eth1 hw ether 00:1D:1C:1D:1E
[root@linuxcool ~]# ifconfig eth1 up
2. uname 用于查看系统内核与系统版本等信息
格式为:uname [选项]
选项:
参数 | 含义 |
---|---|
-a | 显示系统所有相关信息 |
-m | 显示计算机硬件架构 |
-n | 显示主机名称 |
-r | 显示内核发行版本号 |
-s | 显示内核名称 |
-v | 显示内核版本 |
-p | 显示主机处理器类型 |
-o | 显示操作系统名称 |
-i | 显示硬件平台 |
实例:
[root@redhat7 ~]# uname -a
Linux redhat7 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
如果要查看当前系统版本的详细信息,则需要查看 redhat-release 文件
[root@linuxprobe ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
显示当前系统的内核版本 :
[root@linuxcool ~]# uname -r
3.10.0-123.el7.x86_64
显示当前系统的硬件架构:
[root@linuxcool ~]# uname -i
x86_64
3. uptime 用于查看系统的负载信息
格式为:uptime [选项]
选项:
参数 | 含义 |
---|---|
-p | 以漂亮的格式显示机器正常运行的时间 |
-s | 系统自开始运行时间,格式为yyyy-mm-dd hh:mm:ss |
-h | 显示帮助信息 |
实例:
显示当前系统运行负载情况:
[root@linuxprobe ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15 分钟内的压力情况(下面加粗的信息部分);负载值越低越好,尽量不要长期超过 1,在生产环境中不要超过 5。
使用-p参数显示机器正常运行的时间:
[root@linuxcool ~]# uptime -p
up 2 days, 5 hours, 15 minutes
使用-s参数显示机器启动时间:
[root@linuxcool ~]# uptime -s
2019-05-09 10:09:43
4. free 用于显示当前系统中内存的使用量信息
格式为:free [选项]
选项:
参数 | 含义 |
---|---|
-b | 以Byte显示内存使用情况 |
-k | 以kb为单位显示内存使用情况 |
-m | 以mb为单位显示内存使用情况 |
-g | 以gb为单位显示内存使用情况 |
-s | 持续显示内存 |
-t | 显示内存使用总合 |
实例:
人性化的方式输出当前内存的实时使用量信息:
[root@linuxprobe ~]# free -h
以总和的形式显示内存的使用信息:
[root@linuxcool ~]# free -t
周期性查询内存使用情况:
[root@linuxcool ~]# free -s 10
5. who 用于查看当前登入主机的用户终端信息
who命令的输出信息默认来自文件"/var/log/utmp"和"/var/log/wtmp"。
格式为:who [选项]
选项:
参数 | 含义 |
---|---|
-a | 打印全面信息 |
-b | 打印系统最近启动时间 |
-d | 打印死掉的进程 |
-l | 打印系统登录进程 |
-H | 带有列标题打印用户名,登录终端和登录时间 |
-t | 打印系统上次锁定时间 |
-u | 打印已登录用户列表 |
实例:
查看当前系统登录的用户名:
[root@linuxprobe ~]# who
打印系统最近启动时间 :
[root@linuxcool ~]# who -b
系统引导 2019-04-03 15:01
打印系统登录进程:
[root@linuxcool ~]# who -l
登录 tty1 2019-04-03 15:02 852 id=tty1
[root@linuxcool ~]# whoami
6. w命令 显示已登录用户
格式为:w [选项]
选项:
参数 | 含义 |
---|---|
-h | 不打印头信息 |
-u | 当显示当前进程和cpu时间时忽略用户名 |
-s | 使用短输出格式 |
-f | 显示用户从哪登录 |
-o | 老式输出 |
-i | 显示IP地址而不是主机名(如果可能) |
--help | 显示此帮助并退出 |
-V | 显示版本信息 |
实例:
显示目前登入系统的用户信息:
[root@linuxcool ~]# w
显示用户从哪登录:
[root@linuxcool ~]# w -f
踢出终端用户
[root@linuxcool ~]# w
root pts/0 2010-10-28 09:36 (192.168.1.236)
root pts/1 2010-10-28 09:40 (192.168.1.27)
[root@linuxcool ~]# pkill -kill -t pts/1 #踢出ip为192.168.1.27
7. last 用于查看所有系统的登录记录
执行last命令时,它会读取/var/log目录下名称为wtmp的文件,并把该文件记录的登录系统或终端的用户名单全部显示出来。默认显示wtmp的记录,btmp能显示的更详细,可以显示远程登录,例如ssh登录。
格式为:last [选项]
选项:
参数 | 含义 |
---|---|
-R | 省略hostname的栏位 |
usename | 展示username的登入讯息 |
tty | 限制登入讯息包含的终端代号 |
实例:
显示近期用户或终端的登录情况:
[root@linuxprobe ~]# last
简略显示,并指定显示的个数:
[root@linuxcool ~]# last -n 5 -R
显示最后一列显示主机IP地址:
[root@linuxcool ~]# last -n 5 -a -i
8. history 用于显示历史执行过的命令
格式为:history [选项]
选项:
参数 | 含义 |
---|---|
-a | 将当前shell会话的历史命令追加到命令历史文件中,命令历史文件是保存历史命令的配置文件 |
-c | 清空当前历史命令列表 |
-d | 删除历史命令列表中指定序号的命令 |
-n | 从命令历史文件中读取本次Shell会话开始时没有读取的历史命令 |
-r | 读取命令历史文件到当前的Shell历史命令内存缓冲区 |
-s | 将指定的命令作为单独的条目加入命令历史内存缓冲区。在执行添加之前先删除命令历史内存缓冲区中最后一条命令 |
-w | 把当前的shell历史命令内存缓冲区的内容写入命令历史文件 |
实例:
显示最近的条命令:
[root@linuxprobe ~]# history
历史命令会被保存到用户家目录中的.bash_history 文件中。Linux 系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用 cat 命令查看其文件内容。
[root@linuxprobe ~]# cat ~/.bash_history
要清空当前用户在本机上执行的 Linux 命令历史记录信息,可执行如下命令:
[root@linuxprobe ~]# history -c
将本次登录的命令写入历史文件中:
[root@linuxcool ~]# history -w
将当前Shell会话的历史命令追加到命令历史文件中:
[root@linuxcool ~]# history -a
9. sosreport 命令 用于收集系统配置及架构信息并输出诊断文档
格式为:sosreport [选项]
选项:
参数 | 含义 |
---|---|
-l | 列出所有可用的插件及其选项 |
-n | 禁用指定的插件 |
-e | 启用指定的插件 |
-a | 对于所有的插件启用,将所有布尔选项设置为True |
-v | 增加日志记录的详细程度 |
--no-report | 禁用HTML报告写入 |
--config-file CONFIG | 指定备用配置文件 |
实例:
列出所有可用的插件及其选项:
[root@linuxprobe ~]# sosreport -l
使用-e参数,启用指定apache.log插件:
[root@linuxcool ~]# sosreport -e apache.log
使用-n参数,禁用指定yum.yumlist插件:
[root@linuxcool ~]# sosreport -n yum.yumlist
使用-a参数,启用所有列出来的插件:
[root@linuxcool ~]# sosreport -a
10. df 显示磁盘空间使用情况
格式为:df [选项] [文件]
选项:
参数 | 含义 |
---|---|
-a | 显示所有系统文件 |
-B <块大小> | 指定显示时的块大小 |
-h | 以容易阅读的方式显示 |
-H | 以1000字节为换算单位来显示 |
-i | 显示索引字节信息 |
-k | 指定块大小为1KB |
-l | 只显示本地文件系统 |
-t <文件系统类型> | 只显示指定类型的文件系统 |
-T | 输出时显示文件系统类型 |
-- -sync | 在取得磁盘使用信息前,先执行sync命令 |
实例:
显示磁盘分区使用情况:
[root@linuxcool ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1980612 0 1980612 0% /dev
tmpfs 1994756 0 1994756 0% /dev/shm
tmpfs 1994756 1040 1993716 1% /run
tmpfs 1994756 0 1994756 0% /sys/fs/cgroup
/dev/mapper/fedora_linuxhell-root 15718400 2040836 13677564 13% /
tmpfs 1994756 4 1994752 1% /tmp
/dev/sda1 999320 128264 802244 14% /boot
tmpfs 398948 0 398948 0% /run/user/0
以容易阅读的方式显示磁盘分区使用情况:
[root@linuxcool ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 2.0G 1.1M 2.0G 1% /run
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/fedora_linuxhell-root 15G 2.0G 14G 13% /
tmpfs 2.0G 4.0K 2.0G 1% /tmp
/dev/sda1 976M 126M 784M 14% /boot
tmpfs 390M 0 390M 0% /run/user/0
11. dh 统计文件大小,目录则取总用量
格式为:du [选项] [文件]
选项:
参数 | 含义 |
---|---|
-a | 显示目录中所有文件大小 |
-k | 以KB为单位显示文件大小 |
-m | 以MB为单位显示文件大小 |
-g | 以GB为单位显示文件大小 |
-h | 以易读方式显示文件大小 |
-s | 仅显示总计 |
实例:
以易读方式显示文件夹内及子文件夹大小 :
[root@linuxcool ~]# du -h scf/
输出当前目录下各个子目录所使用的空间 :
[root@linuxcool ~]# du -hc --max-depth=1 scf/
显示指定文件所占空间 :
[root@linuxcool ~]# du log2012.log
du和df的区别:du是用于统计文件大小的,统计的文件大小是准确的;df是用于统计空间大小的,统计剩余空间是准确的
12. lsblk命令 – 查看系统的磁盘
lsblk命令包含在util-linux-ng包中,现在该包改名为util-linux。
格式为:**du [选项] **
选项:
参数 | 含义 |
---|---|
-a | 显示所有设备 |
-b | 以bytes方式显示设备大小 |
-d | 不显示 slaves 或 holders |
-e | 排除设备 |
-f | 显示文件系统信息 |
-h | 显示帮助信息 |
-m | 显示权限信息 |
-l | 使用列表格式显示 |
-n | 不显示标题 |
-o | 输出列 |
-P | 使用key=”value”格式显示 |
-r | 使用原始格式显示 |
-t | 显示拓扑结构信息 |
实例:
lsblk命令默认情况下将以树状列出所有块设备:
[root@linuxcool ~ ]# lsblk
lsblk NAME MAJ:MIN rm SIZE RO type mountpoint
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 46.6G 0 part /
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 190M 0 part /boot
├─sda6 8:6 0 3.7G 0 part [SWAP]
├─sda7 8:7 0 93.1G 0 part /data
└─sda8 8:8 0 89.2G 0 part /personal
sr0 11:0 1 1024M 0 rom
默认选项不会列出所有空设备:
[root@linuxcool ~]# lsblk -a
获取SCSI设备的列表,你只能使用-S选项,该选项是用来以颠倒的顺序打印依赖的:
[root@linuxcool ~]# lsblk -S
四、文本文件编辑命令
1. cat 命令 用于查看纯文本文件(内容较少的)
格式为:cat [选项] [文件]
选项:
参数 | 含义 |
---|---|
-n | 显示行数(空行也编号) |
-s | 显示行数(多个空行算一个编号) |
-b | 显示行数(空行不编号) |
-E | 每行结束处显示$符号 |
-T | 将TAB字符显示为 ^I符号 |
-v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
-e | 等价于”-vE”组合 |
-t | 等价于”-vT”组合 |
-A | 等价于 -vET组合 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
实例:
查看文件的内容:
[root@linuxcool ~]# cat filename.txt
查看文件的内容,并显示行数编号:
[root@linuxcool ~]# cat -n filename.txt
查看文件的内容,并添加行数编号后输出到另外一个文件中:
[root@linuxcool ~]# cat -n linuxcool.log > linuxprobe.log
清空文件的内容:
[root@linuxcool ~]# cat /dev/null > /root/filename.txt
持续写入文件内容,碰到EOF符后结束并保存:
[root@linuxcool ~]# cat > filename.txt << EOF
> Hello, World
> Linux!
> EOF
2. more 用于查看纯文本文件(内容较多的)
格式为:more [选项] 文件
选项:
参数 | 含义 |
---|---|
-num | 指定每屏显示的行数 |
+num | 从第 num 行开始显示 |
-l | more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性 |
-f | 计算实际的行数,而非自动换行的行数 |
-p | 先清除屏幕再显示文本文件的剩余内容 |
-c | 与-p相似,不滚屏,先显示内容再清除旧内容 |
-s | 多个空行压缩成一行显示 |
-u | 禁止下划线 |
+/pattern | 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示 |
命令内部操作:
- Space键:显示文本的下一屏内容
- Enter键:向下n行,需要定义,默认为1行
- 斜线符\:接着输入一个模式,可以在文本中寻找下一个相匹配的模式
- H键:显示帮助屏
- B键:显示上一屏内容
- Q键:退出more命令
- Ctrl+F、空格键:向下滚动一屏
- Ctrl+B:返回上一屏
- =: 输出当前的行号
- :f:输出文件名和当前的行号
- V:调用vi编辑器
- !:调用Shell,并执行命令
实例:
显示文件file的内容,显示之前先清屏,附已显示的百分比:
[root@linuxcool ~]# more -dc file
显示文件file的内容,每10行显示一次,而且在显示之前先清屏:
[root@linuxcool ~]# more -c -10 file
显示文件file的内容,每5行显示一次,而且在显示之后再清屏:
[root@linuxcool ~]# more -p -5 file
逐页显示 file 文档内容,如有连续两行以上空白行则以一行空白行显示 :
[root@linuxcool ~]# more -s file
3. head 用于查看纯文本文档的前 N 行
格式为:head [选项] [文件]
选项:
参数 | 含义 |
---|---|
-n | 后面接数字,代表显示几行的意思 |
-c | 指定显示头部内容的字符数 |
-v | 总是显示文件名的头信息 |
-q | 不显示文件名的头信息 |
实例:
显示文件名信息,并显示文件前两行:
[root@linuxcool ~]# head -v -n 2 test.txt
==> test.txt <==
hello world
hello linuxcool
显示文件前5个字符:
[root@linuxcool ~]# head -c 5 test.txt
hello
4. tail 用于查看纯文本文档的后 N 行或持续刷新内容
格式为:tail [选项] [文件]
选项:
参数 | 含义 |
---|---|
–retry | 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用 |
-c或——bytes= | 输出文件尾部的N(N为整数)个字节内容 |
-f<name/descriptor> | –follow:显示文件最新追加的内容 |
-F | 与选项“-follow=name”和“–retry”连用时功能相同 |
-n或——line= | 输出文件的尾部N(N位数字)行内容 |
--pid=<进程号> | 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
--help | 显示指令的帮助信息 |
--version | 显示指令的版本信息 |
实例:
显示文件file的最后10行:
[root@linuxcool ~ ] tail file
显示文件file的内容,从第20行至文件末尾:
[root@linuxcool ~ ] tail +20 file
显示文件file的最后10个字符:
[root@linuxcool ~ ] tail -c 10 file
一直变化的文件总是显示后10行:
[root@linuxcool ~ ] tail -f 10 file
[root@linuxcool ~ ] tail -100f file #另外一种写法
5. tr 用于替换文本文件中的字符
tr类似于sed命令,但是比sed简单,所以tr能实现的功能,sed都能实现。
格式为:tr [选项] [原始字符] [目标字符]
选项:
参数 | 含义 |
---|---|
-c | 选定字符串1中字符集的补集,即反选字符串1的补集 |
-d | 删除字符串1中出现的所有字符 |
-s | 删除所有重复出现的字符序列,只保留一个 |
实例:
实现大小字母的转换:
[root@linuxcool ~]# cat file_1
abc 012
def 345
ghi 678
jkl 909
[root@linuxcool ~]# tr "[a-z]" "[A-Z]" <file_1
ABC 012
DEF 345
GHI 678
JKL 909
删除file_1中的小写字母:
[root@linuxcool ~]# tr -d "[a-z]" <file_1
012
345
678
909
压缩重复的空白行:
[root@linuxcool ~]# cat file_2
AAA
BBB
CCC
DDD
EEE
[root@linuxcool ~]# tr -s "[\n]" <file_2
AAA
BBB
CCC
DDD
EEE
6. sed 处理编辑文本文件
格式为:sed [选项] ‘command’ 文本
选项:
参数 | 含义 |
---|---|
-e | 直接在命令行模式上进行sed动作编辑,此为默认选项 |
-f | 将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作 |
-i | 直接修改文件内容 |
-h | 显示帮助 |
-n | 只打印模式匹配的行 |
-V或--version | 显示版本信息 |
sed命令:
sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。
命令 | 功能 |
---|---|
a\ | 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 |
c\ | 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用""续行 |
i\ | 在当前行之前插入文本。多行时除最后一行外,每行末尾需用""续行 |
d | 删除行 |
h | 把模式空间里的内容复制到暂存缓冲区 |
H | 把模式空间里的内容追加到暂存缓冲区 |
g | 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 |
G | 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 |
l | 列出非打印字符 |
n | 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理 |
q | 结束或退出sed |
! | 对所选行以外的所有行应用命令 |
s | 用一个字符串替换另一个 |
r file | 从file中读行 |
w file | 写并追加模板块到file末尾 |
= | 打印当前行号 |
sed替换标记:
参数 | 含义 |
---|---|
g | 表示行内全面替换 |
p | 表示打印行 |
w | 表示把行写入一个文件 |
& | 已匹配字符串标记 |
\1 | 子串匹配标记 |
x | 表示互换模板块中的文本和缓冲区中的文本 |
y | 表示把一个字符翻译为另外的字符(但是不用于正则表达式) |
sed元字符集
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行;
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行;
. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d;
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行;
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed;
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行;
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers;
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**;
\< 匹配单词的开始,如:/\
\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行;
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行;
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行;
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行;
实例:
替换文本中的字符串
[root@linuxcool ~]# sed 's/book/books/' file
直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books
[root@linuxcool ~]# sed -i 's/book/books/g' file
使用后缀 /g 标记会替换每一行中的所有匹配:
[root@linuxcool ~]# sed 's/book/books/g' file
删除空白行:
sed '/^$/d' file
e选项允许在同一行里执行多条命令:
sed表达式的第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
sed -e '1,5d' -e 's/test/check/' file
7. stat 用于查看文件的具体存储信息和时间等信息
格式为 :stat [选项] 文件名称
选项:
参数 | 含义 |
---|---|
-L | 支持符号链接 |
-f | 显示文件系统的信息 |
-t | 以简洁的方式输出 |
--help | 显示命令帮助信息 |
--version | 显示命令版本信息 |
实例:
查看文件 anaconda-ks.cfg 的三种时间状态:Access,Modify,Change:
[root@linuxcool ~]# stat anaconda-ks.cfg
查看文件系统信息:
[root@linuxcool ~]# stat -f anaconda-ks.cfg
8. cut 用于按"列"提取文本字符
格式为:cut [选项] [文件]
选项:
参数 | 含义 |
---|---|
-b | 以字节为单位进行分割 ,仅显示行中指定直接范围的内容 |
-c | 以字符为单位进行分割 , 仅显示行中指定范围的字符 |
-d | 自定义分隔符,默认为制表符”TAB” |
-f | 显示指定字段的内容 , 与-d一起使用 |
-n | 取消分割多字节字符 |
--complement | 补足被选择的字节、字符或字段 |
--out-delimiter | 指定输出内容是的字段分割符 |
实例:
假设有一个学生报表信息,包含 No、Name、Mark、Percent:
[root@linuxcool ~]# cat student.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98
使用 -f 选项提取指定字段(这里的 f 参数可以简单记忆为 --fields的缩写):
[root@linuxcool ~]# cut -f 2 student.txt
Name
tom
jack
alex
使用 -d 选项指定字段分隔符:
[root@linuxcool ~]# cat student2.txt
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
[root@linuxcool ~]# cut -f2 -d";" student2.txt
Name
tom
jack
alex
打印第 1 个到第 3 个字符:
[root@linuxcool ~]# cut -c1-3 test.txt
abc
abc
abc
abc
abc
9. diff 用于比较多个文本文件的差异
格式为:diff [选项] 文件
选项:
参数 | 含义 |
---|---|
-a | diff预设只会逐行比较文本文件 |
-b | 不检查空格字符的不同 |
-W | 在使用-y参数时,指定栏宽 |
-x | 不比较选项中所指定的文件或目录 |
-X | 您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件 |
-y | 以并列的方式显示文件的异同之处 |
--help | 查看帮助信息 |
--left-column | 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容 |
--suppress-common-lines | 在使用-y参数时,仅显示不同之处 |
实例:
比较两个文件:
[root@linuxcool ~]# diff log2014.log log2013.log
3c3
< 2014-03
---
> 2013-03
8c8
< 2013-07
---
> 2013-08
11,12d10
< 2013-11
< 2013-12
上面的"3c3"和"8c8"表示log2014.log和log20143log文件在3行和第8行内容有所不同;"11,12d10"表示第一个文件比第二个文件多了第11和12行。
并排格式输出:
[root@localhost test3]# diff log2014.log log2013.log -y -W 50
2013-01 2013-01
2013-02 2013-02
2014-03 | 2013-03
2013-04 2013-04
2013-05 2013-05
2013-06 2013-06
2013-07 2013-07
2013-07 | 2013-08
2013-09 2013-09
2013-10 2013-10
2013-11 <
2013-12 <
[root@localhost test3]# diff log2013.log log2014.log -y -W 50
2013-01 2013-01
2013-02 2013-02
2013-03 | 2014-03
2013-04 2013-04
2013-05 2013-05
2013-06 2013-06
2013-07 2013-07
2013-08 | 2013-07
2013-09 2013-09
2013-10 2013-10
> 2013-11
> 2013-12
说明:
- "|"表示前后2个文件内容有不同
- "<"表示后面文件比前面文件少了1行内容
- ">"表示后面文件比前面文件多了1行内容
10. wc 用于统计指定文本的行数、字数、字节数
格式为:wc [选项] 文件
选项:
参数 | 含义 |
---|---|
-w | 统计字数,或–words:只显示字数。一个字被定义为由空白、跳格或换行字符分隔的字符串 |
-c | 统计字节数,或–bytes或–chars:只显示Bytes数 |
-l | 统计行数,或–lines:只显示列数 |
-m | 统计字符数 |
-L | 打印最长行的长度 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
实例:
统计字数:
[root@linuxcool ~]# cat test.txt
hello world
hello world
hello world
hello world hello world
[root@linuxcool ~]# wc -w test.txt
10 test.txt
统计字节数:
[root@linuxcool ~]# wc -c test.txt
60 test.txt
统计字符数:
[root@linuxcool ~]# wc -m test.txt
60 test.txt
统计行数:
[root@linuxcool ~]# wc -l test.txt
4 test.txt
五、文件目录管理命令
1. pwd 命令 用于显示用户当前所处的工作目录
格式为:pwd [选项]
实例:
[root@linuxprobe etc]# pwd
2. cd 命令 用于切换工作路径
格式为:cd [选项] [目录名称]
选项:
参数 | 含义 |
---|---|
-P | 如果切换的目标目录是一个符号链接,则直接切换到符号链接指向的目标目录 |
-L | 如果切换的目标目录是一个符号链接,则直接切换到符号链接名所在的目录 |
-- | 仅使用”-“选项时,当前目录将被切换到环境变量”OLDPWD”对应值的目录 |
~ | 切换至当前用户目录 |
… | 切换至当前目录位置的上一级目录 |
~ 代表用户的家目录
- 代表上次所在目录
. 代表当前目录
… 代表上级目录
实例:
将当前工作目录切换到dir目录,并使用pwd命令查看当前目录:
[root@linuxcool ~]# cd dir
[root@linuxcool dir]# pwd
/root/dir
使用“cd ~ ”和“cd … ”命令进行目录的切换操作,并使用pwd命令查看当前目录:
注意:使用“cd ~ ”命令可以直接切换到当前用户目录,而“cd … ”是切换到上一级目录。
[root@linuxcool dir]# pwd
/root/dir
[root@linuxcool dir]# cd ~
[root@linuxcool ~]# pwd
/root
[root@linuxcool dir]# pwd
/root/dir
[root@linuxcool dir]# cd ..
[root@linuxcool dir]# pwd
/root
使用“cd …/…”命令返回上两级目录:
[root@linuxcool dir_2]# pwd
/root/dir/dir_1/dir_2
[root@linuxcool dir_2]# cd ../..
[root@linuxcool dir]# pwd
/root/dir
3. ls 命令 用于显示目录中的文件信息
格式为:**ls [选项] [文件] **
选项:
参数 | 含义 |
---|---|
-a | 显示所有文件及目录 (包括以“.”开头的隐藏文件) |
-l | 使用长格式列出文件及目录信息 |
-r | 将文件以相反次序显示(默认依英文字母次序) |
-t | 根据最后的修改时间排序 |
-A | 同 -a ,但不列出 “.” (当前目录) 及 “…” (父目录) |
-S | 根据文件大小排序 |
-R | 递归列出所有子目录 |
实例:
列出所有文件(包括隐藏文件):
[root@linuxcool ~]# ls -a
列出文件的详细信息:
[root@linuxcool ~]# ls -l
列出根目录(/)下的所有目录:
[root@linuxcool ~]# ls /
列出当前工作目录下所有名称是 “s” 开头的文件 :
[root@linuxcool ~]# ls -ltr s*
4. touch 用于创建空白文件或设置文件的时间
格式为:touch [选项] [文件]
选项:
参数 | 含义 |
---|---|
-a | 改变档案的读取时间记录 |
-m | 改变档案的修改时间记录 |
-r | 使用参考档的时间记录,与 --file 的效果一样 |
-c | 不创建新文件 |
-d | 设定时间与日期,可以使用各种不同的格式 |
-t | 设定档案的时间记录,格式与 date 命令相同 |
--no-create | 不创建新文件 |
--help | 显示帮助信息 |
--version | 出版本讯息 |
实例:
创建空文件:
[root@linuxcool ~]# touch file.txt
批量创建文件:
[root@linuxcool ~]# touch file{1..5}.txt
[root@linuxcool ~]# ls
file1.txt file2.txt file3.txt file4.txt file5.txt
5. mkdir 用于创建空白的目录
格式为:mkdir [选项] [目录]
选项:
参数 | 含义 |
---|---|
-p | 递归创建多级目录 |
-m | 建立目录的同时设置目录的权限 |
-z | 设置安全上下文 |
-v | 显示目录的创建过程 |
实例:
在工作目录下,建立一个名为 dir 的子目录:
[root@linuxcool ~]# mkdir dir
在目录/usr/linuxcool下建立子目录dir,并且设置文件属主有读、写和执行权限,其他人无权访问
[root@linuxcool ~]# mkdir -m 700 /usr/linuxcool/dir
同时创建子目录dir1,dir2,dir3:
[root@linuxcool ~]# mkdir dir1 dir2 dir3
递归创建目录:
[root@linuxcool ~]# mkdir -p linuxcool/dir
6. cp 用于复制文件或目录
格式为:cp [选项] 源文件 目标文件
选项:
参数 | 含义 |
---|---|
-f | 若目标文件已存在,则会直接覆盖原文件 |
-i | 若目标文件已存在,则会询问是否覆盖 |
-p | 保留源文件或目录的所有属性 |
-r | 递归复制文件和目录 |
-d | 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 |
-l | 对源文件建立硬连接,而非复制文件 |
-s | 对源文件建立符号连接,而非复制文件 |
-b | 覆盖已存在的文件目标前将目标文件备份 |
-v | 详细显示cp命令执行的操作过程 |
-a | 等价于“dpr”选项 |
实例:
复制目录:
[root@linuxcool ~]# cp -R dir1 dir2/
将文件test1改名为test2:
[root@linuxcool ~]# cp -f test1 test2
复制多个文件:
[root@linuxcool ~]# cp -r file1 file2 file3 dir
交互式地将目录 /usr/linuxcool 中的所有.c文件复制到目录 dir 中:
[root@linuxcool ~]# cp -r /usr/linuxcool/*.c dir
7. mv 用于剪切文件或将文件重命名
格式为:mv [选项] 源文件 [目标路径|目标文件名]
选项:
参数 | 含义 |
---|---|
-i | 若存在同名文件,则向用户询问是否覆盖 |
-f | 覆盖已有文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
实例:
将文件file_1重命名为file_2:
[root@linuxcool ~]# mv file_1 file_2
将文件file移动到目录dir中 :
[root@linuxcool ~]# mv file /dir
将目录dir1移动目录dir2中(前提是目录dir2已存在,若不存在则改名):
[root@linuxcool ~]# mv /dir1 /dir2
将目录dir1下的文件移动到当前目录下:
[root@linuxcool ~]# mv /dir1/* .
8. rm 用于删除文件或目录
格式为:rm [选项] 文件
选项:
参数 | 含义 |
---|---|
-f | 忽略不存在的文件,不会出现警告信息 |
-i | 删除前会询问用户是否操作 |
-r/R | 递归删除 |
-v | 显示指令的详细执行过程 |
实例:
删除前逐一询问确认:
[root@linuxcool ~]# rm -i test.txt.bz2
rm: remove regular file `test.txt.bz2'?
直接删除,不会有任何提示:
[root@linuxcool ~]# rm -f test.txt.bz2
递归删除目录及目录下所有文件:
[root@linuxcool ~]# mkdir /data/log
[root@linuxcool ~]# rm -rf /data/log
删除当前目录下所有文件:
[root@linuxcool ~]# rm -rf *
9. dd 用于按照指定大小和个数的数据块来复制文件或转换文件
格式为:dd [选项]
选项:
参数 | 含义 |
---|---|
-if | 输入文件的名称 |
of | 输出的文件名称 |
bs | 设置每个块的大小 |
实例:
将本地的/dev/hdb整盘备份到/dev/hdd:
[root@linuxcool ~]# dd if=/dev/hdb of=/dev/hdd
将压缩的备份文件恢复到指定盘:
[root@linuxcool ~]# gzip -dc /root/image.gz | dd of=/dev/hdb
由标准输入设备读入字符串,并将字符串转换成大写后,再输出到标准输出设备:
[root@linuxcool ~]# dd conv=ucase
将testfile文件中的所有英文字母转换为大写,然后转成为testfile_1文件:
[root@linuxcool ~]# dd if=testfile_2 of=testfile_1 conv=ucase
修复硬盘:
[root@linuxcool ~]# dd if=/dev/sda of=/dev/sda
10. file 用于查看文件的类型
格式为:file [选项] 文件名
选项:
参数 | 含义 |
---|---|
-b | 列出辨识结果时,不显示文件名称 (简要模式) |
-c | 详细显示指令执行过程,便于排错或分析程序执行的情形 常与 -m 一起使用,用来在安装幻数文件之前调试它 |
-f | 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称 |
-L | 直接显示符号连接所指向的文件类别 |
-m | 指定魔法数字文件 |
-v | 显示版本信息 |
-z | 尝试去解读压缩文件的内容 |
-i | 显示MIME类别 |
实例:
显示文件类型:
[root@linuxcool ~]# file install.log
install.log: UTF-8 Unicode text
显示文件类型,不显示文件名称:
[root@linuxcool ~]# file -b install.log
UTF-8 Unicode text
显示文件类型, 显示MIME类别,不显示文件名称:
[root@linuxcool ~]# file -b -i install.log
text/plain; charset=utf-8
显示符号链接的文件类型:
[root@linuxcool ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
[root@linuxcool ~]# file /var/mail
/var/mail: symbolic link to `spool/mail'
显示符号连接所指向的文件类别:
[root@linuxcool ~]# file -L /var/mail
/var/mail: directory
六、打包压缩与搜索命令
1. tar 用于对文件进行打包压缩或解压
格式为:**tar [选项] [文件] **
选项:
参数 | 含义 |
---|---|
-A | 新增文件到以存在的备份文件 |
-B | 设置区块大小 |
-c | 建立新的备份文件 |
-C <目录> | 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录 |
-d | 记录文件的差别 |
-x | 从归档文件中提取文件 |
-t | 列出备份文件的内容 |
-z | 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz |
-Z | 通过compress指令处理备份文件 |
-f<备份文件> | 指定备份文件 |
-v | 显示指令执行过程 |
-r | 添加文件到已经压缩的文件 |
-u | 添加改变了和现有的文件到已经存在的压缩文件 |
-j | 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2 |
-v | 显示操作过程 |
-l | 文件系统边界设置 |
-k | 保留原有文件不覆盖 |
-m | 保留文件不被覆盖 |
-w | 确认压缩文件的正确性 |
-p | 保留原来的文件权限与属性 |
-P | 使用文件名的绝对路径,不移除文件名称前的“/”号 |
-N <日期格式> | 只将较指定日期更新的文件保存到备份文件里 |
-- -exclude=<范本样式> | 排除符合范本样式的文件 |
-- -remove-files | 归档/压缩之后删除源文件 |
实例:
解压:
[root@linuxcool ~]# tar -zxvf apache-tomcat-8.5.43.tar.gz
将所有.jpg的文件打成一个名为all.tar的包:
[root@linuxcool ~]# tar -cf all.tar *.jpg
打包文件之后删除源文件:
[root@linuxcool ~]# tar -cvf linuxcool.tar linuxcool --remove-files
打包文件以后,以 gzip 压缩:
[root@linuxcool ~]# tar -zcvf log.tar.gz linuxcool.log
2. grep 用于在文本中执行关键词搜索,并显示匹配的结果
格式为:grep [选项] 文件
选项:
参数 | 含义 |
---|---|
-i | 搜索时,忽略大小写 |
-c | 只输出匹配行的数量 |
-l | 只列出符合匹配的文件名,不列出具体的匹配行 |
-n | 列出所有的匹配行,显示行号 |
-h | 查询多文件时不显示文件名 |
-s | 不显示不存在、没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-x | 匹配整行 |
-r | 递归搜索 |
-q | 禁止输出任何结果,已退出状态表示搜索是否成功 |
-b | 打印匹配行距文件头部的偏移量,以字节为单位 |
-o | 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位 |
实例:
支持多文件查询并支持使用通配符:
[root@linuxcool ~\]# grep zwx file_* /etc/hosts
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
file_2:zwx
file_4:dkfjlzwxejfkje
file_4:zwx djfkdjf
file_4:zwxedkfgj
输出匹配字符串行的数量:
[root@linuxcool ~]$ grep -c zwx file_*
file_1:2
file_2:1
file_3:0
列出所有的匹配行,并显示行号:
[root@linuxcool ~]# grep -n zwx file_*
file_1:1:zwx
file_1:4:zwx
file_1:10:zwxddkjflkdjfdlkfjlsdkj
file_2:2:zwx
file_4:3:dkfjlzwxejfkje
file_4:4:zwx djfkdjf
file_4:5:zwxedkfgj
显示不包含模式的所有行:
[root@linuxcool ~]# grep -vc zwx file_*
file_1:7
file_2:4
file_3:5
file_4:2
不再显示文件名:
[root@linuxcool ~]# grep -h zwx file_*
zwx
zwx
zwxddkjflkdjfdlkfjlsdkj
zwx
dkfjlzwxejfkje
zwx djfkdjf
zwxedkfgj
只列出符合匹配的文件名,不列出具体匹配的行:
[root@linuxcool ~]# grep -l zwx file_*
file_1
file_2
file_4
不显示不存在或无匹配的文本信息:
[root@linuxcool ~]# grep -s zwx file1 file_1
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
[root@linuxcool ~]# grep zwx file1 file_1
grep: file1: No such file or directory
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
递归搜索,不仅搜索当前目录,还搜索子目录:
[root@linuxcool ~]# grep -r zwx file_2 *
file_2:zwx
anaconda-ks.cfg:user --name=zwx --gecos="zwx"
file_1:zwx
file_1:zwx
file_1:zwxddkjflkdjfdlkfjlsdkj
file_2:zwx
file_4:dkfjlzwxejfkje
file_4:zwx djfkdjf
file_4:zwxedkfgj
initial-setup-ks.cfg:user --name=zwx --gecos="zwx"
匹配整词,以字面意思去解释他,相当于精确匹配:
[root@linuxcool ~]# grep zw* file_1
zwx
zwx
zdkfjeld
zw
ze
zwxddkjflkdjfdlkfjlsdkj
[root@linuxcool ~]# grep -w zw* file_1
zw
匹配整行,文件中的整行与模式匹配时,才打印出来:
[root@linuxcool ~]# grep -x zwx file_*
file_1:zwx
file_1:zwx
file_2:zwx
不输出任何结果,已退出状态表示结果:
[root@linuxcool ~]# grep -q zwx file_1
[root@linuxcool ~]# echo $?
0
[root@linuxcool ~]# grep -q zwx file_5
[root@linuxcool ~]# echo $?
1
[root@linuxcool ~]# grep -q zwx file5
grep: file5: No such file or directory
[root@linuxcool ~]# echo $?
2
查找一个文件中的空行和非空行:
[root@linuxcool ~]# grep -c ^$ file_1
4
[root@linuxcool ~]# grep -c ^[^$] file_1
15
匹配任意或重复字符用".“或”*"符号来实现:
[root@linuxcool ~]# grep ^z.x file_1
zwx
zwx
zwxddkjflkdjfdlkfjlsdkj
[root@linuxcool ~]# grep ^z* file_6
zwx
dfkjd
zzdfjkd
zz dfdww
haha
3. find 用于按照指定条件来查找文件
格式为:find [选项] [路径] [查找和搜索范围]
选项:
参数 | 含义 |
---|---|
-name | 按名称查找 |
-size | 按大小查找 |
-user | 按属性查找 |
-type | 按类型查找 |
-iname | 忽略大小写 |
-exec …… {}\ | 后面可跟用于进一步处理搜索结果的命令 |
实例:
使用-name参数查看/etc目录下面所有的.conf结尾的配置文件:
[root@linuxcool ~]# find /etc -name "*.conf
使用-size参数查看/etc目录下面大于1M的文件:
[root@linuxcool ~]# find /etc -size +1M
查找当前用户主目录下的所有文件:
[root@linuxcool ~]# find $HOME -print
列出当前目录及子目录下所有文件和文件夹:
[root@linuxcool ~]# find .
在/home目录下查找以.txt结尾的文件名:
[root@linuxcool ~]# find /home -name "*.txt"
在/var/log目录下忽略大小写查找以.log结尾的文件名:
[root@linuxcool ~]# find /var/log -iname "*.log"
搜索超过七天内被访问过的所有文件:
[root@linuxcool ~]# find . -type f -atime +7
搜索访问时间超过10分钟的所有文件:
[root@linuxcool ~]# find . -type f -amin +10
找出/home下不是以.txt结尾的文件:
[root@linuxcool ~]# find /home ! -name "*.txt"
在整个文件系统中找出所有归属于 linuxprobe 用户的文件并复制到 /root/findresults 目录:
[root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ \\;
4. 输入重定向中用到的符号及其作用
命令 < 文件
将文件作为命令的标准输入
命令 << 分界符
从标准输入中读入,直到遇见分界符才停止
命令 < 文件 1 > 文件 2
将文件 1 作为命令的标准输入并将标准输出到文件 2
5. 输出重定向中用到的符号及其作用
命令 > 文件
将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件
将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件
将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件
将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1
或
命令 &>> 文件
将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
6. 管道符命令 | 把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入
格式为:命令 A | 命令 B
实例:
匹配关键词/sbin/nologin 找出了所有被限制登录系统的用户:
[root@linuxprobe ~]# grep "/sbin/nologin" /etc/passwd | wc -l
用翻页的形式查看/etc 目录中的文件列表及属性信息:
[root@linuxprobe ~]# ls -l /etc/ | more
用一条命令来完成密码重置:
[root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root
7. 命令行的通配符
通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9 之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。
实例:
匹配所有在/dev 目录中且以 sda 开头的文件:
[root@linuxprobe ~]# ls -l /dev/sda*
查看文件名为 sda 开头,但是后面还紧跟其他某一个字符的文件的相关信息:
[root@linuxprobe ~]# ls -l /dev/sda?
8. 常用的转义字符
4 个最常用的转义字符如下所示。
➢ 反斜杠(\): 使反斜杠后面的一个变量变为单纯的字符串。
➢ 单引号(‘’):转义其中所有的变量为单纯的字符串。
➢ 双引号(“”):保留其中的变量属性,不进行转义处理。
➢ 反引号(``):把其中的命令执行后返回结果。
实例:
定义一个名为 PRICE 的变量并赋值为 5,然后输出以双引号括起来的字符串与变量信息
[root@linuxprobe ~]# PRICE=5
[root@linuxprobe ~]# echo "Price is $PRICE"
Price is 5
要想让第一个"$"乖乖地作为美元符号,那么就需要使用反斜杠(\)来进行转义,将这个命令提取符转义成单纯的文本,去除其特殊功能:
[root@linuxprobe ~]# echo "Price is \\$$PRICE"
Price is $5
而如果只需要某个命令的输出值时,可以像命令
这样,将命令用反引号括起来,达到预期的效果。例如,将反引号与 uname -a 命令结合,然后使用 echo 命令来查看本机的 Linux版本和内核信息:
[root@linuxprobe ~]# echo `uname -a`
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017
x86_64 x86_64 x86_64 GNU/Linux
七、用户管理和文件权限命令
1. useradd 用于创建新的用户
格式为:useradd [选项] 用户名
选项:
参数 | 含义 |
---|---|
-D | 改变新建用户的预设值 |
-c | 添加备注文字 |
-d | 新用户每次登陆时所使用的家目录 |
-e | 用户终止日期,日期的格式为YYYY-MM-DD |
-f | 用户过期几日后永久停权。当值为0时用户立即被停权,而值为-1时则关闭此功能,预设值为-1 |
-g | 指定用户对应的用户组 |
-G | 定义此用户为多个不同组的成员 |
-m | 用户目录不存在时则自动创建 |
-M | 不建立用户家目录,优先于/etc/login.defs文件设定 |
-n | 取消建立以用户名称为名的群组 |
-r | 建立系统帐号 |
-u | 指定用户id |
实例:
添加新用户linuxcool:
[root@linuxcool ~]# useradd linuxcool
不创建家目录,并且禁止登陆:
[root@linuxcool ~]# useradd -M -s /sbin/nologin linuxcool
添加新用户linuxcool,指定UID为888,指定归属用户组为root,cool成员,其shell类型为/bin/sh:
[root@linuxcool ~]# useradd -u 888 -s /bin/sh -G root,cool linuxcool
添加新用户linuxcool,设置家目录为/tmp/linuxcool,用户过期时间为2020/09/01.过期后两天停权:
[root@linuxcool ~]# useradd -e "2020/09/01" -f 2 -d /tmp/linuxcool linuxcool
2. groupadd 用于创建用户组
格式为:groupadd [选项] 群组名
选项:
参数 | 含义 |
---|---|
-g | 指定新建工作组的id |
-r | 创建系统工作组,系统工作组的组ID小于500 |
-K | 覆盖配置文件“/ect/login.defs” |
-o | 允许添加组ID号不唯一的工作组 |
实例:
使用-g参数新建linuxcool工作组名,1005是工作组id:
[root@linuxcool ~]# groupadd -g 1005 linuxcool
使用-r创建系统工作组:
[root@linuxcool ~]# groupadd -r -g 368 linuxcool
3. usermod 用于修改用户的属性
格式为:usermod [选项] 用户名
选项:
参数 | 含义 |
---|---|
-c<备注> | 修改用户账号的备注文字 |
-d<登入目录> | 修改用户登入时的目录 |
-e<有效期限> | 修改账号的有效期限 |
-f<缓冲天数> | 修改在密码过期后多少天即关闭该账号 |
-g<群组> | 修改用户所属的群组 |
-G<群组> | 修改用户所属的附加群组 |
-l<账号名称> | 修改用户账号名称 |
-L | 锁定用户密码,使密码无效 |
-s | 修改用户登入后所使用的shell |
-u | 修改用户ID |
-U | 解除密码锁定 |
实例:
更改登陆目录:
[root@linuxcool ~]# usermod -d /home/hnlinux root
改变用户的uid:
[root@linuxcool ~]# usermod -u 777 root
修改用户名为linux:
[root@linuxcool ~]# usermod -l Linux linuxcool
锁定linuxcool的密码:
[root@linuxcool ~]# usermod -L linuxcool
解锁linuxcool的密码:
[root@linuxcool ~]# usermod -U linuxcool
4. passwd 用于修改用户密码、过期时间、认证信息等
格式为:**passwd [选项] [用户名] **
选项:
参数 | 含义 |
---|---|
-d | 删除密码 |
-l | 锁定用户密码,无法被用户自行修改 |
-u | 解开已锁定用户密码,允许用户自行修改 |
-e | 密码立即过期,下次登陆强制修改密码 |
-k | 保留即将过期的用户在期满后能仍能使用 |
-S | 查询密码状态 |
实例:
修改密码
[root@linuxcool ~]#echo "123456abc." | passwd --stdin username
修改当前登陆的账户密码:
[root@linuxcool ~]# passwd
修改其他用户密码(假设有linuxprobe用户):
[root@linuxcool ~]# passwd linuxcool
锁定密码不允许用户修改:
[root@linuxcool ~]# passwd -l linuxcool
解除锁定密码,允许用户修改:
[root@linuxcool ~]# passwd -u linuxcool
下次登陆强制改密码:
[root@linuxcool ~]# passwd -e linuxcool
清除登录密码。清除之后登录时无需密码,风险极大,不推荐使用:
[root@linuxcool ~]# passwd -d linuxcool
查询密码状态:
[root@linuxcool ~]# passwd -S linuxcool
5. userdel 用于删除用户
格式为:userdel [选项] 用户名
选项:
参数 | 含义 |
---|---|
-f | 强制删除用户账号 |
-r | 删除用户主目录及其中的任何文件 |
-h | 显示命令的帮助信息 |
实例:
删除用户,但不删除其家目录及文件:
[root@linuxcool ~]# userdel linuxcool
删除用户,并将其家目录及文件一并删除:
[root@linuxcool ~]# userdel -r linuxcool
强制删除用户:
[root@linuxcool ~]# userdel -f linuxcool
6. 文件权限与归属
在Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来加以区分,常见的字符如下所示
➢ -:普通文件。
➢ d:目录文件。
➢ l:链接文件。
➢ b:块设备文件。
➢ c:字符设备文件。
➢ p:管道文件。
文件的读、写、执行权限可以简写为 rwx,亦可分别用数字 4、2、1 来表示,文件所有者,所属组及其他用户权限之间无关联
通过ls命令查看到的文件属性信息:
在Linux中执行命令 ls -l(以列表的形式显示文件)后,文件中各个信息代表的含义:
文件的特殊权限
SUID
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。
查看passwd命令属性时发现所有者的权限由rwx变成了rws,其中x改变成s就意味着该文件被赋予了SUID权限。另外有读者会好奇,那么如果原本的权限是rw-呢?如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。
SGID
SGID主要实现如下两种功能:
让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。例在目录设置SGID,则用户在该目录创建文件,文件的默认的用户组将由用户自己的基本用户组变为目录的所属组,使得同组内的其他用户都能访问该文件。
SBIT
确保用户只能删除自己的文件,而不能删除其他用户的文件。如果赋予了SBIT权限,则其他用户中的可执行权限位会从x-变为t/T
7. chattr 用于设置文件的隐藏权限
格式为:chattr [选项] 文件
选项:
参数 | 含义 |
---|---|
-R | 递归处理目录下的所有文件 |
-v | 设置文件或目录版本 |
-V | 显示指令执行过程 |
+ | 开启文件或目录的该项属性 |
-- | 关闭文件或目录的该项属性 |
= | 指定文件或目录的该项属性 |
实例:
用chattr命令防止系统中某个关键文件被修改(加锁):
[root@linuxcool ~]# chattr +i /etc/resolv.conf
解锁:
[root@linuxcool ~]# chattr -i /home/omd/h.txt
让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
[root@linuxcool ~]# chattr +a /var/log/messages
8. chmod 用于改变文件或目录权限
格式为:**chmod [选项] 权限模式 文件名 **
权限模式: [ugoa] [[=±] [perms]] [用户身份] [[赋予方式] [权限]]
用户身份:
u :所有者(所属者)
g:所属组
o:其他人
a:所有人
选项:
参数 | 含义 |
---|---|
-c | 若该文件权限确实已经更改,才显示其更改动作 |
-f | 若该文件权限无法被更改也不显示错误讯息 |
-v | 显示权限变更的详细资料 |
-R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
实例:
将档案 file1.txt 设为所有人皆可读取:
[root@linuxcool ~]# chmod a+r file.txt
将目前目录下的所有文件与子目录皆设为任何人可读取 :
[root@linuxcool ~]# chmod -R a+r *
将 file.txt 设定为只有该文件拥有者可以执行:
[root@linuxcool ~]# chmod u+x file.txt
9. chgrp 用于更改文件用户组
格式为:chgrp [选项] 文件
选项:
参数 | 含义 |
---|---|
-c | 效果类似”-v”参数,但仅回报更改的部分 |
-f | 不显示错误信息 |
-h | 对符号连接的文件作修改,而不更动其他任何相关文件 |
-R | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v | 显示指令执行过程 |
--reference | 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同 |
实例:
改变文件的群组属性:
[root@linuxcool ~]# chgrp -v linuxcool file
根据指定文件改变文件的群组属性:
[root@linuxcool ~]# chgrp --reference=file\_1 file\_2
将/usr/linuxcool及其子目录下的所有文件的用户组改为cool:
[root@linuxcool ~]# chgrp -R cool /usr/linuxcool
10. chown 用于改变文件或目录用户和用户组
格式为:chown [选项] 所有者:所属组(要改为的用户组) 文件或目录
选项:
参数 | 含义 |
---|---|
-R | 对目前目录下的所有文件与子目录进行相同的拥有者变更 |
-c | 若该文件拥有者确实已经更改,才显示其更改动作 |
-f | 若该文件拥有者无法被更改也不要显示错误讯息 |
-h | 只对于连结(link)进行变更,而非该 link 真正指向的文件 |
-v | 显示拥有者变更的详细资料 |
--help | 显示辅助说明 |
--version | 显示版本 |
实例:
将test.txt文件用户组与用户都改为bin:
[root@linuxcool ~]# ll test.txt.bz2
-rw-r--r-- 1 root root 56 Jul 22 20:17 test.txt.bz2
[root@linuxcool ~]# chown bin:bin test.txt.bz2
[root@linuxcool ~]# ll test.txt.bz2
-rw-r--r-- 1 bin bin 56 Jul 22 20:17 test.txt.bz2
显示改动动作:
[root@linuxcool ~]# ll test.txt
-rw-r--r-- 1 root root 45 Jul 22 21:11 test.txt
[root@linuxcool ~]# chown -c bin:bin test.txt
changed ownership of `test.txt' to bin:bin
将当前目录下所有文件的拥有者都改为 linuxcool,用户组改为 linuxcoolgroup:
[root@linuxcool ~]# chown -R linuxcool:linuxcoolgroup *
参考:
《Linux就该这么学》
整理不易,如有错误欢迎大佬指出!