整理系统常用的快捷方式

  • ctrl+c : 中断命令执行过程
  • ctrl+l : 清屏操作
  • ctrl+d : 注销用户
  • tab : 补全目录路径或文件名称信息/命令
  • ↑↓ : 调取之前输入过的历史命令
  • ctrl+a : 快速将光标移动到行首
  • ctrl+e : 快速将光标移动到行尾
  • ctrl+←→ : 按照一个空格进行移动光标
  • esc+. : 调取上一个命令最后一个信息
  • ctrl+u : 将光标所在位置到行首内容进行剪切
  • ctrl+k : 将光标所在位置到行尾内容进行剪切
  • ctrl+y : 粘贴剪切的内容
  • ctrl+s : 进入锁定状态
  • ctrl+q : 解除锁定状态
  • ctrl+r : 快速搜索历史命令

整理系统常用的操作命令

命令 效果
shutdown命令 关机或重启操作
ls命令 (list)按条件查看目录或文件
mkdir命令 (make directory)创建新的目录
cd命令 (change directory)切换工作目录
man命令 (manual)查看命令的作用说明
touch命令 创建出一个空文件
echo命令 输出文本信息
cat命令 查看文件
cp命令 (copy)复制数据信息(文件/目录)到其他位置后可以选择修改文件名或目录名
rm命令 (remove)删除数据信息(文件/目录)
mv命令 (move)移动数据信息(文件/目录)到其他位置后可以选择修改文件名或目录名
runlevel命令 查看调整系统运行级别
alias命令 设置或查看系统别名
blkid命令 用于查看块设备UUID、Label、挂载、文件系统类型等信息
type命令 查看内置或外置命令方法
yum命令 安装软件命令
head命令 查看文件前面10行信息
tail命令 查看文件后面10行信息
which命令 在环境变量$PATH设置的目录里查找符合条件的文件
rpm命令 rpm命令是RPM软件包的管理工具
vi命令 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器
grep命令 (Global search Regular Expression and Print out the line)在文本文件中按照指定的正则进行全局搜索,并打印搜索出的行
ss命令 (Socket Statistics)获取socket统计信息
netstat命令 显示网络相关信息
less命令 查看文件
more命令 查看文件,查看到结尾时自动退出
sed命令 擅长对文本行进行操作处理
awk命令 擅长对文本列进行操作处理
tr命令 输出替换后内容,不会修改原文件
file命令 辨识文件类型
ln命令 (link)创建链接文件
find命令 查找文件
systemctl命令 Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器
locate命令 查找文件,快速定位文件路径
tree命令 显示目录结构信息
tar命令 用来压缩和解压文件 tar本身不具有压缩功能,通过调用压缩功能实现
stat命令 查看文件的详细信息
date命令 查看时间信息
xargs命令 命令传递参数的一个过滤器,也是组合多个命令的一个工具,可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据,也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行
wc命令 计算文件的Byte数、字数、或是列数
chmod命令 只能文件属主或特权用户才能使用该功能来改变文件存取模式
umask命令 权限掩码,umask值表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值
useradd命令 创建用户命令
usermod命令 修改用户信息
userdel命令 删除用户信息
passwd命令 修改用户密码信息
groupadd命令 创建用户组
groupmod命令 修改用户组
groupdel命令 删除用户组
chown命令 修改文件属主和属组信息
id命令 查看用户信息
w命令 显示正在登陆系统的用户信息
su命令 切换用户命令
visudo命令 编辑/etc/sudoers只读文件,可以赋予其他用户权限
sudo命令 让普通用户执行root命令的一个工具
chattr命令 用于改变文件属性
lsattr命令 用于显示文件属性
crontab命令 定时任务服务
fdisk命令 管理小于2T的磁盘,所有的操作记录在内存中不会立刻生效,直到输入w
parted命令 管理大于2T磁盘,分区后直接生效
partprobe命令 系统重新读取分区表,不重启服务器情况下重新读取分区列表
mkfs命令 (Make FileSystem) 在特定的分区上建立linux文件系统(格式化操作)
dd命令 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件 设备 标准输出
sort命令 可针对文本文件的内容,以行为单位来排序
du命令 显示目录或文件的大小

shutdown命令

关机或重启操作

  • shutdown : 系统给出对应提示并且在1分钟后关闭
  • shutdown -c : 取消关机计划
  • shutdown -h 5 : 系统给出对应提示并且在5分钟后关闭
  • shutdown -r 5 : 系统给出对应提示并且在5分钟后重启
  • shutdown -h now : 立即关闭系统
  • shutdown -r now :立即重启系统
  • shutdown -h 0 : 立即关闭系统
  • shutdown -r 0 :立即重启系统
  • shutdown -h 20:00 : 预定时间关闭系统(20点关机,如果现在超过20点,则明天20点)

其他相关命令

  • halt : 立即关闭系统
  • poweroff : 立即关闭系统
  • reboot : 立即重启系统

ls命令

(list)按条件查看目录或文件

  • ls /etc/hosts : 检查文件是否存在
  • ls /etc/ : 检查目录是否存在
  • ls -a : 列出文件夹下所有的文件,包括以“.“开头的隐藏文件
  • ls -d /etc : 查看目录属性信息
  • ls -lh *.log : 列出文件的详细信息(.log结尾,*为通配符代表任意多个字符)
  • ls -lt : 列出文件的详细信息并按照时间排序
  • ls -ltr : 列出文件的详细信息并按照时间反向排序

其他相关命令

  • ll : 查看当前文件夹下所有的文件和目录并显示权限大小
  • lh : 查看当前文件夹下所有的文件和目录并显示权限大小
  • pwd : 查看当前所在路径

mkdir命令

(make directory)创建新的目录

  • mkdir /1997sty : 在根目录下创建一个1997sty的目录
  • mkdir -p /1997sty/1997/sty : 递归创建目录(-p:父目录不存在时,同时建立)

cd命令

(change directory)切换工作目录

  • cd /1997sty : 切换到/1997sty(绝对路径)
  • cd .. : 返回到上一级目录(相对路径)
  • cd ../../ : 返回到上两级目录(相对路径)
  • cd ../1997sty : 返回到上一级目录并切换到1997sty(相对路径)
  • cd - : 切换到上一个目录并输出目录绝对路径
  • cd / : 切换到根目录
  • cd ~ : 切换到家目录

man命令

(manual)查看命令的作用说明

  • man cd : 查看cd命令的说明
  • man mkdir : 查看mkdir命令的说明

touch命令

创建出一个空文件

  • touch /1997sty/1997sty.txt : 创建一个文件名为1997sty.txt的文件

echo命令

输出文本信息

  • echo "hello world" : 输出hello world到屏幕上
  • echo "hello world" > 1997sty.txt : 输出hello world写入到1997sty.txt
  • echo "hello world" >> 1997sty.txt : 输出hello world追加到1997sty.txt
  • echo {1..100} : 输出1-100
  • echo {01..100} : 输出001-100
  • echo {1..10..2} : 输出1,3,5,7,9
  • echo {1,9,9,7} : 输出1,9,9,7

cat命令

查看文件

  • cat 1997sty.txt : 查看文件1997sty.txt
  • cat 1997sty.txt 1997sty_1.txt : 查看文件1997sty.txt,1997sty_1.txt
  • cat -n 1997sty.txt : 查看文件1997sty.txt显示行号
  • cat >> 1997sty.txt <<EOF : 追加添加多行文本到1997sty.txt文件添加完成后输入EOF结束
  • cat > 1997sty.txt <<1997STY : 写入添加多行文本到1997sty.txt文件添加完成后输入1997STY结束

cp命令

(copy)复制数据信息(文件/目录)到其他位置后可以选择修改文件名或目录名

  • cp /1997sty/1997sty.txt /tmp : 复制1997sty.txt/tmp
  • cp -r /1997sty /tmp : 复制/1997sty目录到/tmp
  • \cp -r /1997sty /tmp : 强制复制/1997sty目录到/tmp下,并且不再确认

如果第二个路径最后一级如果不存在,则复制以后的文件或目录就被更名为这个名称 如果第二个路径最后一级如果存在,则复制以后的文件或目录就不会变更

rm命令

(remove)删除数据信息(文件/目录)

  • rm /tmp/1997sty.txt : 删除/tmp目录下的/1997sty.txt文件,并确认
  • \rm /tmp/1997sty.txt : 强制删除/tmp目录下的/1997sty.txt文件,并且不再确认
  • rm -f /tmp/1997sty.txt : 强制删除/tmp目录下的/1997sty.txt文件,并且不再确认
  • rm -r /1997sty : 强制删除/1997sty目录和目录下的所有文件和子目录,并确认
  • rm -rf /1997sty : 强制删除/1997sty目录和目录下的所有文件和子目录,并且不再确认
  • rm -rf / : 强制删除/目录和目录下的所有文件和子目录,并且不再确认(删根跑路)

mv命令

(move)移动数据信息(文件/目录)到其他位置后可以选择修改文件名或目录名

  • mv /1997sty/1997sty.txt /tmp : 移动1997sty.txt/tmp
  • mv /1997sty/1997sty01/ /tmp : 移动1997sty01目录到/tmp
  • mv 1997sty.txt sty1997.txt : 1997sty.txt重命名为sty1997.txt

如果第二个路径最后一级如果不存在,则复制以后的文件或目录就被更名为这个名称 如果第二个路径最后一级如果存在,则复制以后的文件或目录就不会变更

runlevel命令

查看调整系统运行级别

  • runlevel : 查看系统运行级别

系统运行级别

  • 0 — 表示关机级别(不要将默认的运行级别设置成这个值)
  • 1 — 单用户模式
  • 2 — 多用户模式,不带NFS(Network File Syetem 网络文件系统)
  • 3 — 多用户模式,完全的多用户模式(纯命令行模式)
  • 4 — 没有被使用的模式(被保留模式)
  • 5 — X11,完整的图形化界面模式
  • 6 — 表示重启级别(不要将默认的运行级别设置成这个值)

临时调整运行级别

  • init 0 : 调整运行级别为0,值范围 0,1,2,3,4,5,6

永久调整运行级别

inittab系统运行级别文件(Centos6)

  • vi /etc/inittab : 永久调整运行级别

修改系统运行级别命令(Centos7)

  • systemctl get-default : 查看运行级别
  • systemctl set-default runlevel3.target : 永久调整运行级别
  • ls -l /usr/lib/systemd/system/runlevel*target : 查看运行级别文件
[root@1997sty ~]# ls -l /usr/lib/systemd/system/runlevel*target
lrwxrwxrwx. 1 root root 15 Mar 28 10:41 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Mar 28 10:41 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Mar 28 10:41 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Mar 28 10:41 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Mar 28 10:41 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Mar 28 10:41 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Mar 28 10:41 /usr/lib/systemd/system/runlevel6.target -> reboot.target

alias命令

设置或查看系统别名

  • alias : 查看系统别名
  • alias cathome='ls -l /home' : 设置一个别名为cathome的别名,执行的命令是ls -l /home
  • unalias cathome : 取消cathome别名

怎么样操作可以让别名失效

  • 取消别名命令unalias
  • 使用反斜线\rm -rf /1997sty(rm命令通过别名设置为其他效果)
  • 绝对路径方式执行命令/usr/bin/rm -rf /1997sty(rm命令通过别名设置为其他效果)
  • xargs命令后面命令忽略别名

blkid命令

用于查看块设备UUID、Label、挂载、文件系统类型等信息

  • blkid : 查看块设备UUID、Label、挂载、文件系统类型等信息
  • blkid /dev/sda1 : 查看sda1的信息
  • blkid -s TYPE : 输出指定信息

type命令

查看内置或外置命令方法

  • type cd : 查看cd命令

系统中将命令分为俩个大类

外置命令 需要进行安装

内置命令 所有系统都内置的命令

yum命令

安装软件命令

  • yum repolist : 查看可用的yum源信息
  • yum list : 查看可以安装和以安装软件
  • yum grouplist : 查看可以安装和以安装软件包组
  • yum --help : 查看命令的参数帮助信息
  • yum provides locate : 根据locate命令查找软件名
  • yum groupinstall -y Development Tools : 安装Development Tools软件包组
  • yum install vim : 使用yum安装vim
  • yum install -y vim tree wget net-tools nmap bash-completion : 使用yum安装多个软件并且不用确认
  • yum erase cowsay -y : yum卸载cowsay并移除依赖关系,可以使用rpm命令的保留依赖关系卸载(极其不建议)

yum安装软件排错流程

  1. 访问外网IP地址不通

    网卡地址配置有问题

  2. 访问外网名称不通

    DNS地址配置有问题

  3. 检查是否已经有下载的进程

    ps -ef找到进程后使用kill -9 PID关闭对应进程

  4. yum源文件被修改调整

head命令

查看文件前面10行信息

  • head /etc/profile : 查看文件前面10行信息
  • head -5 /etc/profile : 查看文件前面5行信息

tail命令

查看文件后面10行信息

  • tail /etc/profile : 查看文件后面10行信息
  • tail -5 /etc/profile : 查看文件后面5行信息
  • tail -f /etc/profile : 追踪查看文件内容的变化,文件被删除或改名就停止
  • tail -F /etc/profile : 追踪查看文件内容的变化,文件被删除或改名后,如果再次创建相同的文件名,会继续追踪

which命令

在环境变量$PATH设置的目录里查找符合条件的文件

  • which svn : 查找svn所在的目录

rpm命令

rpm命令是RPM软件包的管理工具

  • rpm -ivh sl : 直接安装sl
  • rpm -ql tree : 查询tree
  • rpm -e tree : 卸载tree
  • rpm -qa : 列出所有安装过的包
  • rpm -qf `which svn` : 返回svn软件包的全名
  • rpm -e cowsay --nodeps : rpm卸载cowsay并保留依赖关系

vi命令

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器 所有命令区分大小写

  • vi 1997sty : 编辑当前目录下1997sty文件

命令行模式

  • G : 将光标移动到尾行行首
  • gg : 将光标移动到首行行首
  • 3gg : 将光标移动到第三行行首
  • $ : 将光标移动到当前行的行尾
  • 0 : 将光标移动到当前行的行首
  • ^ : 将光标移动到当前行的行首
  • x : 剪切光标右侧字符
  • 3x : 剪切光标右侧三个字符
  • dd : 剪切光标所在行
  • 3dd : 剪切光标所在行开始向下三行
  • dG : 剪切光标所在行至尾行
  • p : 粘贴
  • 3p : 粘贴三次
  • yy : 复制光标所在行
  • 3yy : 复制光标所在行开始向下三行
  • u : 撤销上一次操作
  • Ctrl + r : 还原上一次操作
  • : 向上移动三个光标(其他方向键同理)
  • 3↑ : 向上移动三格光标(其他方向键同理)

插入模式

  • esc : 退出编辑模式
  • i : 从光标所在位置进入编辑模式
  • I : 从光标所在行的行首位置进入编辑模式
  • o : 从光标所在行向下换行后进入编辑模式
  • O : 从光标所在行向上换行后进入编辑模式
  • a : 从光标所在位置向右移动一个字符进入编辑模式
  • A : 从光标所在行的行尾位置进入编辑模式
  • cc : 剪切当前行所有内容后进入编辑模式
  • C : 从光标所在位置进入编辑模式并剪切光标右侧所有内容

底行模式

  • : : 输入一些命令
  • :set nu : 显示行号
  • :set nonu : 取消显示行号
  • :set ic : 忽略大小写
  • :set ignorecase : 忽略大小写
  • :set noic : 取消忽略大小写
  • :set noignorecase : 取消忽略大小写
  • ? : 输入搜索内容按回车进入搜索状态(向上搜索 n 依次向上)
  • / : 输入搜索内容按回车进入搜索状态(向下搜索 n 依次向下)
  • ?search\c : 输入搜索search忽略大小写按回车进入搜索状态(向上搜索 n 依次向上)
  • /search\c : 输入搜索search忽略大小写按回车进入搜索状态(向下搜索 n 依次向下)
  • :wq : 保存并退出
  • :wq! : 强制保存并退出
  • :q! : 强制退出
  • :w : 保存
  • :q : 退出

以下为新增部分

  • yum install -y vim : 通过yum安装vim
  • :2,4move9 : 将第二行到第四行的内容移动到第九行的之上
  • :2,4copy9 : 将第二行到第四行的内容复制到第九行的之下
  • :%s#1997sty#sty1997#g : 将文件中1997sty全部替换为sty1997

% 全部

s substitute 替换

g global 全局 不加该参数 只会替换当前行第一个匹配的字符串

  • :2,4s#1997sty#sty1997#g : 将第二行到第四行中1997sty全部替换为sty1997
  • :2,$s#oldgirl#oldboy#g : 将第二行到尾行中1997sty全部替换为sty1997

视图模式

  • Ctrl + v : 进入视图模式
  • ↑↓←→ : 可以在进入视图模式后移动光标选择区域
  • A : 视图模式,从光标所在行的行尾位置进入编辑模式,编辑完成后按Esc应用到所有选中行
  • C : 视图模式,从光标所在位置进入编辑模式并剪切光标右侧所有内容,编辑完成后按Esc应用到所有选中行
  • I : 视图模式,从光标所在行的行首位置进入编辑模式,编辑完成后按Esc应用到所有选中行
  • y : 视图模式,复制选中块
  • p : 视图模式,将选中的内容替换为复制的内容

grep命令

(Global search Regular Expression and Print out the line)在文本文件中按照指定的正则进行全局搜索,并打印搜索出的行

  • cat 1997sty | grep "D" : 输出1997sty并在输出结果中查找,匹配"D"的行并输出
  • grep "D" 1997sty : 查找1997sty中,匹配"D"的行并输出
  • cat 1997sty | grep -in "d" : 输出1997sty并在输出结果中查找,匹配"D"的行并输出,显示行号,忽略大小写

常用参数

  • --color=auto : 对匹配到的文本着色显示
  • --color : 对匹配到的文本着色显示
  • -i : 忽略大小写
  • -n : 显示行号
  • -c : 统计匹配的行数
  • -o : 每个符合条件的字符串单独显示一行
  • -v : 输出不匹配的行
  • -w : 不匹配字符串中包含这个单词
  • -Ax : 在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after
  • -Bx : 在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before
  • -Cx : 在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context
  • -q : 不输出任何信息,使用echo $?查看结果,0表示匹配,1表示没有匹配
  • -P : 使用兼容perl的正则引擎
  • -E : 使用扩展正则表达式,而不是基本正则表达式,在使用"-E"选项时,相当于使用egrep

ss命令

(Socket Statistics)获取socket统计信息

  • ss : 获取socket统计信息

常用参数

  • -l : list 列表显示网络服务信息
  • -n : number 以数字方式进行显示
  • -u : udp 网络协议
  • -t : tcp 网络协议
  • -p : process 显示服务进程信息

netstat命令

显示网络相关信息

  • 如果无法使用命令,可以使用yum install -y net-tools安装

  • netstat : 显示网络相关信息

常用参数

  • -l : list 列表显示网络服务信息
  • -n : number 以数字方式进行显示
  • -u : udp 网络协议
  • -t : tcp 网络协议
  • -p : process 显示服务进程信息

less命令

查看文件

  • less 1997sty : 查看文件1997sty

操作命令

  • q : 退出
  • f : 向下一页
  • : 向下一行
  • b : 向上一页
  • : 向上一行
  • Space : 向下一页
  • Enter : 向下一行
  • ? : 输入搜索内容按回车进入搜索状态(向上搜索 n 依次向上)
  • / : 输入搜索内容按回车进入搜索状态(向下搜索 n 依次向下)

more命令

查看文件,查看到结尾时自动退出

  • more 1997sty : 查看文件1997sty

操作命令

  • q : 退出
  • f : 向下一页
  • b : 向上一页
  • Space : 向下一页
  • Enter : 向下一行

sed命令

  1. 擅长对行进行操作处理
  2. 擅长将文件的内容信息进行修改调整/删除
  3. 命令的匹配参数使用''修饰而不使用""
  4. 插入文本或替换文本可以使用\n\t

sed.png

执行参数

  • -n : 取消默认输出
  • -e : 可以指定多个命令
  • -f : 指定命令文件
  • -i : 将输出写入到原文件
  • -r : 使用高级正则匹配
  • -i.bak : 复制文件,文件名添加.bak再将输出结果写入到原文件 (该参数和其他参数同时使用时,需要写在最后一位)

  • 注意 : 使用-ni参数时,n参数会取消默认输出,i参数只会将匹配操作以后输出的结果写入文件,如果不注意,可能结果会与预想的不同(输出结果即为写入文件内容)
[root@1997sty ~]# sed -ni '1c\100,oldgirl,UFO' person.txt
[root@1997sty ~]# cat person.txt
#可能预想结果
100,oldgirl,UFO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO

#实际运行结果
100,oldgirl,UFO

匹配参数

左侧参数

  • 2 : 匹配第二行
  • 2,5 : 匹配第二行到第五行
  • 2,$ : 匹配第二行到行尾
  • /{}/ : 正则匹配行,高级正则匹配需要-r参数 {}内为匹配内容
  • /{}/,/{}/ : 正则匹配左侧表达式的行到右侧表达式的行,左侧表达式匹配不到不匹配全部行,右侧表达式匹配不到则匹配剩余全部行,高级正则匹配需要-r参数 {}内为匹配内容

右侧参数

  • a\{} : 从匹配行之后插入内容,\一般情况下可以省略 {}内为插入内容
  • i\{} : 从匹配行之前插入内容,\一般情况下可以省略 {}内为插入内容
  • c\{} : 替换匹配行内容,\一般情况下可以省略 {}内为替换内容
  • d : 删除匹配内容
  • !d : 删除不匹配内容
  • p : 输出匹配内容
  • !p : 输出不匹配内容
  • ; : 在两条完整的匹配参数中间加入;来分隔
  • s/{}/{}/g : 全局匹配替换 {}内为匹配内容和替换内容
  • s#{}#{}#g : 全局匹配替换 {}内为匹配内容和替换内容

  • 测试文本
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO

新增操作

  • sed '1i\100,oldgirl,UFO' person.txt : 在文件第一行之前插入100,oldgirl,UFO
  • sed '$a\108,oldgirl,UFO' person.txt : 在文件尾行之后插入100,oldgirl,UFO
  • sed -e '/oldboy/i\oldgirl' -e '/oldboy/a\olddog' person.txt : 在匹配oldboy行之前插入oldgirl,在匹配oldboy行之后插入olddog,多个命令使用-e追加
[root@1997sty ~]# sed '1i\100,oldgirl,UFO' person.txt
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@1997sty ~]# sed '$a\108,oldgirl,UFO' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
108,oldgirl,UFO
[root@1997sty ~]# sed -e '/oldboy/i\oldgirl' -e '/oldboy/a\olddog' person.txt
oldgirl
101,oldboy,CEO
olddog
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
oldgirl
106,oldboy,CIO
olddog

删除操作

  • sed '3d' person.txt : 删除第三行内容
  • sed '2,6d' person.txt : 删除第二行到第六行内容
  • sed '/oldboy/d' person.txt : 删除匹配oldboy行内容
  • sed '3d;6d' person.txt : 删除第三行和第六行内容
  • sed '/zhaoyao/,/alex/d' person.txt : 删除匹配zhaoyao行到匹配alex行内容,可以多次匹配,如果匹配alex行不存在则输出剩余全部行
[root@1997sty ~]# sed '3d' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@1997sty ~]# sed '2,6d' person.txt
101,oldboy,CEO
[root@1997sty ~]# sed '/oldboy/d' person.txt
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@1997sty ~]# sed '3d;6d' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
104,yy,CFO
105,feixue,CIO
[root@1997sty ~]# sed '/zhaoyao/,/alex/d' person.txt
101,oldboy,CEO

修改操作

  • sed '1c\100,oldgirl,UFO' person.txt : 替换第一行内容为100,oldgirl,UFO
  • sed '2c\\n' person.txt : 替换第二行内容为\n
  • sed '2c\' person.txt : 删除第二行(如果替换内容为空则效果为删除,如果替换内容不为空则会追加\n)
  • sed 'c\' person.txt : 删除所有行(如果替换内容为空则效果为删除,如果替换内容不为空则会追加\n)
  • sed '1,3c\' person.txt : 删除第一行到第三行(如果替换内容为空则效果为删除,如果替换内容不为空则会追加\n)
  • sed 's/#o/?/g' person.txt : 匹配所有#o内容并将该内容替换为?
  • sed 's#o#?#g' person.txt : 匹配所有o内容并将该内容替换为?
  • sed 's#o#?#' person.txt : 匹配每行第一个o内容并将该内容替换为?
  • sed 's#o#?#' person.txt : 匹配每行第一个o内容并将该内容替换为?
  • sed -r 's/(.*),[a-zA-Z]+,[A-Z]+/&,\1/g' person.txt : 匹配所有(.*),[a-zA-Z]+,[A-Z]+内容并将该内容替换为&,\1 (&为所有匹配内容,\1为第一个()内容)
  • sed -i.bak 's#o#?#g' person.txt : 匹配所有o内容并将该内容替换为?,复制文件,文件名添加.bak再将输出写入到原文件
[root@1997sty ~]# sed '1c\100,oldgirl,UFO' person.txt
100,oldgirl,UFO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@1997sty ~]# sed '2c\\n' person.txt
101,oldboy,CEO


103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@1997sty ~]# sed '2c\' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@1997sty ~]# sed 'c\' person.txt
[root@1997sty ~]# sed '1,3c\' person.txt
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@1997sty ~]# sed 's/#o/?/g' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO
[root@1997sty ~]# sed 's#o#?#g' person.txt
101,?ldb?y,CEO
102,zha?ya?,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,?ldb?y,CIO
[root@1997sty ~]# sed 's#o#?#' person.txt
101,?ldboy,CEO
102,zha?yao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,?ldboy,CIO
[root@1997sty ~]# sed -r 's/(.*),[a-zA-Z]+,[A-Z]+/&,\1/g' person.txt
101,oldboy,CEO,101
102,zhaoyao,CTO,102
103,Alex,COO,103
104,yy,CFO,104
105,feixue,CIO,105
106,oldboy,CIO,106
[root@1997sty ~]# sed -i.bak 's#o#?#g' person.txt
[root@1997sty ~]# ls person.txt*
person.txt  person.txt.bak

查询操作

  • sed -n '3p' person.txt : 取消默认输出,输出第三行内容
  • sed -n '1,3p' person.txt : 取消默认输出,输出第一行到第三行内容
  • sed -n '1p;3p' person.txt : 取消默认输出,输出第一行和第三行内容
  • sed -n '/oldboy/p' person.txt : 取消默认输出,输出匹配oldboy行内容
  • sed -n '/oldboy/,/Alex/p' person.txt : 取消默认输出,匹配oldboy行到匹配Alex行内容,可以多次匹配,如果匹配Alex行不存在则输出剩余全部行
  • sed -n '/oldboy/p;/Alex/p' person.txt : 取消默认输出,匹配oldboy行和匹配Alex行内容
  • sed -n '1,3!p' person.txt : 取消默认输出,输出不是第一行到第三行内容
[root@1997sty ~]# sed -n '3p' person.txt
103,Alex,COO
[root@1997sty ~]# sed -n '1,3p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
[root@1997sty ~]# sed -n '1p;3p' person.txt
101,oldboy,CEO
103,Alex,COO
[root@1997sty ~]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
106,oldboy,CIO
[root@1997sty ~]# sed -n '/oldboy/,/Alex/p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
106,oldboy,CIO
[root@1997sty ~]# sed -n '/oldboy/p;/Alex/p' person.txt
101,oldboy,CEO
103,Alex,COO
106,oldboy,CIO
[root@1997sty ~]# sed -n '1,3!p' person.txt
104,yy,CFO
105,feixue,CIO
106,oldboy,CIO

awk命令

awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

awk.png

执行参数

  • -F : 修改字段分隔符,支持正则表达式awk -F "正则表达式"(默认是空格)

awk内置变量

  • [A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
  • $n : 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段*
  • $0 : 这个变量包含执行过程中当前行的文本内容*
  • NF : 表示字段数,在执行过程中对应于当前的字段数[A]*
  • NR : 表示记录数,在执行过程中对应于当前的行号[A]*
  • FS : 字段分隔符(默认是任何空格)[A]*
  • OFMT : 数字的输出格式(默认值是%.6g)[A]
  • OFS : 输出字段分隔符(默认值是一个空格)[A]
  • ORS : 输出记录分隔符(默认值是一个换行符)[A]
  • RS : 记录分隔符(默认是一个换行符)[A]
  • FILENAME : 当前输入文件的名[A]
  • ARGV : 包含命令行参数的数组[N]
  • ARGC : 命令行参数的数目[N]
  • ERRNO : 最后一个系统错误的描述[N]
  • RSTART : 由match函数所匹配的字符串的第一个位置[N]
  • RLENGTH : 由match函数所匹配的字符串的长度[N]
  • SUBSEP : 数组下标分隔符(默认值是34)[N]
  • ENVIRON : 环境变量关联数组[P]
  • FNR : 同NR,但相对于当前文件[P]
  • ARGIND : 命令行中当前文件的位置(从0开始算)[G]
  • CONVFMT : 数字转换格式(默认值为%.6g)[G]
  • FIELDWIDTHS : 字段宽度列表(用空格键分隔)[G]
  • IGNORECASE : 如果为真,则进行忽略大小写的匹配[G]

  1. 如果没有条件,默认条件为匹配所有行
  2. 操作的{}内可以写逻辑代码
  3. 条件部分更像一个筛选,操作部分则执行条件部分筛选剩下的文本
  4. 条件和操作部分的整体使用''修饰,操作部分定义变量和字符串使用""修饰

条件

  • NR==2 : 匹配第二行
  • NR>=2, : 匹配第二行以后的行
  • NR>2 : 第三行以后的行
  • NR==2,NR==5 : 第二行到第五行
  • NR==2;NR==5 : 第二行和第五行
  • /{}/ : 正则匹配行,{}内为匹配内容
  • !/{}/ : 正则不匹配行,{}内为匹配内容(反向匹配)
  • /{}/,/{}/ : 正则匹配左侧表达式的行到右侧表达式的行,左侧表达式匹配不到不匹配全部行,右侧表达式匹配不到则匹配剩余全部行,{}内为匹配内容
  • $1~/{}/ : 第一列正则匹配行,{}内为匹配内容
  • $1!~/{}/ : 第一列正则不匹配行,{}内为匹配内容(反向匹配)
  • $1>1000 : 第一列大于1000的行
  • $1=="root" : 第一列为root的行

操作

  • BEGIN{} : BEGIN语句块 在awk开始从输入流中读取行 之前 被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中,该语句块左侧不能有模式语句如果有需要使用;隔开
  • {} : pattern语句块 中的通用命令是最重要的部分,它也是可选的如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块
  • END{} : END语句块 在awk从输入流中读取完所有的行 之后 即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块,该语句块左侧不能有模式语句如果有需要使用;隔开

  • 测试文本
Zhang   Dandan    41117397    :250:100:175
Zhang   Xiaoyu    390320151   :155:90:201
Meng    Feixue    80042789    :250:60:50
Wu      Waiwai    70271111    :250:80:75
Liu     Bingbing  41117483    :250:100:175
Wang    Xiaoai    3515064655  :50:95:135
Zi      Gege      1986787350  :250:168:200
Li      Youjiu    918391635   :175:75:300
Lao     Nanhai    918391635   :250:100:175

查询信息

  • awk 'NR==2{print $0}' awk_test.txt : 输出第二行的所有内容({print $0}可以省略)
  • awk 'NR>2{print $0}' awk_test.txt : 输出第三行以后的所有内容
  • awk 'NR>=2{print $0}' awk_test.txt : 输出第二行以后的所有内容
  • awk 'NR==2,NR==5' awk_test.txt : 输出第二行到第五行的所有内容
  • awk 'NR==2;NR==5' awk_test.txt : 输出第二行和第五行的所有内容
  • awk 'NR==2{print $1};NR==5' awk_test.txt : 输出第二行第一列和第五行的所有内容
  • awk '$2~/Xiaoyu/' awk_test.txt : 输出第二列匹配Xiaoyu行的所有内容
  • awk '{print $NF}' awk_test.txt : 输出所有行的最后一列内容 $NF表示最后一列 NF表示列数
  • awk -F "[ :]+" '{print $4}' awk_test.txt : 以[ :]+正则匹配的内容为分隔符,输出第五列内容
  • awk '/Xiaoyu/;BEGIN{FS="[: ]+"}{print $4}' awk_test.txt : 先将FS设为[: ]+,输出匹配Xiaoyu行的所有内容,再输出第四列内容,效果等同于awk '/Xiaoyu/{print $0};BEGIN{FS="[: ]+"}{print $4}' awk_test.txt(FS为内容分隔符)
[root@1997sty ~]# awk 'NR==2{print $0}' awk_test.txt
Zhang   Xiaoyu    390320151   :155:90:201
[root@1997sty ~]# awk 'NR>2{print $0}' awk_test.txt
Meng    Feixue    80042789    :250:60:50
Wu      Waiwai    70271111    :250:80:75
Liu     Bingbing  41117483    :250:100:175
Wang    Xiaoai    3515064655  :50:95:135
Zi      Gege      1986787350  :250:168:200
Li      Youjiu    918391635   :175:75:300
Lao     Nanhai    918391635   :250:100:175
[root@1997sty ~]# awk 'NR>=2{print $0}' awk_test.txt
Zhang   Xiaoyu    390320151   :155:90:201
Meng    Feixue    80042789    :250:60:50
Wu      Waiwai    70271111    :250:80:75
Liu     Bingbing  41117483    :250:100:175
Wang    Xiaoai    3515064655  :50:95:135
Zi      Gege      1986787350  :250:168:200
Li      Youjiu    918391635   :175:75:300
Lao     Nanhai    918391635   :250:100:175
[root@1997sty ~]# awk 'NR==2,NR==5' awk_test.txt
Zhang   Xiaoyu    390320151   :155:90:201
Meng    Feixue    80042789    :250:60:50
Wu      Waiwai    70271111    :250:80:75
Liu     Bingbing  41117483    :250:100:175
[root@1997sty ~]# awk 'NR==2;NR==5' awk_test.txt
Zhang   Xiaoyu    390320151   :155:90:201
Liu     Bingbing  41117483    :250:100:175
[root@1997sty ~]# awk 'NR==2{print $1};NR==5' awk_test.txt
Zhang
Liu     Bingbing  41117483    :250:100:175
awk '$2~/Xiaoyu/' awk_test.txt
[root@1997sty ~]# awk '$2~/Xiaoyu/' awk_test.txt
Zhang   Xiaoyu    390320151   :155:90:201
[root@1997sty ~]# awk '{print $NF}' awk_test.txt
:250:100:175
:155:90:201
:250:60:50
:250:80:75
:250:100:175
:50:95:135
:250:168:200
:175:75:300
:250:100:175
[root@1997sty ~]# awk -F "[ :]+" '{print $4}' awk_test.txt
250
155
250
250
250
50
250
175
250
[root@1997sty ~]# awk '/Xiaoyu/;BEGIN{FS="[: ]+"}{print $4}' awk_test.txt
250
Zhang   Xiaoyu    390320151   :155:90:201
155
250
250
250
50
250
175
250

排除信息

  • awk '$2!~/Xiaoyu/' awk_test.txt : 输出第二列不匹配Xiaoyu行的所有内容(反向匹配)
[root@1997sty ~]# awk '$2!~/Xiaoyu/' awk_test.txt
Zhang   Dandan    41117397    :250:100:175
Meng    Feixue    80042789    :250:60:50
Wu      Waiwai    70271111    :250:80:75
Liu     Bingbing  41117483    :250:100:175
Wang    Xiaoai    3515064655  :50:95:135
Zi      Gege      1986787350  :250:168:200
Li      Youjiu    918391635   :175:75:300
Lao     Nanhai    918391635   :250:100:175

统计信息

  • awk '{i++}END{print i}' awk_test.txt : 每读取一行i自增,结束后输出结果(统计行数)
[root@1997sty ~]# awk '{i++}END{print i}' awk_test.txt
9

替换信息

  • awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt : 第二列匹配Xiaoyu行,正则匹配:并替换为$,范围是$NF列,输出$NF列(gsub第三个参数不填,默认为$0)
[root@1997sty ~]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk_test.txt
$155$90$201

tr命令

输出替换后内容,不会修改原文件

  • tr '1' 'x' < 1997sty : 将1997sty文件中的1替换为x,输出替换后的结果,不修改原文件
  • tr 'a-z' 'A-Z' < 1997sty : 将1997sty文件中的小写字母替换为大写字母,输出替换后的结果,不修改原文件

file命令

辨识文件类型

  • file 1997sty : 查看1997sty的文件类型

ln命令

(link)创建链接文件

  • ln -s 1997sty 1997sty_link : 创建一个1997sty文件的软链接1997sty_link
  • ln 1997sty 1997sty_link : 创建一个1997sty文件的硬链接1997sty_link

软、硬链接说明

  • 软链接:不可以删除源文件,删除源文件导致链接文件找不到,出现文件红色闪烁
  • 硬链接:可以删除源文件,链接文件可以正常打开,索引信息相同

find命令

查找文件

  • find /root : 查找/root目录下的文件或目录,并显示文件路径
  • find /root -type f -name '1*' : 查找/目录下,类型为普通文件,名字为1*(*匹配任何字符)开头的文件或目录,并显示文件路径
  • find /root : 查找/root目录下的文件或目录,并显示文件路径
  • find /root -name '1*' : 查找/root目录下的文件,名字为1*开头的文件或目录,并显示文件路径
  • find /root -iname '*sty' : 查找/root目录下的文件,名字为*sty开头的文件或目录忽略大小写,并显示文件路径
  • find /root -maxdepth 1 -name '*sty' : 查找/root目录下的文件,查找深度为递归当前一级目录,名字为*sty开头的文件或目录,并显示文件路径
  • find /root -maxdepth 3 -name '*sty' : 查找/root目录下的文件,查找深度为递归当前三级目录,名字为*sty开头的文件或目录,并显示文件路径
  • find /root -size +100 : 查找/root目录下大于100K的文件
  • find /root -size -100 : 查找/root目录下小于100K的文件
  • find /root -size +1M : 查找/root目录下大于1M的文件
  • find -type f -name "*.txt" -exec cp {} txtdir/ \; : 查找当前目录下.txt结尾的文件,将找出的文件进行批量复制到/txtdir目录中

-exec 参数后面跟的是command命令,它是以;为结束标志的,所以分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加\,{}表示的是代表前面find查找出来的文件名

  • find -type f -name "*.txt" -delete : 查找当前目录下.txt结尾的文件,将找出的文件进行删除
  • find -type f -name "*.txt" | xargs rm -f : 查找当前目录下.txt结尾的文件,将结果通过xargs命令转换为单行并执行删除命令
  • find -type f -perm 777 : 查找当前目录下权限为777的文件(匹配三组权限位,完全匹配才算命中)
  • find -type f -perm -644 : 查找当前目录下权限大于644的文件(匹配一组权限位,只要其中一组权限位匹配才算命中)
  • find -type f -perm /622 : 查找当前目录下权限满足622的文件(匹配一个权限位,只要其中一个权限位匹配才算命中)
  • find -amin +1 : 查找当前目录下,访问时间1分钟前的文件
  • find -atime +1 : 查找当前目录下,访问时间1天前的文件
  • find -amin -1 : 查找当前目录下,访问时间1分钟内的文件
  • find -atime -1 : 查找当前目录下,访问时间1天内的文件

-amin +1 访问时间1分钟前 -atime +1 访问时间1天前

-mmin +1 修改时间1分钟前 -mtime +1 修改时间1天前

-cmin +1 改动时间1分钟前 -ctime +1 改动时间1天前

-amin -1 访问时间1分钟内 -atime -1 访问时间1天内

-mmin -1 修改时间1分钟内 -mtime -1 修改时间1天内

-cmin -1 改动时间1分钟内 -ctime -1 改动时间1天内

find.png

执行参数

  • -maxdepth : 查找目录层级的深度
  • -inum : 根据文件inode信息查找
  • -exec : 对查找出的数据进行相应处理
  • -perm : 根据权限查找数据信息
  • -iname : 忽略名称大小写
  • -delete : 删除查找的内容

-size文件大小单位

  • b for 512-byte blocks (this is the default if no suffix is used)
  • c for bytes
  • w for two-byte words
  • k for Kilobytes (units of 1024 bytes)
  • M for Megabytes (units of 1048576 bytes)
  • G for Gigabytes (units of 1073741824 bytes)

systemctl命令

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器

  • systemctl : 查看管理服务程序的运行状态
  • systemctl start sshd : 启动sshd服务
  • systemctl stop sshd : 停止sshd服务
  • systemctl restart sshd : 重启sshd服务
  • systemctl status sshd : 查看sshd服务详细的运行状态
  • systemctl disable sshd : 设置sshd服务开机不运行
  • systemctl enable sshd : 设置sshd服务开机运行
  • systemctl is-active sshd : 检查确认sshd服务是否运行
  • systemctl is-enabled sshd : 检查确认sshd服务是否开机运行

locate命令

查找文件,快速定位文件路径

  • Centos7中默认不存在该命令,需要进行安装
yum install -y mlocate
  • 安装完成后需要执行一下命令来建立索引,如果要搜索刚刚创建的文件,需要先执行以下命令创建索引后再搜索
updatedb
  • locate 1997sty : 搜索包含1997sty的文件和目录,并打印输出

tree命令

显示目录结构信息

  • Centos7中默认不存在该命令,需要进行安装
yum install -y tree
  • tree /root : 显示/root目录中的所有数据和所有结构信息
  • tree -L 2 / : 查看/目录结构层级信息
  • tree -d /root : 显示/root目录中所有结构信息

tar命令

用来压缩和解压文件 tar本身不具有压缩功能,通过调用压缩功能实现

  • tar -zcvf 1997sty.tar.gz 1997sty : 创建1997sty.tar.gz压缩文件,内容为1997sty文件或目录
  • tar -zcvf 1997sty.tar.gz 1997sty 1997sty.bak : 创建1997sty.tar.gz压缩文件,内容为1997sty,1997sty.bak文件或目录
  • tar -zxvf 1997sty.tar.gz : 提取1997sty.tar.gz压缩文件到当前目录
  • tar -tf 1997sty.tar.gz : 直接查看压缩包里面的数据
  • tar -zcvf 1997sty.tar.gz ./dirtest --exclude 1997sty.bak : 创建1997sty.tar.gz压缩文件,内容为dirtest目录,并且排除1997sty.bak文件(对需要排除的文件路径,尽量使用相对路径描述,否则可能排除失败)
  • tar -zcvf 1997sty.tar.gz ./dirtest --exclude-from notar : 创建1997sty.tar.gz压缩文件,内容为dirtest目录,并且排除notar文件中的记录的文件名(对记录排除信息的文件路径,尽量使用相对路径描述,否则可能排除失败)
  • find /root -name '*.txt' | xargs tar -zcvf 1997sty.tar.gz : 查找/root目录下的文件,名字为*.txt的文件或目录,并将结果通过xargs命令转为单行传递给tar命令进行创建1997sty.tar.gz压缩文件
  • tar -zcvf 1997sty.tar.gz `find /root -name '*.txt'` : 查找/root目录下的文件,名字为*.txt的文件或目录,并将结果传递给tar命令进行创建1997sty.tar.gz压缩文件

绝对路径压缩说明

tar: Removing leading / from member names

tar: 从成员名中删除开头的/

如果使用绝对路径,在解压时会将所有路径还原到当前路径下,所以推荐使用相对路径

tar -zcvf 1997sty.tar.gz /root/dirtest/1997sty

执行参数

  • -z : 支持gzip解压文件*
  • -c : 建立新的压缩文件*
  • -x : 从压缩的文件中提取文件*
  • -v : 显示操作过程*
  • -f : 指定压缩文件*
  • -j : 支持bzip2解压文件*
  • -t : 显示压缩文件的内容*
  • -A : 新增压缩文件到已存在的压缩
  • -B : 设置区块大小
  • -b : 设置区块数目
  • -C : 切换到指定目录
  • -d : 记录文件的差别
  • -k : 保留原有文件不覆盖
  • -l : 文件系统边界设置
  • -m : 保留文件不被覆盖
  • -r : 添加文件到已经压缩的文件
  • -u : 添加改变了和现有的文件到已经存在的压缩文件
  • -W : 确认压缩文件的正确性
  • -Z : 支持compress解压文件
  • --help : 显示帮助信息
  • --version : 显示版本信息

stat命令

查看文件的详细信息

  • stat 1997sty : 查看1997sty的详细信息

date命令

查看时间信息

  • date : 查看时间信息
  • date "+%F" : 以其他格式查看时间信息
  • date -s "20201212" : 设置时间为20201212
  • date -d "+10year" : 查看10年以后时间信息

year 年 month 月 day 日 hour 时 min 分 sec 秒

执行参数

  • %F : 完整日期;与%Y-%m-%d相同
  • %H : 小时(00..23)
  • %I : 小时(01..12)
  • %k : 小时(0..23)
  • %l : 小时(1..12)
  • %M : 分钟(00..59)
  • %p : 显示本地 AM 或 PM
  • %r : 直接显示时间 (12 小时时制,格式为 hh:mm:ss [AP]M)
  • %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到当前为为止的秒数
  • %S : 秒(00..61)
  • %T : 直接显示时间 (24 小时制)
  • %X : 相当于 %H:%M:%S
  • %Z : 显示时区 %a** : 星期几(Sun..Sat)
  • %A : 星期几 (Sunday..Saturday)
  • %b : 月份 (Jan..Dec)
  • %B : 月份 (January..December)
  • %c : 直接显示期与时间
  • %d : 日 (01..31)
  • %D : 直接显⽰⽇期 (mm/dd/yy)
  • %h : 同 %b
  • %j : 一年中的第几天 (001..366)
  • %m : 月份 (01..12)
  • %U : 一年中的第几周 (00..53) ( 以 Sunday 为一周的第几天的情形)
  • %w : 一周中的第几天 (0..6)
  • %W :一年中的第几周 (00..53) ( 以 Monday 为几周的第几天的情形)
  • %x : 直接显示日期 (mm/dd/yy)
  • %y : 年份的最后两位数字 (00.99)
  • %Y : 完整年份 (0000..9999)

date命令其他使用方法

  • cp 1997sty 1997sty`date +%F` : 复制1997sty文件,并在后面追加时间信息

时间同步

  • 使用ntpdate命令同步时间 Centos7默认没有该命令需要安装
yum install -y ntpdate
#安装完成后执行以下命令
ntpdate ntp1.aliyun.com

xargs命令

命令传递参数的一个过滤器,也是组合多个命令的一个工具,可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据,也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行

  • xargs < 1997sty : 查看1997sty文件,并将结果通过xargs命令单行输出
  • xargs -n3 < 1997sty : 查看1997sty文件,并将结果通过xargs命令每行输出三行结果

wc命令

计算文件的Byte数、字数、或是列数

  • wc -l 1997sty : 显示1997sty文件行数

chmod命令

只能文件属主或特权用户才能使用该功能来改变文件存取模式

  • chmod 777 1997sty : 对当前目录下的1997sty文件赋予777权限
  • chmod a=rwx 1997sty : 对当前目录下的1997sty文件赋予777权限
  • chmod u-w 1997sty : 对当前目录下的1997sty文件的属主减去写权限
  • chmod g-w 1997sty : 对当前目录下的1997sty文件的属组减去写权限
  • chmod a-w 1997sty : 对当前目录下的1997sty文件的属主属组其他用户减去写权限
  • chmod a=rwx,o= 1997sty : 对当前目录下的1997sty文件的属主属组其他用户赋予777权限,其他用户没有权限
  • chmod -R 777 1997sty : 对当前目录下的1997sty目录,子目录,文件递归修改为777权限

执行参数

  • -R : 对当前目录下所有文件和目录递归修改权限

权限参数

  • a : 所有用户
  • u : 所属用户
  • g : 所属组
  • o : 其他用户
  • = : 等于权限
  • + : 增加权限
  • - : 减去权限
  • r : 读权限(4)
  • w : 写权限(2)
  • x : 执行权限(1)

umask命令

权限掩码,umask值表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值

  • umask : 查看umask值(root用户默认为0022 普通用户为0002)
  • umask 000 : 临时设置umask值为000

如果要永久设置umask值,需要/etc/profile中以下内容并修改后重新加载文件

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

文件目录初始权限计算

  • 并不是666-033=633 而是掩去umask值的权限位 剩下没有掩去的权限位就是文件目录的初始权限
  • 文件默认最大权限为666 umask值为022 结果为644(-rw-rw-rw-)–(-----w--w-)=(-rw-r--r--)
  • 文件默认最大权限为666 umask值为033 结果为644(-rw-rw-rw-)–(-----wx-wx)=(-rw-r--r--)
  • 目录默认最大权限为777 umask值为022 结果为755(-rwxrwxrwx)–(-----w--w-)=(-rwxr-xr-x)
  • 目录默认最大权限为777 umask值为033 结果为744(-rwxrwxrwx)–(-----wx-wx)=(-rwxr--r--)

useradd命令

创建用户命令

  • useradd 1997sty : 创建一个1997sty用户
  • useradd 1997sty -M -s /sbin/nologin : 创建一个1997sty用户,不创建家目录,指定shell登录方式为/sbin/nologin(无法登录的用户)
  • useradd 1997sty -u 2000 : 创建一个1997sty用户,指定用户uid为2000
  • useradd 1997sty -g 1997sty_1 -G 1997sty_2 : 创建一个1997sty用户,指定用户所属组为1997sty_1,指定用户附属组为1997sty_2
  • useradd 1997sty -c "manager" : 创建一个1997sty用户,注释信息为manager

指定用户shell登录方式

  • /bin/bash通用的解释器
  • /usr/bin/sh等价于/bin/bash
  • /usr/bin/bash等价于/bin/bash
  • /sbin/nologin无法登录系统
  • /usr/sbin/nologin无法登录系统

执行参数

  • -M : 不创建家目录
  • -s : 指定用户shell登录方式
  • -u : 指定用户uid信息
  • -g : 指定用户所属主要组信息
  • -G : 指定用户所属附属组信息
  • -c : 指定用户注释信息

usermod命令

修改用户信息

  • usermod 1997sty -s /sbin/nologin : 修改1997sty用户,指定shell登录方式为/sbin/nologin(无法登录的用户)
  • usermod 1997sty -u 3000 : 修改1997sty用户,指定uid为3000

指定用户shell登录方式

  • /bin/bash通用的解释器
  • /usr/bin/sh等价于/bin/bash
  • /usr/bin/bash等价于/bin/bash
  • /sbin/nologin无法登录系统
  • /usr/sbin/nologin无法登录系统

执行参数

  • -s : 指定用户shell登录方式
  • -u : 指定用户uid信息
  • -g : 指定用户所属主要组信息
  • -G : 指定用户所属附属组信息
  • -c : 指定用户注释信息

userdel命令

删除用户信息

  • userdel 1997sty : 删除1997sty用户
  • userdel -r 1997sty : 删除1997sty用户以及用户的家目录

passwd命令

修改用户密码信息

  • passwd : 修改当前用户密码
  • passwd 1997sty : 修改1997sty用户密码

非交互式设置密码

  • echo 123456|passwd --stdin 1997sty : 修改1997sty用户密码

企业中密码管理

  1. 密码要复杂12位以上字母数字及特殊符号
  2. 保存好密码信息 keepass 密码保险柜,本地存储密码 lastpass 密码保险柜,在线存储密码
  3. 大企业 用户和密码统一管理 相当于活动目录AD openldap域 用户信息统一保存在一个用户管理服务器中 用户的家目录中的文件 用户密码 用户名称
  4. 动态密码:动态口令,第三方提供自己开发也很简单

groupadd命令

创建用户组

  • groupadd 1997sty_group : 创建1997sty_group用户组
  • groupadd -g 1234 1997sty_group : 创建1997sty_group用户组,gid为1234

groupmod命令

修改用户组

  • groupmod -n group_1997sty 1997sty_group : 修改1997sty_group用户组名为group_1997sty
  • groupmod -g 1234 1997sty_group : 修改1997sty_group用户组gid为1234

groupdel命令

删除用户组

  • groupdel 1997sty_group : 删除1997sty_group用户组

chown命令

修改文件属主和属组信息

  • chown 1997sty /root/1997sty : 修改1997sty文件属主信息为1997sty
  • chown 1997sty.1997sty /root/1997sty : 修改1997sty文件属主和属组信息为1997sty
  • chown -R 1997sty.1997sty /root/1997sty : 修改1997sty目录,子目录和目录内文件的属主和属组信息为1997sty

id命令

查看用户信息

  • id : 查看当前用户信息
  • id root : 查看root用户信息

w命令

显示正在登陆系统的用户信息

  • w : 显示正在登陆系统的用户信息
 16:23:53 up 4 days,  1:00,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1        13:41    1.00s  0.22s  0.22s -bash

参数说明

  1. 登录用户
  2. 登录方式 pts/x 远程登录系统 tty1 本地登录
  3. 登录到服务器的地址
  4. 登录时间
  5. IDLE 空闲时间
  6. 用户操作系统 消耗的CPU资源时间
  7. 用户操作系统 消耗的CPU资源时间
  8. 用户进行的操作

发送文本给其他登录用户

  • echo "发送该文本到其他登录用户的命令行" >/dev/pts/1 : 发送该文本到其他登录用户的命令行

su命令

切换用户命令

  • su 1997sty : 切换到1997sty用户
  • su - 1997sty : 切换到1997sty用户,并且更改所有变量(使用env命令查看)
[root@1997sty ~]# su - 1997sty
上一次登录:一 11月 25 18:23:58 CST 2019pts/2 上
[1997sty@1997sty ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/1997sty/.local/bin:/home/1997sty/bin
[1997sty@1997sty ~]$ exit
登出
[root@1997sty ~]# su 1997sty
[1997sty@1997sty root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.local/bin:/root/bin

visudo命令

编辑/etc/sudoers只读文件,可以赋予其他用户权限

  • 1997sty ALL=(ALL) /usr/sbin/useradd, /usr/bin/rm该行文本赋予了1997sty用户useradd,rm命令root级别的权限,修改完成后:wq保存退出(位于文本第91行)
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
1997sty ALL=(ALL)       /usr/sbin/useradd, /usr/bin/rm

配置方法

#配置单个或多个命令
1997sty ALL=(ALL)       /usr/sbin/useradd, /usr/bin/rm
#授权单个命令目录或多个命令目录,并排除visudo命令
/usr/sbin/*, !/usr/sbin/visudo , /usr/bin/*
#不需要输入用户密码,可以直接sudo方式执行命令
NOPASSWD: /usr/sbin/*, !/usr/sbin/visudo , /usr/bin/*

sudo命令

让普通用户执行root命令的一个工具

  • sudo useradd 1997stysudo : 使用sudo命令创建一个1997stysudo用户(普通用户执行该命令且被赋予该root权限)
  • sudo rm -rf /root/1997sty : 使用sudo命令强制删除1997sty文件(普通用户执行该命令且被赋予该root权限)
  • sudo -l : 使用sudo命令查看被赋予的root权限(普通用户执行该命令且被赋予该root权限)

sudo命令近期第一次使用时提示以下信息并要求输入密码

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

  #1) Respect the privacy of others.
  #1) 尊重别人的隐私。
  #2) Think before you type.
  #2) 输入前要先考虑(后果和风险)。
  #3) With great power comes great responsibility.
  #3) 权力越大,责任越大。
[sudo] password for 1997sty: 
User oldboy may run the following commands on 1997sty:
  (ALL) /usr/sbin/useradd, /usr/bin/rm

chattr命令

用于改变文件属性

  • chattr +i /etc/passwd : /etc/passwd不得任意更动
  • chattr -i /etc/passwd : /etc/passwd可以任意更动

执行参数

  • a : 让文件或目录仅供附加用途。
  • b : 不更新文件或目录的最后存取时间。
  • c : 将文件或目录压缩后存放。
  • d : 将文件或目录排除在倾倒操作之外。
  • i : 不得任意更动文件或目录。
  • s : 保密性删除文件或目录。
  • S : 即时更新文件或目录。
  • u : 预防意外删除。

lsattr命令

用于显示文件属性

  • lsattr /etc/passwd : 查看/etc/passwd属性

crontab命令

定时任务服务

  • crontab -l : 用户定时任务查看
  • crontab -e : 用户定时任务编辑

定时规则

QQ图片20191125181058.png

# 每分钟
* * * * *
# 每小时第20分钟
20 * * * *
# 每小时第10分钟和第20分钟
10,20 * * * *
# 每小时第10分钟到第20分钟
10-20 * * * *
# 每10分钟
*/10 * * * *
# 每个小时10分钟后的每两分钟
10/2 * * * *
# 每天14点的每分钟
* 14 * * *
# 每天14点的每分钟
0 14 * * *
# 每月4日
* * 4 * *
# 每年4月
* * * 4 *
# 每个星期六
* * * * 6

fdisk命令

管理小于2T的磁盘,所有的操作记录在内存中不会立刻生效,直到输入w

  • fdisk -l : 查看所有磁盘

已知磁盘/dev/sdb 对磁盘进行分区操作

  • d : 删除分区
  • g : 创建一个新的空GPT分区表(处理大于2T的磁盘)
  • l : 列出已知的分区类型
  • m : 打印此菜单
  • n : 添加新分区
  • o : 创建新的空DOS分区表(处理小于2T的磁盘)
  • p : 打印分区表
  • q : 不保存更改就退出
  • t : 更改分区的系统id
  • u : 改变分区的方式/是否按照扇区进行划分
  • w : 将表写入磁盘并退出
[root@1997sty ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x50b1173a 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

命令(输入 m 获取帮助):

添加新分区,最多可以创建4个主分区或者3个主分区和1个扩展分区

  • p primary (0 primary, 0 extended, 4 free)
  • p 主分区(0 主分区,0 扩展分区, 4个可用)
  • e extended
  • e 扩展分区
命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB

删除分区,如果只有1个分区就会直接删除

命令(输入 m 获取帮助):d
分区号 (1,2,默认 2):2
分区 2 已删除

添加扩展分区,需要添加逻辑分区才可以使用

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
分区号 (2-4,默认 2):
起始 扇区 (2099200-20971519,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-20971519,默认为 20971519):+3G
分区 2 已设置为 Extended 类型,大小设为 3 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 5
起始 扇区 (2101248-8390655,默认为 2101248):
将使用默认值 2101248
Last 扇区, +扇区 or +size{K,M,G} (2101248-8390655,默认为 8390655):
将使用默认值 8390655
分区 5 已设置为 Linux 类型,大小设为 3 GiB

将表写入磁盘并退出

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x7a1accec

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     8390655     2097152   83  Linux
/dev/sdb3         8390656    16779263     4194304    5  Extended
/dev/sdb4        16779264    16781311        1024   83  Linux
/dev/sdb5         8392704    14684159     3145728   83  Linux
/dev/sdb6        14686208    16779263     1046528   83  Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.

parted命令

管理大于2T磁盘,分区后直接生效

已知磁盘/dev/sdc 对磁盘进行分区操作

  • mklabel,mktable LABEL-TYPE create a new disklabel (partition table) ---- 创建新的磁盘标签(分区表)
  • print [devices|free|list,all|NUMBER] display the partition table, available devices, free space, all found partitions, or a particular partition ---- 显示分区表、可用设备、可用空间、所有找到的分区或特定分区
  • mkpart PART-TYPE [FS-TYPE] START END make a partition ---- 创建一个分区
  • quit exit program ---- 退出程序
  • rm NUMBER delete partition NUMBER ---- 删除分区 NUMBER
[root@1997sty ~]# parted /dev/sdc
GNU Parted 3.1
使用 /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END

  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted) 

修改磁盘分区类型

(parted) mklabel gpt                                                      
警告: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? y  
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  标志

磁盘分区

(parted) mkpart primary 0  2100G                                          
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? i                                                
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 3221GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     标志
 1      17.4kB  2100GB  2100GB               primary

partprobe命令

系统重新读取分区表,不重启服务器情况下重新读取分区列表

  • partprobe : 系统重新加载分区表
  • partprobe /dev/sdb : 系统重新加载/dev/sdb分区表

mkfs命令

(Make FileSystem) 在特定的分区上建立linux文件系统(格式化操作)

  • mkfs.xfs /dev/sdc1 : 在/dev/sdc建立xfs文件系统
  • mkfs /dev/sdc1 : 在/dev/sdc建立ext2文件系统
  • mkfs -t xfs /dev/sdb4 : 在/dev/sdb4建立xfs文件系统

dd命令

可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件 设备 标准输出

  • dd if=/dev/zero of=/tmp/file1000M bs=10M count=100 : 从/dev/zero输入信息,输出信息到/tmp/file1000M,每次输入10M,进行100次

常用参数

  • if=文件名 : 输入文件名,默认为标准输入即指定源文件
  • of=文件名 : 输出文件名,默认为标准输出即指定目的文件
  • ibs=bytes : 一次读入bytes个字节,即指定一个块大小为bytes个字节
  • obs=bytes : 一次输出bytes个字节,即指定一个块大小为bytes个字节
  • bs=bytes : 同时设置读入/输出的块大小为bytes个字节
  • cbs=bytes : 一次转换bytes个字节,即指定转换缓冲区大小
  • skip=blocks : 从输入文件开头跳过blocks个块后再开始复制
  • seek=blocks : 从输出文件开头跳过blocks个块后再开始复制
  • count=blocks : 仅拷贝blocks个块,块大小等于ibs指定的字节数

sort命令

可针对文本文件的内容,以行为单位来排序

  • sort -n -k2 num.txt : 对第二列,依照数值的大小排序,并输出
  • sort -n num.txt : 依照数值的大小排序,并输出

常用参数

  • -b : 忽略每行前面开始出的空格字符
  • -c : 检查文件是否已经按照顺序排序
  • -d : 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
  • -f : 排序时,将小写字母视为大写字母
  • -i : 排序时,除了040至176之间的ASCII字符外,忽略其他的字符
  • -m : 将几个排序好的文件进行合并
  • -M : 将前面3个字母依照月份的缩写进行排序
  • -n : 依照数值的大小排序
  • -o : 将排序后的结果存入指定的文件
  • -r : 以相反的顺序来排序

du命令

显示目录或文件的大小

  • du : 查看当前目录下的文件和目录大小
  • du -s / : 查看/目录的大小
  • du -sh / : 查看/目录的大小,以K,M,G为单位,提高信息的可读性

常用参数

  • -s : 显示该文件或目录的信息
  • -h : 以K,M,G为单位,提高信息的可读性