Linux基础知识

目录

[TOC]

文件处理命令-目录处理命令

ls 显示目录/文件

  • 英文原意:list
  • 存放路径:/bin/list
  • 执行权限:所有用户
  • 选项
    • -a:显示所有文件,包括隐藏文件
    • -l 详细目录下文件信息显示
    • -lh 显示的内容和-l是相同的,不过第5列的字节变成了相应的k或者Mb这种更符合日常习惯的
    • -ld 查看目录属性
    • -i 查看目录下文件以及文件的id号

mkdir 创建新目录

  • 英文原意:make directories
  • 存放路径:/bin/mkdir
  • 执行权限:所有用户
  • 选项
    1. -p 递归创建

touch 创建新文件

  • 英文原意:touch
  • 存放路径:/bin/touch
  • 执行权限:所有用户

CP 复制文件或目录

  • 英文原意:copy
  • 存放路径:/bin/cp
  • 执行权限:所有用户
  • 语法:cp -rp [原文件或者目录] [目标目录] ps:直接cp [原文件或者目录] [目标目录] 只能复制文件,不能复制目录
  • 选项
    1. -r 复制目录
    2. -p保留文件属性

mv 剪切文件、改名

  • 英文原意:move
  • 存放路径:/bin/mv
  • 执行权限:所有用户
  • 语法:mv [原文件或者目录] [目标目录]

rm 删除文件或目录

  • 英文原意:remove
  • 存放路径:/bin/rm
  • 执行权限:所有用户
  • 语法:rm [原文件或者目录]
  • 选项
    1. -r 删除目录
    2. -f 强制执行

cat 显示短文件内容(正向列示)

  • 英文原意:cat
  • 存放路径:/bin/cat
  • 执行权限:所有用户
  • 语法:cat [文件名]
  • 选项
    1. -n 显示行号

tac 显示短文件内容(反向列示)

  • 英文原意:tac
  • 存放路径:/usr/bin/tac
  • 执行权限:所有用户
  • 语法:tac [文件名]

more 分页显示长文件内容

  • 英文原意:more
  • 存放路径:/bin/more
  • 执行权限:所有用户
  • 语法:more [文件名]
    1. 空格或f : 翻页
    2. Enter: 换行
    3. q或Q: 退出

less 与more类似,可向上翻页

  • 英文原意:less
  • 存放路径:/usr/bin/less
  • 执行权限:所有用户
  • 语法:less [文件名]
  • 补充
    1. pgup:一页一页向上翻
    2. 上箭头:一行一行向上翻
    3. /[搜索词]: 可以看到搜索的词高亮,类似网页的关键词检索。按n即可需找下一个

head 显示文件的前几行

  • 英文原意:head
  • 存放路径:/usr/bin/head
  • 执行权限:所有用户
  • 语法:head [文件名] (不主动指定会默认显示前10行)
  • 选项
    1. -n 指定行数 例:head -n 7 [文件名或绝对路径]表示查看目标文件的前7行

tail 显示文件的后几行

和head类似

  • 补充:
    1. -f:文件内容动态显示,例如当一个log文件在不断更新时打开,所看到的打开的文件也会更新

pwd 显示当前目录

  • 英文原意:
  • 存放路径:/bin/pwd
  • 执行权限:所有用户

rmdir 删除空目录

  • 英文原意:remove empty directories
  • 存放路径:/bin/rmdir
  • 执行权限:所有用户

搜索命令

grep 搜索指定字符串

  • 语法:grep [选项] "搜索内容" 文件名
  • 选项
    • -i:忽略大小写
    • -n:输出行号
    • -v:反向查找,即查找不包含指 定字符串的行
    • –color=aoto:搜索出的关键字用颜色显示

文件处理命令-链接命令

ln 生成链接文件

  • 英文原意:link
  • 存放路径:/bin/ln
  • 执行权限:所有用户
  • 语法:ln -s [原文件] [目标文件]
  • 选项:
    1. -s :创建软链接 例:ln -s /etc/issue /tmp/issue.soft 。不添加本参数,则是创建的硬链接,如:ln /etc/issue /tmp/issue.hard
  • 补充:
    1. 软链接:类似于Windows的快捷方式 。但是删除了原文件,打开软链接,无法成功。
    2. 硬链接:两个文件一模一样,会自动同步更新。删除了原文件,可以成功打开。两个文件的文件号都是一样的
    3. 硬链接不能针对目录使用,不能跨分区

权限管理命令

文件权限

  1. 对rwx的解析

    r 读权限 可以查看文件内容 可以列出目录中的内容
    w 写权限 可以修改文件内容 可以在目录中创建、删除文件
    x 执行权限 可以执行文件 可以进入目录
  2. 对一个文件的权限很多时候要拥有对目录的权限

chmod 改变文件或目录权限

  • 英文原意:change the permission mode of a file

  • 存放路径:/bin/chmod

  • 执行权限:所有用户

  • 语法:

    1. chmod [{ugoa}{+-=}{rwx}] [文件或目录]

      • u: 拥有者
      • g:所属组
      • o:其他
      • a:全部
      • +:增加权限
      • -:减少权限 你
      • =:不管以前是什么权限,直接等于后面的权限
      • ps:可以同时对ugo同时进行权限修改,只要用逗号隔开即可,例:chmod g+w,o-x [文件或目录]
    2. chmod [mode=421] [文件或目录] 例:chmod 777 [文件名或绝对路径]表示 对文件进行rwxrwxrwx权限修改

      1. r: 4
      2. w:2
      3. x: 1
      • ugo的权限为相应的数值相加
  • 选项:

    1. -R: 递归修改

chown 改变文件或目录的所有者

  • 英文原意:change file ownership
  • 存放路径:/bin/chown
  • 执行权限:所有用户
  • 语法: chown [用户] [文件或目录]

chgrp 改变文件或目录的所属组

  • 英文原意:change file group ownership
  • 存放路径:/bin/chagrp
  • 执行权限:所有用户
  • 语法: chogrp [用户组] [文件见或目录 ]

umask 显示、设置文件的缺省权限

  • 英文原意:the user file-creation mask

  • 存放路径:Shell内置命令

  • 执行权限:所有用户

  • 语法: umask [-S]

    添加-S参数表示以rwx表示显示新建文件的缺省权限

文件处理命令-文件搜索命令

find 文件搜索

  • 英文原意:find

  • 存放路径:/bin/find

  • 执行权限:所有用户

  • 语法: find [搜索范围] [匹配条件]

  • 一些常见用法

    1. find /etc -name init:在目录/etc中查找文件init(精准搜索,只有名称为init的才会被搜索到)

      使用-iname替代-name则表示不区分大小写查找

      • find /etc -name *init*:使用了通配符,与一类似,但是只要是名称中含有init的文件都会被搜索到
      • find /etc -name init*:搜索以init开头的文件,以init结尾的文件搜索命令与此类似
      • find /etc -name init???:搜索以init开头,init后面还有三位的文件
  1. find /etc ze +204800:在/etc目录下查找大于100MB的文件。

    +n 大于,-n 小于, n 等于

  2. find /home -user ×××: 在/home目录下查找所有者为×××的文件

    -group:根据所属组查找

  3. find /etc -cmin -5:在/etc目录下查找5分钟内被修改过属性的文件和目录

    • -amin :访问时间 access
    • -cmin : 文件属性change
    • -mmin : 文件内容modify
  4. find /etc -size +163840 -a -size -204800: 在/etc目录下查找大于80MB小于100MB的文件

    • -a:两个条件同时满足
    • -o:两个条件满足任意一个即可
  5. find /etc -size +204800 -a -type [{f,d,l}]:在/etc目录下查找大于100MB的{文件/目录/链接文件}

    • f:文件
    • d:目录
    • l:链接文件
  6. find /etc -name inittab -exec ls -l {} \;:在/etc目录下查找inittab文件并显示其详细信息

    • -exec/-ok [命令] {} \;:对搜索结果执行操作,如果使用-ok会需要用户确认
  7. find . -inum [×××]:在当前目录(.表示当前目录)下查找节点号为×××的目录。可以用来找硬链接

locate 快速在文件资料库中查找文件

在系统中建立了一个数据库,查找起来速度就很快,但是一些新建的文件和/tmp文件夹下的文件无法查找到,使用uodatedb可以手动更新这个数据库

  • 英文原意:locate
  • 存放路径:/usr/bin/locate
  • 执行权限:所有用户
  • 语法: locate [文件名]
  • 选项 -i:忽略大小写查找

grep 在文件中搜寻字串匹配的行并输出

  • 英文原意:grep
  • 存放路径:/bin/grep
  • 执行权限:所有用户
  • 语法: grep [-iv] [指定字串] [文件]
  • 选项:
    1. -i:不区分大小写
    2. -v:排除指定字串所在的整行

which 搜索命令所在目录及别名信息

  • 英文原意:which
  • 存放路径:/usr/bin/which
  • 执行权限:所有用户
  • 语法: which [命令]

whereis 搜索命令所在目录及帮助文档路径

  • 英文原意:whereis
  • 存放路径:/usr/bin/whereis
  • 执行权限:所有用户
  • 语法: whereis [命令]

帮助命令

man 获得帮助信息

  • 英文原意:manual
  • 存放路径:/usr/bin/man
  • 执行权限:所有用户
  • 语法: man [命令或配置文件] (如果是查配置文件帮助,不能用绝对路径,直接用名称就可以了)
  • 例:
    • man ls:查看ls命令的帮助信息
    • man services:查看配置文件services的帮助信息
  • 补充:
    • 用/加上想要查找的可以直接索引,n表示下一个
    • 有可能会出现配置文件和命令重名的情况(例如passwd),这个时候可以加上标识符来区别
      • man 5 passwdman 1 passwd
      • 1表示命令的帮助。
      • 5表示配置文件的帮助
    • whatis命令 获取命令的简洁帮助信息
      • 语法:whatis [命令]
    • apropos命令 获取配置文件的帮助信息
      • 语法:apropos [配置文件名] (不可以用绝对路径)

用户管理命令

useradd 添加新用户

  • 英文原意:useradd
  • 存放路径:/usr/sbin/useradd
  • 执行权限:root
  • 语法: useradd [用户名]

passwd 设置用户密码

root 可以修改所有用户的密码,非root只能修改自己的密码

  • 英文原意:password
  • 存放路径:/usr/bin/passwd
  • 执行权限:所有用户
  • 语法: passwd [用户名]

who 查看登录用户信息

  • 英文原意:who
  • 存放路径:/usr/bin/who
  • 执行权限:所有用户
  • 语法: who

who 查看登录用户信息

  • 英文原意:who
  • 存放路径:/usr/bin/who
  • 执行权限:所有用户
  • 语法: who

w 查看登录用户详细信息

  • 存放路径:/usr/bin/w
  • 执行权限:所有用户
  • 语法: w

压缩解压命令

gzip 压缩.gz文件

只能压缩文件,不能压缩目录,且压缩完成后就没有原文件了

压缩比较高

  • 英文原意:GUN zip
  • 存放路径:/usr/bin/gzip
  • 执行权限:所有用户
  • 语法: gzip [文件]

gunzip 解压缩.gz文件

  • 英文原意:GUN zip
  • 存放路径:/usr/bin/gunzip
  • 执行权限:所有用户
  • 语法: gunzip [文件]

bzip2 压缩文件(.bz2) (gzip升级版)

压缩比很大,当压缩大文件时,推荐使用这个

解压使用bunzip2 [文件名]命令

  • 存放路径:/usr/bin/bzip2
  • 执行权限:所有用户
  • 语法: bzip2 [选项 -k] [文件]
  • 选项:
    • -k: 产生压缩文件后保留原文件

tar 打包和解包目录(.tar/.tar.gz)

  • 存放路径:/bin/tar
  • 执行权限:所有用户

打包/压缩

  • 语法: tar [选项 -zcf] [压缩后文件名] [目录]

  • 选项:

    • -z: 打包同时压缩(.tar.gz)
    • -c: 打包(.tar)
    • -v: 显示详细信息(打包完成后会显示打包了那些目录)
    • -f: 指定文件
    • -g:打包同时压缩(.tar.bz2),本选项与-z只能选一个

解包/压缩

  • 语法:tar [选项 -zxvf] [待解包/压缩]
  • 选项:
    • -x: 解包
    • -v: 显示详细信息
    • -f: 指定解压文件
    • -z: 解.tar.gz压缩
    • -j: 解.tar.bz2压缩

zip 压缩文件或目录(.zip)

压缩后会保留原文件

压缩比并不高

unzip命令用来解压

  • 存放路径:/usr/bin/zip
  • 执行权限:所有用户
  • 语法: zip [选项 -r] [压缩后文件名] [文件或目录]
  • 选项:
    • -r: 压缩目录

网络命令

ifconfig 查看和设置网卡信息

可以直接使用ifconfig查询例如IP等网络状态信息

  • 英文原意:interface configure

  • 存放路径:/sbin/ifconfig

  • 执行权限:root

  • 语法: ifconfig 网卡名称 IP地址

  • 例:ifconfig eth0 192.168.8.250

traceroute 显示数据包到主机间的路径

  • 存放路径:/bin/traceroute
  • 执行权限:所有用户
  • 语法: traceroute [网址]

netstat 显示网络相关信息

  • 存放路径:/bin/netstat
  • 执行权限:所有用户
  • 语法: netstat [选项]
  • 常用选项:
    • -t: TCP协议
    • -u: UDP协议
    • -l: 监听
    • -r: 路由
    • -n: 显示ip地址和查看端口号
  • 例:
    • netstat -tlun: 查看本机监听的端口
    • netstat -an : 查看本机所有的网络连接
    • netstat -rn: 查看本机路由表

last 列出目前与过去登入系统的用户信息

  • 存放路径:/usr/bin/last
  • 执行权限:所有用户
  • 语法: last

write 给用户发送文件

Ctrl+D保存结束

用户不在线发不出去

  • 存放路径:/usr/bin/write
  • 执行权限:所有用户
  • 语法: write <用户名>

挂载命令

mount 挂载

有图形界面的一般会自动挂载

在弹出光盘前,一定要先卸载,否则物理按键无用

挂载好了以后去到挂载点可以查看相应的内容(例如光盘上的内容)

  • 存放路径:/bin/mount
  • 执行权限:所有用户
  • 语法: mount [-t 文件系统( 可省略)] [设备名称] [挂载点]
  • 例:mount -t iso9660 /dev/sr0 /mnt/cdrom:这里是挂载相应的光盘(iso9660是光盘的文件系统)到创建好的文件夹(不同硬件的挂载地方一般也有约定)

umount 卸载

要先退出挂载目录才可以卸载

语法:umount [设备文件地址或者挂载点地址]

关机和重启命令

shutdown 关机(推荐)

会保存数据和服务,再关机。

  • 语法:shutdown [选项] 时间

  • 选项:

    • -c: 取消前一个关机命令
    • -h: 关机
    • -r: 重启
  • 例子:

    • shutdown -h now/20:30:立刻/8:30关机
    • shutdown -r now/20:30:立刻/8:30重启
    • shutdown -c:取消前一个关机命令

其他关机命令

  • halt
  • poweroff
  • init 0

重启命令

  • reboot
  • init 6

Vim

基础插入命令

命令 作用
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在光标所在行行首插入
o 在光标下插入新行
O 在光标上插入新行

替换和取消命令

命令 作用
r 取代光标所在处字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一步操作

定位命令

命令 作用
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
:n 到第n行
nG 到第n行

搜索和搜索替换命令

命令 作用
/String 搜索指定字符串,搜索是忽略大小写要先执行命令:set ic
n 搜索指定字符串的下一个出现位置
:%s/old/new/g(c) 全文替换指定支付传(结尾用c,会有替换询问)
:n1,n2s/old/new/g(c) 在n1到n2行范围内替换指定字符串(结尾用c,会有替换询问)

保存和退出命令

命令 作用
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并推出
ZZ 快捷键,保存修改并退出
:q 不保存修改退出
:wq 保存修改并推出(文件所有者及root可使用)

删除命令

命令 作用
x 删除光标所在处字符
nx 删除光标所在处后n个字符
dd 删除光标所在行,ndd删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾的内容
:n1,n2d 删除指定n1到n2行

复制和剪切命令

命令 作用
yy 复制当前行
nyy 复制当前以下n行
dd 剪切当前行
ndd 剪切当前以下n行
p、P 粘贴在当前光标所在行下或行上

一些有趣的命令

  • :r [文件路径]:将文件中的内容导入到光标所在位置
  • ![命令]:在不退出编辑的情况下,执行系统命令,例如::r !date就可以直接导入时间
  • :map 快捷键 触发命令:可以用户自定义快捷键

shell基础

基本常识

shell执行方法

  • 赋予执行权限,直接运行
    1. chmod 755 ×××.sh
    2. ./×××.sh
  • 通过Bash调用脚本执行
    1. bash ×××.sh

脚本转换(win 与 linux)

因为在windows和linux写下的shell脚本可能会有一些细微的差别导致直接从windows考过来的脚本在linux中不能运行,所以需要转换以下

  • dos2unix [文件名]:就可以完成转换windows -> linux
  • unix2dos [文件名]:就可以完成转换linux -> windows

history 历史命令

  • 语法:history [选项] [历史命令保存文件],直接敲history命令则是看到全部的历史命令
  • 选项:
    • -c:清空历史命令
    • -w:在不指定保存位置时,把缓存的历史命令写入默认历史命令保存文件~./bash_history(默认一千条 )

Bash快捷键

快捷键(不区分大小写) 作用
ctrl+A 叭光标移动到命令行开头
ctrl+E 把光标移动到命令行结尾
ctrl+R 在历史命令搜索,按下这个快捷键后,会出现搜索界面
ctrl+D 退出当前终端

命令执行顺序

  • 第一顺位执行用绝对路径或相对路径执行的命令
  • 第二顺位执行别名
  • 第三顺位执行Bash的内部命令
  • 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

管道符

  • 命令格式:命令1 | 命令2:命令1的正确输出作为命令2的操作对象
  • 例:ll -a | more:本来more命令只能显示文件,但是这样操作的话,也可以用来查看目录

通配符

通配符 作用
匹配一个任意字符
* 匹配0个或多个任意字符,也就是匹配任何内容
[] 匹配中括号中的任意一个字符,例如:[abc]代表一定要匹配一个字符,必定是abc中的一个
[-] 匹配中括号中的任意一个字符,-代表一个范围。例如:[a-z]代表配匹配一个消协字母
[^] 逻辑非,表示匹配不是中括号内的一个字符。例如:[(尖括号)0-9],代表匹配一个不是数字的字符

shell变量

变量规则

  • 变量名称可由字母、数字、下划线组成,但是不能以数字开头
  • 在Bash中,变量的默认类型都是字符串类型,如果要进行数值运算,则必须指定变量类型为数值型
  • 变量用等号连接,等号两侧不能有空格
  • 变量的值如果有空格,需要使用但因号或双引号包括
  • 在变量的值中,可以使用”\“转义符
  • 如果需要增加变量的值,那么可以进行变量值的叠加,不过变量需要用双引号包含"$变量名"或用${变量名}包含
  • 如果要把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
  • 环境变量名建议大写,便于区分

变量分类

  • 用户自定义变量
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据
    • 设值:export 变量名=变量值
    • 查询:env(专用于环境变量查询)
    • 删除:unset 变量名
    • PS1:定义系统提示符的变量(就是命令开头那些东西)
      • \d:以”星期 月 日“格式显示日期
      • \h:显示简写主机名。默认”localhost“
      • \t:以”HH:MM:SS“格式显示24小时制时间
      • \T:以”HH:MM:SS“格式显示12小时制时间
      • \A:以”HH:MM“格式显示24小时制时间
      • \u:显示当前用户名
      • \w:显示当前所在目录的完整名称
      • \W:显示当前所在目录的最后一个目录
      • \#:执行的第几个命令
      • \$:提示符。如果是root用户则会显示”#“,普通用户显示”$“
  • 位置参数变量:这种变量主要是同来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
    • $n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用打括号包含,如${10}
    • $*:这个变量代表命令行中所有的参数,$×把所有的参数看成一个整体
    • $@:这个变量也代表命令行中所有的参数,不过$@叭每个参数区别对待,使用时,用双引号引起来
    • $#:这个变量代表命令行中所有参数的个数
  • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用是固定的
    • $?:最后一次执行的命令的返回状态。如果这个变量的值是0,证明上一个命令执行正确,如果为非0(具体为那个数,由命令自己决定),则说明上一个命令执行不正确
    • $$:当前进程的进程号(PID)
    • $!:后台运行的最后一个进程的进程号(PID)

变量查看与删除

  • set:查看所有变量
  • unset 变量名:删除变量

接收键盘输入

  • 语法:read [选项] [变量名]
  • 选项:
    • -p ”提示信息“:在等待输入的时候,输出提示信息
    • -t 秒数:read命令会一直在等待用户输入,使用此选项可以指定等待时间
    • -n 字符数:read命令只接收指定的字符数,就会执行(不用回车)
    • -s:隐藏输入的数据,适用于机密信息的输入

声明变量类型

如果不声明,默认是字符串

  • 语法:declare [+-][选项] 变量名
  • 选项:
    • -:给变量设定类型属性
    • +:取消变量的类型属性
    • i:将变量声明为整数型(integer)
    • x:将变量声明为环境变量
    • p:显示指定变量的被声明类型
  • 例:
    • declare -i cc=00
    • declare

数值运算

aa=11

bb=22

  • ”$((运算式))“或”$[运算式]“cc=$(($aa+$bb))cc=$[$aa+$bb]
  • 使用declare声明为整形便可正常加减:declare -i cc=$aa+$bb
  • 使用expr或let数值运算工具:cc=$(expr $aa + $bb)(ps:这里加号两边的空格不能少

变量测试与内容替换

变量置换方式 变量y没有设置(不存在) 变量y为空值 变量y设置值
x=${y-新值} x=新值 x为空 x=$y
x=${y:-新值} x=新值 x=新值 x=$y
x=${y+新值} x为空 x=新值 x=新值
x=${y:+新值} x为空 x为空 x=新值
x=${y=新值} x=新值,y=新值 x为空,y不变 x=$y,y值不变
x=${:新值} x=新值,y=新值 x=新值,y=新值 x=$y,y值不变
x=${y?新值} 新值输出到标准错误输出(即屏幕输出) x为空 x=$y
x=${y:?新值} 新值输出到标准错误输出 新值输出到标准错误输出 x=$y

shell 编程

基础的正则表达式

  1. 正则表达式与通配符

    • 正则表达式用来在文件中匹配符号条件的 字符串,正则是包含匹配。grep、awk、sed等命令都可以支持正则表达式
    • 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配
  2. 基础字符及作用

    元字符 作用
    * 前一个字符匹配0次或多次
    . 匹配除了换行符以外的任意一个字符
    ^ 匹配行首。例如^hello会匹配以hello开头的行
    $ 匹配行尾。hello$会匹配以hello结尾的行
    [] 匹配中括号中指定的任意一个字符,只匹配一个字符。例如:[aeiou]匹配一个元音字母
    [^] 匹配除括号中的任意一个字符
    \ 转移符。用于将特殊符号的含义取消
    \{n\} 表示其前面的字符恰好出现n次。例如[0-9]\{4\}匹配4位数字
    \{n,\} 表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位数以上的数字
    \{n,m\} 表示其前面的字符至少出现n次。最多出现m次。例如[a-z]\{6,8\}匹配6到8位的小写字母

字符截取命令

cut 字段提取命令(列),简单提取
  • 语法:cut [选项] 文件名
  • 选项:
    • -f 列号:提取第几列
    • -d 分隔符:按照指定分隔符分割列
printf 格式化打印命令
  • 语法:printf “输出类型输出格式” 输出内容
  • 输出类型:
    • %ns:输出字符串。n是数字,指代输出几个字符串。不加n,则会导致把后面的全部当作一个字符串一次性输出
    • %ni:输出整数。n是数字,指代输出几个数字
    • %m.nf:输出浮点数。m和n是数字,指代输出的整数位和小数位。如:%8.2f代表共输出8位数,其中,2位是小数,6位是整数
  • 输出格式:
    • \a:输出警告声音
    • \b:输出退格键,也就是Backspace键
    • \f:清楚屏幕
    • \n:换行
    • \r:回车,也就是Enter键
    • \t:水平输出退格键,也就是Tab键
    • \v:垂直输出退格键,也就是Tab键
awk命令,复杂升级版cut
  • 语法:awk ‘条件1{动作1} 条件2{动作2}...’ 文件名

  • awk ‘{动作}’ 文件名:表示所有的都按照这个动作执行

  • 条件(Pattern):一般使用关系表达式作为条件

    例:

    • x > 10:判断变量x是否大于10
    • x>=10:大于等于10
    • x<=10:小于等于10
  • 动作(Action):

    • 格式化输出(printf)
    • 流程控制语句
  • BEGINawk ‘BEGIN{printf“this is a test\n”}’ {命令1} 文件名:这个BEGIN是然后面那条命令在其他所有的执行之前先执行,这个命令就是前面写的第二条差不多,只不过在最开始执行了一个打印的动作

  • FS内置变量:用来指定分隔符,例:awk ‘BEGIN{FS=××}’ ‘{动作}’ 文件名表示以××为分隔符

  • END:和BEGIN类似,在其他命令执行结束以后,再执行这个动作

sed命令,轻量的流编辑器
  • 主要作用:用来将数据进行选取、替换、删除、新增

  • 语法:sed [选项] '[动作]' 文件名

  • 选项:

    • -n:一般sed命令会把所有数据都是输出到屏幕,如果加入此选择,则只会叭经过sed命令处理的允许的行输出到屏幕
    • -e:允许对输入数据应用多条sed命令编辑
    • -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
  • 动作:

    • a:追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾都需要用‘\+按下回车’代表数据未完结,sed '2a hello' ×××表示在第二行后追加hello

    • c:行替换,用c后面的字符替换原行数据,替换多行时,除最后一行外,每行末尾都需要用‘\+按下回车’代表数据未完结

    • i:插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾都需要用‘\+按下回车’代表数据未完结,sed '2i hello \(回车) world'表示在第二行前插入两行数据

    • d:删除,删除指定行,sed '2,4d' ×××表示删除×××文件的2到4行

    • p:打印,输出指定行,sed -n '2p' ×××表示打印×××文件的第二行在屏幕上

    • s:字符串替换。格式类似于”行范围s/旧字符串/新字符串/g”(和vim中的替换格式类似)

      sed '3s/111/222/g' ×××:在×××文件中第三行中,把111换成222(文件本身并未改写

      sed -e 's/111//g;s/222//g' ×××:在×××文件中,把111和222同时替换为空(文件本身并未改写

字符处理命令

sort 排序命令
  • 语法:sort [选项] 文件名
  • 选项:
    • -f:忽略大小写
    • -n:以数值型排序,默认使用字符串型排序
    • -r:反向排序
    • -t:指定分隔符,默认是制表符
    • -k n[,m]:按照指定的字段范围排序。从第n字段开始,m字段结束,默认到行尾
wc 统计命令
  • 语法:wc [选项] 文件名:不加选项则显示行数 单词数 字符数
  • 选项:
    • -l:只统计行数
    • -w:只统计单词数
    • -m:只统计字符数

条件判断

语法

  1. test 选项 文件
  2. [ 选项 文件 ]:这种方法中括号后、前的空格不能少 (常用格式)
按照文件类型进行判断
选项 作用
-d 文件 判断文件是否存在,并且是否为目录文件(是目录为真)
-e 文件 判断文件是否存在(存在为真)
-f 文件 判断文件是否存在,并且是否位普通文件(是普通文件则为真)
-b 文件 判断文件是否存在,并且是否为块设备文件(是块设备文件则为真)
-c 文件 判断文件是否存在,并且是否为字符设备文件(是字符设备文件为真)
-L 文件 判断文件是否存在,并且是否为符号链接文件(是符号链接文件为真)
-p 文件 判断文件是否存在,并且是否为管道文件(是管道文件为真)
-s 文件 判断文件是否存在,并且是否为非空(非空为真)
-S 文件 判断文件是否存在,并且是否为套接字文件(是套接字文件为真)
按照文件权限进行判断
选项 作用
-r 文件 判断文件是否存在,并且是否文件拥有读权限(有读权限为真)
-w 文件 判断文件是否存在,并且是否文件拥有写权限(有写权限为真)
-x 文件 判断文件是否存在,并且是否文件拥有执行权限(有执行权限为真)
-u 文件
-g 文件
-k 文件
两个文件之间进行比较
选项 作用
文件1 -nt 文件2 判断文件1的修改时间是否比文件2的新(如果新则为真)
文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧(如果旧则为真)
文件1 -ef 文件2 判断文件1和文件2的Inode号一致,可以理解为两个文件是否为同一个文件。这个也可用于判断硬链接
两个整数之间比较
选项 作用
整数1 -ep 整数2 判断整数1和整数2是否相等(相等为真)
整数1 -np 整数2 判断整数1和整数2是否不相等(不相等为真)
整数1 -gt 整数2 判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2 判断整数1是否小于整数2(小于为真)
整数1 -ge 整数2 判断整数1是否大于等于整数2(大于等于为真)
整数1 -le 整数2 判断整数1是否小于等于整数2(小于等于为真)
字符串的判断
选项 作用
-z 字符串 判断字符串是否为空(为空为真)
-n 字符串 判断字符串是否非空(非空为真)
字符串1==字符串2 判断事都相等(相等为真)
字符串1 != 字符串2 判断是否不相等(相等为真)
多重条件判断
选项 作用
判断1 -a 判断2 逻辑与,判断1和判断2都成立才为真
判断1 -o 判断2 逻辑或,判断1和判断2,其中一个成立则为真
!判断 逻辑非,与原判断结果相反

流程控制

if语句
  • 单分支

    1
    2
    3
    4
    5
    6
    7
    8
    if [ 条件判断式 ];then
    程序
    fi
    或者
    if [ 条件判断式 ]
    then
    程序
    fi
  • 双分支

    1
    2
    3
    4
    5
    6
    if [ 条件判断式 ]
    then
    条件成立时,执行的程序
    else
    条件不成立时,执行的程序
    fi
  • 多分支

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if [ 条件判断式1 ]
    then
    判断式1成立时,执行的程序
    elif [ 条件判断式2 ]
    then
    判断式2成立时,执行的程序
    ...
    else
    当所有条件都不成立时,最后执行此程序
    fi
case语句
1
2
3
4
5
6
7
8
9
10
11
12
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序1
;;
...省略其他分支...
*)
如果其他变量的值不是以上的值,则执行此程序
;;
esac
for循环
  1. 1
    2
    3
    4
    for 变量 in 值1 值2 值3...
    do
    程序
    done
  2. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for((初始值;循环控制条件(可以是定值也可以是变量);变量变化))
    do
    程序
    done

    #例:
    s=0
    for(( i=1;i<=100;i=i+1))
    do
    s=$(($s+$i))
    done
while循环与until循环
  • while

    1
    2
    3
    4
    while [ 条件判断式 ]
    do
    程序
    done
  • until循环:与while相反,条件一旦成立则推出循环

    1
    2
    3
    4
    until [ 条件判断式 ]
    do
    程序
    done

Linux系统管理

工作管理

把进程放入后台

  • 命令 &:这种方法放入后台以后会继续运行
  • 在执行某个命令时,ctrl+z快捷键。这种方法放入后台以后会暂停

查看后台工作

  • 语法:jobs [-l]
  • 选项:
    • -l:显示工作的PID
    • ps:“+”号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。“-”号代表倒数第二个放入后台的工作

恢复后台暂停的工作到前台执行

  • 语法:fg %工作号:这里的%可以省略,但是请注意工作号和PID的区别

把后台暂停的工作恢复到后台执行

  • 语法:bg %工作号
  • ps:后台恢复执行的命令,不能和前台有交互,否则不能恢复到后台执行

系统定时任务

定时任务中,date=$( date +%y%m%d)这条命令是无法成功的,因为在里面%有特殊含义,必须用转移符才可以,即date=$( date +\%y\%m\%d)

crond服务管理与访问控制

  • service crond restart:重启 动,这个本身是在开机的时候就自启动了
  • chkconfig crond on

用户的crontab设置

  • 语法:crontab [选项]

  • 选项:

    • -e:编辑crontab定时任务

      进入编辑界面后有一定的格式规范

      1
      *****你的任务
      项目 含义 范围
      第一个“*” 一个小时当中的第几分钟 0-59
      第二个“*” 一天当中的第几个小时 0-23
      第三个“*” 一个月当中的第几天 1-31
      第四个“*” 一年当中的第几个月 1-12
      第五个“*” 一星期当中的星期几 0-7(0和7都代表星期日)

      例子:

      (星期几和几号最好不要同时出现,因为都是定义的哪一天,容易让管理员混乱)

      时间 作用
      45 22 * * * 命令 在每天的 22:45执行任务
      0 17 * * 1 命令 在每周一的17:00执行命令
      0 5 1,15 * * 命令 在每月1号和15号的5:00执行命令
      40 4 * * 1-5 命令 每周一到周五的4:40执行命令
      */10 4 * * * 命令 每天凌晨4点,每隔10分钟执行一次命令
      0 0 1,15 * 1 命令 每月1号和15号,每周1的00:00都会执行命令
  • -l:查询crontab任务

  • -r:删除当前用户所有的crontab任务,只想删一个或其中几个的话,可以用crontab -e进入编辑界面,删除你想删除的即可

    数据备份

需要备份的数据

  • /root/目录
  • /home/目录
  • /etc/目录
  • 其他目录:如/var/log/目录,/bin/目录
  • apache需要备份的数据
    • 配置文件
    • 网页主目录
    • 日志文件

dump和restore命令

  1. dump
    • 语法:dump [选项] 备份之后的文件名 原文件或目录
    • 选项
      • -level:就是我们说的0-9共10个备份级别,这里的level要写成数字。如果备份的是目录或文件,只能使用0级别进行完全备份。增量备份只适用于分区
      • -f 文件名:指定备份之后的文件名
      • -u:备份成功后,叭备份时间记录在/etc/dumpdates文件
      • -v:显示备份过程中更多的输出信息
      • -j:调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式
      • -W:显示允许被dump的分区的备份等级及备份时间
  2. restore
    • 语法:restore [模式选项] [选项]
    • 模式选项(不能混用,只能任选其一)
      • -C:比较备份数据和实际数据的变化
      • -i:进入交互模式,手工选择需要恢复的文件
      • -t:查看模式,用于查看备份文件中拥有哪些数据
      • -r:还原模式,用于数据还原
    • 选项
      • -f 指定备份文件的文件名

其他命令

echo 输出命令

这仅仅是echo最基本的功能,它还有很多强大的功能,如覆盖文本,追加文本等

  • echo [选项] [输出内容]

    • 选项

      • -e: 支持反斜线控制的字符转化
    • 例:

      这里的第一行很重要,并不是注释,而是表示这是一个shell脚本

      1
      2
      3
      4
      #!/bin/Bash
      # 第一个shell脚本

      echo -e "hello world"

date 日期命令

  • date:输出当前日期
  • date +%y%m%d:按年月日格式输出日期