Linux学习笔记

  • 文件处理命令

    1
    2
    3
    4
    5
    6
    ls
    -a 显示所有文件,包括隐藏文件
    -l 详细信息显示
    -d 查看目录属性
    -i 查询文件号
    -h 文件大小显示更直观
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #文件类型
    f 文件
    d 目录
    l 软链接

    #文件权限
    r 读
    w 写
    x 执行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    mkdir
    -p 递归创建

    rmdir #删除空目录
    cd
    pwd #显示绝对路径
    . #当前目录
    .. #当前目录的上一级目录

    cp
    -r 复制目录
    -p 保留文件属性

    mv 剪切

    rm
    -r 删除目录
    -f 强制执行

    touch

    cat
    -n #显示行号

    tac

    more
    空格 #翻页
    回车 #换行
    q #退出

    less
    空格 #向下翻页
    pageup #向上翻页
    down #下一行
    up #上一行
    q #退出
    /+关键词 #搜索

    head -n 行数 文件名 #查看文件前几行
    tail -n 行数 文件名 #查看文件前几行

    ln -s 原文件 目标文件 #生成链接文件
    -s #软链接

    linux中软链接 以l开头权限是三个rwx

    删除原文件,软链接文件会删除,硬链接可以访问(相当于拷贝)
    硬链接的好处:做一个实时的备份
    硬链接的缺点:不能跨分区,不允许将硬链接指向目录
  • 权限管理命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    chmod

    r---4
    w---2
    x---1

    chmod [ugoa] [+-=] [文件名]
    chmod [777] [文件名]
    chmod -R [777] [文件]

    chown #改变所有者
    chgrp #改变所属组
  • 文件搜索命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    find [搜索范围] [匹配条件]
    find [搜索范围] -size +n #在搜索范围查找大于n的文件
    find [搜索范围] -user username #在搜索范围下查找所有者为username的文件

    find [搜索范围] -cmin -5 #在搜索范围下查找5分钟内被修改过属性的文件和目录
    -amin 访问时间 access
    -cmin 文件属性 change
    -mmin 文件内容 modify
    -iname #查找不区分大小写
    -type #根据文件类型查找
    -inum #根据i节点查找
    -exec 命令 {} \; #对搜索结果执行操作

    locate #在文件资料库中查找文件
    -i #查找时不区分大小写

    which #搜索命令所在目录及别名信息
    whereis #搜索命令所在目录及帮助文档路径

    grep #在文件中搜寻字符串匹配的行并输出
    grep 字符串 文件路径
    -i #不区分大小写
    -v #排除指定字符串
  • 帮助命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    man
    man [命令或配置信息]
    linux中 1表示命令 5表示配置文件
    man 5 passwd #查看配置文件为passwd的帮助文档

    whatis 命令 #得到一个命令的简短信息
    apropos 配置文件 #得到一个配置文件的简短信息

    help
    help 命令 #获得shell内置命令的帮助信息
    内置命令:通俗来讲指找不到路径的命令
  • 用户管理命令

    1
    2
    3
    4
    useradd 用户名 #添加新用户
    passwd 用户名 #设置用户密码
    who #查看用户登陆信息
    w #查看登陆用户详细信息
  • 压缩解压命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    gzip #只能压缩文件
    gzip [文件] #压缩文件
    gunzip [文件] #解压缩文件
    gzip -d [文件] #解压缩文件

    tar #打包目录
    tar 选项[-zcf] [压缩后文件名] [目录]
    -c 打包
    -v 显示详情信息
    -f 指定文件名
    -z 打包同时压缩

    tar命令解压缩语法
    -x 解包
    -v 显示详情信息
    -f 指定解压文件
    -z 解压缩

    zip #压缩文件或目录
    zip 选项[-r] [压缩后文件名] [文件或目录]
    -r 压缩目录
    unzip #解压缩

    bzip2 #压缩文件
    bzip2 选项[-k] [文件]
    -k 产生压缩文件后保留原文件
    bunzip #解压缩
  • 网络命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    write #给用户发信息,以Ctrl+D保存结束
    write <用户名> #用户必须在线

    wall #发广播信息
    wall [message]

    ping #测试网络连通性
    ping ip
    -c + 次数

    ifconfig #查看和设置网卡信息
    ifconfig 网卡名称 IP地址

    mail #查看发送电子邮件
    mail [用户名]

    last #列出目前与过去登入系统的用户信息
    lastlog #检查某特定用户上次登陆的时间
    -u uid

    traceroute #显示数据包到主机间的路径
    traceroute www.baidu.com

    netstat #显示网络相关信息
    netstat [选项]
    -t : TCP协议
    -u : UDP协议
    -l : 监听
    -r : 路由
    -n : 显示IP地址和端口号
    netstat -tlun #查看本机监听的端口
    netstat -an #查看本机所有的网络链接
    netstat -rn #查看本机路由表

    setup #配置网路

    mount #挂载命令
    mount [-t 文件系统] 设备文件名 挂载点
    mount -t iso9660 /dev/sr0 /mnt/cdrom
  • 关机重启命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    shutdown #关机重启操作
    shutdown [选项] 时间
    -c : 取消
    -h : 关机
    -r : 重启

    其他重启命令
    reboot
    init 6

    其他关机命令
    halt
    poweroff
    init 0

    系统运行级别
    0 关机
    1 单用户
    2 不完全多用户,不含NFS服务
    3 完全多用户
    4 未分配
    5 图形界面
    6 重启

    logout #退出登录命令
  • 文本编辑器

插入命令

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

定位命令

命令 作用
: set nu 设置行号
: set nonu 取消行号
gg
G
到第一行
到最后一行
nG 到第n行
: n 到第n行
$ 移动至行尾
0 移动至行首

删除命令

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

复制和剪切命令

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

替换和取消命令

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

搜索和搜索替换命令

命令 作用
/string 搜索指定字符串
搜索时忽略大小写 :set ic
n 搜索指定字符串的下一个出现位置
: %s/old/new/g 全文替换指定字符串
: n1,n2s/old/new/g 在一定范围内替换指定字符串

保存和退出命令

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

定制快捷键:map 快捷键 触发命令
导入命令执行结果:r !命令
替换:ab test test123

  • 软件包管理

    软件包分类

    • 源码包
    • 二进制包

    源码包的优点

    • 开源
    • 可以自由选择所需的功能
    • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
    • 卸载方便

    源码包的缺点

    • 安装过程步骤多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
    • 编译过程时间较长,安装比二进制安装时间长
    • 因为是编译安装,安装过程中一旦报错新手很难解决

    二进制包的优点

    • 包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载
    • 安装速度比源码包安装快的多

    二进制包的缺点

    • 经过编译,不再可以看到源代码
    • 功能选额不如源码包灵活
    • 依赖性

    RPM包命名规则

    1
    2
    3
    4
    5
    6
    7
    8
    httpd-2.2.15-15.el6.centos.1.i686.rpm

    httpd #软件包名
    2.2.15 #软件版本
    15 #软件发布的次数
    el6.centos #适合的Linux平台
    i686 #适合的硬件平台
    rpm #rpm包扩展名

    包全名:操作的包是没有安装的软件包时,使用包全名,而且要注意路径。
    包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm中的数据库。

    RPM安装

    1
    2
    3
    4
    5
    rpm -ivh 包全名
    -i(install) 安装
    -v(verbose) 显示详细信息
    -h(hash) 显示进度
    -nodeps 不显示依赖性

    RPM卸载

    1
    2
    3
    rpm -e 包名
    -e(erase) 卸载
    --nodeps 不检查依赖性

    查询是否安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    rpm -q 包名	#查询包是否安装
    -q 查询
    rpm -qa #查询所有已经安装的RPM包
    -a 所有
    rpm -qi 包名 #查询软件包详细信息
    -i 查询软件信息
    -p 查询未安装包信息
    rpm -ql 包名 #查询包中文件安装位置
    -l 列表
    -p 查询未安装包信息
    rpm -qf 系统文件名 #查询系统文件属于哪个RPM包
    -f 查询系统文件属于哪个文件包
    rpm -qR 包名 #查询软件包的依赖性
    -R 查询软件包的依赖性
    -p 查询未安装包信息
    rpm -V 已安装的包名 #RPM包校验
    -V 校验指定RPM包中的文件
    rpm2cpio 包全名 | cpio -idv .文件绝对路径 #RPM包中文件提取
    -i : copy-in模式,还原
    -d : 还原时自动新建目录
    -v : 显示还原过程
  • 常用yum命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    yum list #查询所有可用软件包列表
    yum search #搜索服务器上所有和关键字相关的包
    yum -y install 包名
    install 安装
    -y 自动回答yes
    yum -y updata 包名
    updata 升级
    -y 自动回答yes
    yum -y remove 包名
    remove 卸载
    -y 自动回答yes
    yum grouplist #列出所有可用的软件组列表
    yum groupinstall 软件组名 #安装指定软件组,组名可以由grouplist查询出来
    yum groupremove 软件组名 #卸载指定软件组

    RPM包安装的服务可以使用系统服务管理命令(service)来管理
    源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中,所以只能用绝对路径进行服务的管理

  • 用户和用户组管理

    • 越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范
    • 在Linux中主要是通过用户配置文件来查看和修改用户信息
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /etc/passwd #用户信息文件

    第1字段:用户名称
    第2字段:密码标志
    第3字段:UID(用户ID)
    0:超级用户
    1-499:系统用户(伪用户)
    500-65535:普通用户
    第4字段:GID(用户初始组ID)
    第5字段:用户说明
    第6字段:家目录
    普通用户:/home/用户名/
    超级用户:/root/
    第7字段:登录之后的shell

    初始组:指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组
    附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个
    Shell:shell就是Linux的命令解释器,在/etc/passwd当中,除了标准shell是/bin/bash之外,还可以写如/sbin/nologin

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /etc/shadow #影子文件

    第1字段:用户名
    第2字段:加密密码
    加密算法升级为SHA512散列加密算法
    如果密码位是“!!”或“*”代表没有密码,不能登录
    第3字段:密码最后一次修改日期
    第4字段:两次密码的修改间隔时间(和第3字段相比)
    第5字段:密码有效期(和第3字段相比)
    第6字段:密码修改到期前的警告天数(和第5字段相比)
    第7字段:密码过期后的宽限天数(和第5字段相比)
    0:代表密码过期后立即失效
    -1:代表密码永远不会失效
    第8字段:账号失效时间
    要用时间戳表示
    第9字段:保留
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /etc/group #组信息文件

    第1字段:组名
    第2字段:组密码标志
    第3字段:GID
    第4字段:组中附加用户

    /etc/gshadow #组密码文件

    第1字段:组名
    第2字段:组密码
    第3字段:组管理员用户名
    第4字段:组中附加用户

    用户管理相关文件

    • 用户的家目录

      普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700

      超级用户:/root/,所有者和所属组都是root用户,权限是550

    • 用户的邮箱

      /var/spool/mail/用户名/

    • 用户模版目录

      /etc/skel

  • 用户管理命令

    用户添加命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    useradd

    useradd [选项] 用户名
    -u UID : 手工指定用户的UID号
    -d 家目录 : 手工指定用户的家目录
    -c 用户说明 : 手工指定用户的说明
    -g 组名 : 手工指定用户的初始组
    -G 组名 : 指定用户的附加组
    -s shell : 手工指定用户的登录shell。默认是/bin/bash

    用户默认值文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /etc/default/useradd

    GROUP=100 #用户默认组
    HOME=/home #用户家目录
    INACTIVE=-1 #密码过期宽限天数(shadow文件7字段)
    EXPIRE= #密码失效时间(shadow文件8字段)
    SHELL=/bin/bash #默认shell
    SKEL=/etc/skel #模版目录
    CREATE_MAIL_SPOOL=yes #是否建立邮箱

    /etc/login.defs

    PASS_MAX_DAYS 99999 #密码有效期(shadow文件5字段)
    PASS_MIN_DAYS 0 #密码修改间隔(shadow文件4字段)
    PASS_MIN_LEN 5 #密码最小5位(PAM)
    PASS_WARN_AGE 7 #密码到期警告(shadow文件6字段)
    UID_MIN 500 #最小和最大UID范围
    GID_MAX 60000
    ENCRYPT_METHOD SHA512 #加密模式

    修改用户密码

    1
    2
    3
    4
    5
    6
    7
    passwd 

    passwd [选项] 用户名
    -S #查询用户密码的密码状态,仅root用户可用
    -l #暂时锁定用户,仅root用户可用
    -u #解锁用户,仅root用户可用
    --stdin #可以通过管道符输出的数据作为用户的密码

    修改用户信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    usermod

    usermod [选项] 用户名
    -u UID : 修改用户的UID号
    -c 用户说明 : 修改用户的说明信息
    -G 组名 : 修改用户的附加组
    -L : 临时锁定用户(Lock)
    -U : 解锁用户锁定(Unlock)
    usermod -c 'test user' elssm #修改用户的说明
    usermod -G root elssm #把elssm用户加入root组
    usermod -L elssm #锁定用户
    usermod -U elssm #解锁用户

    修改用户密码状态

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    chage

    chage [选项] 用户名
    -l: 列出用户的详细密码状态
    -d 日期: 修改密码最后一次更改日期(shadow3字段)
    -m 天数: 两次密码修改间隔(shadow4字段)
    -M 天数: 密码有效期(shadow5字段)
    -W 天数: 密码过期前警告天数(shadow6字段)
    -I 天数: 密码过期后宽限天数(shadow7字段)
    -E 日期: 账号失效时间(shadow8字段 )

    删除用户

    1
    2
    3
    4
    userdel

    userdel [-r] 用户名
    -r 删除用户的同时删除用户家目录

    切换用户身份

    1
    2
    3
    4
    5
    su

    su [选项] 用户名
    - : 选项只使用“-”代表连带用户的环境变量一起切换
    -c命令 : 仅执行一次命令,而不切换用户身份

    用户和用户组管理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    groupadd [选项] 组名 #添加用户组
    -g GID 指定组ID

    groupmod [选项] 组名 #修改用户组
    -g GID 修改组ID
    -n 新组名 修改组名

    groupdel 组名 #删除用户组

    gpasswd [选项] 组名 #把用户添加入组或从组中删除
    -a 用户名 : 把用户加入组
    -d 用户名 : 把用户从组中删除

    权限管理

    ACL权限:解决身份不足

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    查看ACL命令

    getfacl 文件名 #查看acl权限

    setfacl 选项 文件名 #设定ACL权限的命令
    -m 设定ACL权限
    -x 删除指定的ACL权限
    -b 删除所有的ACL权限
    -d 设定默认ACL权限
    -k 删除默认ACL权限
    -R 递归设定ACL权限

    setfcal -x u:用户名 文件名 #删除指定用户的ACL权限
    setfacl -x g:组名 文件名 #删除指定用户组的ACL权限
    setfacl -m u:用户名:权限 -R 文件名 #递归ACL权限
    setfacl -m d:u:用户名:权限 文件名 #默认ACL权限

    最大有效权限mask:mask是用来指定最大有效权限的,如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。
    递归ACL权限:递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
    默认ACL权限:默认ACL权限的作用时如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限

    文件特殊权限

    • SetUID的功能

      • 只有可以执行的二进制程序才能设定SUID权限
    • 命令执行者要对该程序拥有x(执行)权限

      • 命令执行者在执行该程序时获得该程序文件属主的身份
      • SetUID权限只在该程序执行过程中有效
    • 设定SetUID的方法

      1
      2
      chmod 4755 文件名	#4代表SUID
      chmod u+s 文件名
  • SetGID针对目录的作用

    • 普通用户必须对此目录拥有r和x权限,才能进入此目录
  • 普通用户在此目录中的有效组会变成此目录的属组

    • 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
  • SetGID针对文件的作用

    • 只有可执行的二进制程序才能设置SGID权限
  • 命令执行者要对该程序拥有x(执行)权限

    • 命令执行在执行程序的时候,组身份升级为该程序文件的属组
    • SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
  • 设定SetGID的方法

    1
    2
    chmod 2755 文件名	#2代表SGID
    chmod g+s 文件名
  • SBIT粘着位作用

    • 粘着位目前只对目录有效
  • 普通用户对该目录拥有w和x权限, 即普通用户可以在此目录拥有写入权限

    • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件,一旦赋予了粘着位。除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
  • 设置和取消粘着位

    1
    2
    3
    4
    5
    6
    7
    设置粘着位
    chmod 1755 目录名
    chmod o+t 目录名

    取消粘着位
    chmod 777 目录名
    chmod o-t 目录名
  • 文件系统属性权限

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    chattr
    chattr [+-=] [选项] 文件或目录名
    +: 增加权限
    -: 删除权限
    =: 等于某权限
    选项
    i: 如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据,如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件
    a: 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据,如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除

    lasttr 选项 文件名 #查看文件系统属性
    -a 显示所有文件和目录
    -d 若目标是目录,仅列出目录本身的属性,而不是子文件的
  • 系统命令权限

    sudo权限

    • root把本来只能超级用户执行的命令赋予普通用户执行
  • sudo的操作对象是系统命令
  • 文件系统常用命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    df [选项] [挂载点]	#文件系统查看命令
    -a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
    -h 使用习惯单位显示容量,如KB,MB或GB等
    -T 显示文件系统类型
    -m 以MB为单位显示容量
    -k 以KB为单位显示容量

    du [选项] [目录或文件名] #统计目录或文件大小
    -a 显示每个子文件的磁盘占用量,默认只统计子目录的磁盘占用量
    -h 使用习惯单位显示容量,如KB,MB或GB等
    -s 统计总占用量,而不列出子目录和子文件的占用量

    fsck [选项] 分区设备文件名 #文件系统修复命令
    -a 不用显示用户提示,自动修复文件系统
    -y 自动修复,和-a作用一致,不过有些文件系统只支持-y

    dumpe2fs 分区设备文件名 #显示磁盘状态命令

    mount [-l] #查询系统中已经挂载的设备,-l会显示卷标名称
    mount -a #依据配置文件/etc/fstab的内容,自动挂载

    挂载命令格式
    mount [-t 文件系统][-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
    -t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3 ext4、iso9660等文件系统
    -L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
    -o 特殊选项:可以指定挂载的额外选项
  • Shell

    shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。

    1
    2
    3
    echo 输出命令
    echo [选项] [输出内容]
    -e 支持反斜线控制的字符转换
  • Bash基本功能

    1
    2
    3
    4
    5
    6
    7
    history [选项] [历史命令保存文件] #历史命令
    -c 清空历史命令
    -w 把缓存中的历史命令写入历史命令保存文件~/.bash_history

    alias #查询命令别名
    alias 别名='原命令' #设定命令别名
    unalias 别名 #删除别名

输出重定向

类型 符号 作用
标准输出 命令 > 文件 以覆盖的方式把命令的正确输出输出到指定的文件或设备当中
重定向 命令 >> 文件 以追加的方式把命令的正确输出输出到指定的文件或设备当中
标准错误输出 错误命令 2> 文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
重定向 错误命令 2>> 文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中
正确输出 命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
错误输出 命令 &> 文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
同时保存 命令 &>> 文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中
命令 >> 文件1 2>> 文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中

输入重定向

1
2
3
4
wc [选项] [文件名]
-c 统计字节数
-w 统计单词数
-l 统计行数

多命令顺序执行

多命令执行符 格式 作用
; 命令1; 命令2; 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1&&命令2 逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
|| 命令1||命令2 逻辑或
当命令1执行不正确,则命令2才会执行
当命令1执行正确,则命令2不会执行
1
2
3
4
5
6
7
8
dd if=输入文件 of=输出文件 bs=字节数 count=个数
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看作一个数据块
count=个数 指定输入/输出多少个数据块

example:
date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date

管道符

1
2
3
4
5
6
7
8
9
命令1 | 命令2 #命令1的正确输出作为命令2的操作对象
ll -a /etc/ | more
netstat -an | grep 'ESTABLISHED'

grep [选项] “搜索内容” 文件名
-i 忽略大小写
-n 输出行号
-v 反向查找
--color=auto 搜索出的关键字用颜色显示

通配符

通配符 作用
匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符,例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c
[-] 匹配中括号中任意一个字符,例如[a-z]代表匹配一个小写字母
[ ^ ] 逻辑非,表示匹配不是中括号内的一个字符,例如[ ^0-9 ]表示匹配一个不是数字的字符
  • Bash变量

位置参数变量

位置参数变量 作用
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含如${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
1
2
3
4
5
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $sum

预定义变量

预定义变量 作用
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行,如果这个变量的值为非0,则证明上一个命令执行不正确。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)

接收键盘输入

1
2
3
4
5
read [选项] [变量名]
-p 提示信息:在等待read输入时,输出提示信息
-t 秒数:read命令回一致等待用户输入,使用此选项可以指定等待时间
-n 字符数:read命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入

declare声明变量类型

1
2
3
4
5
6
declare [+/-][选项] 变量名
-:给变量设定类型属性
+:取消变量的类型属性
-i:将变量声明为整数型
-x:将变量声明为环境变量
-p:显示指定变量的被声明的类型

三种数值运算举例

1
2
3
4
5
6
7
8
9
10
11
a=1
b=2

declare -i c=$a+$b
echo $c

d=$(expr $a + $b) #‘+’左右两侧必须要有空格
echo $d

f=$(($a+$b))
echo $f
  • 环境变量配置

    环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如
    PATHHISTSIZEPS1HOSTNAME等默认环境变量
    /etc/profile
    /etc/profile.d/*.sh
    `~/.bash_profile
    ~/.bashrc
    /etc/bashrc

    1
    2
    source命令
    source 配置文件 或 .配置文件

    注销时生效的环境变量配置文件:~/.bash_logout
    其他配置文件:~bash_history

  • 正则表达式与通配符

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

    基础正则表达式

元字符 作用
* 前一个字符匹配0次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配行首,例如:^hello会匹配以hello开头的行
$ 匹配行尾,例如:hello&会匹配以hello结尾的行
[] 匹配中括号中指定的任意一个字符,只匹配一个字符
匹配除中括号的字符以外的任意一个字符
\ 转义符
\{n\} 表示其前面的字符恰好出现n次
\{n,\} 表示其前面的字符出现不小于n次
\{n,m\} 表示其前面的字符至少出现n次,最多出现m次
  • 字符截取命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    cut

    cut [选项] 文件名
    -f 列号:提取第几列
    -d 分隔符:按照指定分隔符分割列

    printf

    printf ‘输出类型输出格式’ 输出内容
    输出类型:
    %ns:输出字符串,n是数字指代输出几个字符
    %ni:输出整数,n是数字指代输出几个数字
    %m.nf:输出浮点数,m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表输出8位数,2位小数,6位整数
    输出格式:
    \a:输出警告声音
    \b:输出退格键,也就是backspace键
    \f:清除屏幕
    \n:换行
    \r:回车也就是enter键
    \t:水平输出退格键,也就是tab键
    \v:垂直输出退格键,也就是tab键

    awk

    awk '条件1{动作1}条件2{动作2}...' 文件名
    条件(Pattern):
    一般使用关系表达式作为条件
    x>10 判断变量x是否大于10
    x>=10 大于等于
    x<=10 小于等于
    动作(Action):
    格式化输出
    流程控制语句

    sed

    sed [选项] ‘[动作]’ 文件名
    -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕
    -e:允许对输入数据应用多条sed命令编辑
    -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
    动作:
    a \:追加
    c \:行替换
    i \:插入
    d:删除
    p:打印
    s:字串替换
  • 字符处理命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    排序命令sort

    sort [选项] 文件名
    -f:忽略大小写
    -n:以数值型进行排序,默认使用字符串型排序
    -r:反向排序
    -t:指定分隔符,默认是分隔符是制表符
    -k n[,m]:按照指定的字段范围排序,从第n字段开始,m字段结束(默认到行尾)

    统计命令wc

    wc [选项] 文件名
    -l:只统计行数
    -w:只统计单词数
    -m:只统计字符数
  • Linux服务管理

    Linux服务

    • RPM包默认安装的服务

      独立的服务

      基于xinetd服务

    • 源码包安装的服务

    RPM安装服务和源码包安装服务的区别就是安装位置的不同

    • 源码包安装在指定位置,一般是/usr/local/
    • RPM包安装在默认位置中
    1
    2
    3
    4
    5
    6
    7
    /etc/init.d/:启动脚本位置(独立服务的启动脚本  )
    /etc/sysconfig/:初始化环境配置文件位置
    /etc/:配置文件位置
    /etc/xinetd.conf:xinetd配置文件
    /etc/xinetd.d/:基于xinetd服务的启动脚本
    /var/lib/:服务产生的数据放在这里
    /var/log:日志

    独立服务的启动

    1
    2
    /etc/init.d/独立服务名 start/stop/status/restart/
    service 独立服务名 start/stop/restart/status
  • 进程管理

    进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
    进程查看

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ps aux #查看系统中所有进程,使用BSD操作系统格式
    ps -le #查看系统中所有进程,使用Linux标准命令格式

    top #查看系统健康状态

    top [选项]
    -d 秒数:指定top命令每隔几秒更新,默认是3秒
    在top命令的交互模式当中可以执行的命令:
    ?或h:显示交互模式的帮助
    P:以CPU使用率排序,默认就是此项
    M:以内存的使用率排序
    N:以PID排序
    q:退出top

    pstree [选项] #查看进程树
    -p:显示进程的PID
    -u:显示进程的所属用户

    终止进程

    1
    2
    3
    4
    5
    6
    kill -l #查看可用的进程信号
    killall [选项][信号] 进程名 #按照进程名杀死进程
    -i:交互式,询问是否要杀死某个进程
    -I:忽略进程名的大小写
    pkill [选项][信号] 进程名 #按照进程名终止进程
    -t 终端号:按照终端号踢出用户
  • 工作管理

    1
    2
    3
    4
    jobs [-l] #查看后台的工作
    -l:显示工作的PID
    fg %工作号 #将后台暂停的工作恢复到前台执行
    %工作号:%号可以省略,但是注意工作号和PID的区别

    系统资源查看

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    vmstat命令监控系统资源
    vmstat [刷新延时 刷新次数]

    dmesg开机时内核检测信息
    dmesg

    free命令查看内存使用状态
    free [-b|-k|-m|-g]
    -b:以字节为单位显示
    -k:以KB为单位显示,默认就是以KB为单位显示
    -m:以MB为单位显示
    -g:以GB为单位显示

    cat /proc/cpuinfo #查看cpu信息
    uptime #显示系统的启动时间和平均负载,也就是top命令的第一行
    uname [选项] #查看系统与内核相关信息
    -a:查看系统所有相关信息
    -r:查看内核版本
    -s:查看内核名称
    -m:判断系统位数
    file /bin/ls #判断当前系统的位数
    lsof [选项] #列出进程调用或打开的文件的信息
    -c 字符串:只列出以字符串开头的进程打开的文件
    -u 用户名:只列出某个用户的进程打开的文件
    -p pid: 列出某个PID进程打开的文件