Linux 命令基础

命令基本格式及文件处理命令

命令提示符

命令提示符例子:[root@localhost ~]#,参数意义如下:

  • root:当前登录用户名称
  • @:分隔用户名称和主机名称
  • localhost:主机名称
  • ~:当前所在目录
  • #:超级用户提示符,普通用户提示符是 $

命令格式

命令 [选项] [参数]

  • 个别命令使用不遵循此格式
  • 当有多个选项时,可以写在一起
  • 简化选项与完整选项:-a 等于 –all

查询目录中内容:ls

ls [选项] [文件或目录]

选项:

  • -a:显示所有文件,包括隐藏文件
  • -l:显示详细信息
  • -d:查看目录属性
  • -h:人性化显示文件大小
  • -i:显示 inode

命令 ls -l 等于命令 ll

目录处理命令

  • 新建目录:mkdir
    • mkdir -p [目录名称]
    • -p 递归创建
    • 命令英文原意:make directories
  • 切换所在目录:cd
    • cd [目录名称]
      • cd ~ :进入当前用户的家目录
      • cd - :进入上次目录
      • cd . :进入当前目录
      • cd .. :进入上一级目录
    • 命令英文原意:change directory
    • 相对路径:参照当前所在目录,进行查找
    • 绝对路径:从根目录开始制定,一级一级递归查找。在任何目录下,都能进入指定目录
  • 查询所在目录位置:pwd
    • pwd
    • 命令英文原意:print working directory
  • 删除空目录:rmdir
    • rmdir [目录名称]
    • 命令英文原意:remove empty directories
  • 删除文件或目录:rm
    • rm -rf [文件或目录]
      • -r :删除目录
      • -f :强制
    • 命令英文原意:remove
  • 复制命令:cp
    • cp [选项] [原文件或目录] [目标目录]
      • -r :复制目录
      • -p :连带文件属性复制
      • -d :若源文件是链接文件,则复制链接属性
      • -a :相当于 -pdr
    • 命令英文原意:copy
  • 剪切或重命名命令:mv
    • mv [原文件或目录] [目标目录]
    • 命令英文原意:move

常见目录作用

  • / :根目录
  • /bin :命令保存目录
  • /dev :设备文件保存目录
  • /etc :配置文件保存目录
  • /lib :系统保存目录
  • /mnt :系统挂载目录
  • /tmp :临时目录
  • /sys :
  • /var :系统相关文档内容
  • /usr :系统软件资源目录
    • /usr/bin :系统命令(普通用户)
    • /usr/sbin :系统命令(超级用户)
  • /boot :启动目录,启动相关文件
  • /home :普通用户的家目录
  • /root :超级用户的家目录
  • /sbin :命令保存目录
  • /proc :直接写入内存的
  • /media : 挂载目录

链接命令

  • 链接命令:ln
    • ln [参数] [原文件] [目标文件]
      • -s :创建软链接
      • 默认创建硬链接
    • 命令英文原意:link
    • 功能描述:生成链接文件
  • 硬链接特征:
    • 拥有相同的 I 节点和存储 Block 块,可以看做是同一个文件
    • 可通过 I 节点识别
    • 不能跨分区
    • 不能针对目录使用
  • 软连接特征:
    • 类似 Windows 快捷方式
    • 软链接拥有自己的 I 节点和 Block 块,但是数据块中只保存原文件的文件名和 I 节点号,并没有实际的文件数据
    • 软连接文件权限都为:rwxrwxrwx
    • 修改任意文件,另一个都改变
    • 删除原文件,软链接不能使用

文件搜索命令

文件搜索命令 locate

  • locate 文件名(只能搜索文件名)
    • 在后台数据库中按文件名搜索,搜索速度更快
  • /var/lib/mlocate
    • locate 命令所搜索的后台数据库
  • updatedb
    • 更新数据库
  • /etc/updatedb.conf 配置文件
    • PRUNE_BIND_MOUNTS = “yes” (开启搜索限制)
    • PRUNEFS = (搜索时,不搜索的文件系统)
    • PRUNENAMES = (搜索时,不搜索的文件类型)
    • PRUNEPATHS = (搜索时,不搜索的路径)

命令搜索命令 whereis 与 which

  • whereis
    • 搜索命令所在路径及帮助文档所在位置
    • 选项
      • -b 只查找可执行文件
      • -m 只查找帮助文件
  • which (能看到命令的别名,只能看到命令的所在位置)

文件搜索命令 find

  • find [搜索范围] [搜索条件]
    • 搜索文件
  • find / -name install.log
    • 避免大范围搜索,会非常耗费系统资源
    • find 是在系统当中搜索符合条件的文件名。如果需要匹配,使用通配符匹配,通配符是完全匹配
    • Linux 中的通配符
        • 匹配任意内容
      • ? 匹配任意一个字符
      • [] 匹配任意一个中括号内的字符
  • find /root -iname install.log 不区分大小写
  • find /root -user root 按照所有者搜索
  • find /root -nouser 查找没有所有者的文件
  • find /var/log/ -mtime +10 查找 10 天前修改的文件
    • 10 10 天当天修改的文件
    • -10 10 天内修改文件
    • +10 10 天前修改的文件
    • atime 文件访问时间
    • ctime 改变文件属性
    • mtime 修改文件内容
  • find . -size 25k 查找文件大小是 25 KB 的文件
    • 25K 等于 25 KB的文件
    • -25K 小于 25 KB的文件
    • +25K 大于 25KB 的文件
  • find . -inum 262422 查找 i 节点是 262422 的文件
  • find /etc -size +20k -a -size -50k 查找 /etc/ 目录下,大于 20 KB 并且小于 50 KB 的文件
    • -a and 逻辑与,两个条件都满足
    • -o or 逻辑或,两个条件满足一个即可
  • find /etc -size +20k -a -size -50k -exec ls -lh {} \; 查找 /etc/,大于 20 KB 并且小于 50 KB 的文件,并显示详细信息,-exec/ -ok 命令 {}\; 对搜索结果执行操作

字符串搜索命令 grep

  • grep [选项] 字符串 文件名 在文件当中匹配符合条件的字符串
    • -i 忽略大小写
    • -v 排除指定字符串

find 命令与 grep 命令的区别

find 命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配。

grep 命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式时包含匹配。

帮助命令

帮助命令 man

  • man 命令 获取指定命令的帮助
  • man -f 命令 相当于 whatis 命令 查看命令的帮助级别
  • man -k 命令 相当于 apropos 命令 查看和命令相关的所有帮助
  • man 的级别
    • 1 : 查看命令的帮助
    • 2 : 查看可被内核调用的函数的帮助
    • 3 : 查看函数和函数库的帮助
    • 4 : 查看特殊文件的帮助(主要是 /dev 目录下的文件)
    • 5 : 查看配置文件的帮助
    • 6 : 查看游戏的帮助
    • 7 : 查看其他杂项的帮助
    • 8 : 查看系统管理员可用命令的帮助
    • 9 : 查看和内核相关文件的帮助

其他帮助命令

  • 命令 --help 获取命令选项的帮助
    • ls --help
  • help shell 内部命令 获取 shell 内部命令的帮助
    • whereis cd 确定是否是 shell 内部命令
    • help cd 获取内部命令帮助
  • info 命令
    • 回车 : 进入子帮助页面
    • u : 进入上层页面
    • n : 进入下一个帮助小节
    • p : 进入上一个帮助小节
    • q : 退出

压缩命令

  • 常用的压缩格式:
    • .zip
    • .gz
    • .bz2
    • .tar.gz
    • .tar.bz2
  • .zip 格式
    • zip 压缩文件名 源文件 压缩文件
    • zip -r 压缩文件名 源目录 压缩目录
    • unzip 压缩文件 解压 .zip 文件
  • .gz 格式
    • gzip 源文件 压缩为 .gz 格式的压缩文件,源文件消失
    • gzip -c 源文件 > 压缩文件 压缩为 .gz 格式的压缩文件,源文件保留
    • gzip -r 目录 压缩目录下所有的子文件,但是不能压缩目录
    • gzip -d 压缩文件 解压文件
    • gunzip 压缩文件 解压文件
  • .bz2
    • bzip2 源文件 压缩为 .bz2 格式的压缩文件,不保留源文件
    • bzip2 -k 源文件 压缩为 .bz2 格式的压缩文件,保留源文件
    • bzip2 命令不能压缩目录
  • tar.gz
    • tar -cvf 打包文件名 源文件
      • 选项
        • -c : 打包
        • -v : 显示过程
        • -f : 指定打包后的文件名
      • 举例:tar -cvf longzls.tar longzls
    • tar -xvf 打包文件名
      • 选项
        • -x : 解打包
      • 举例:tar -xvf longzls.tar
    • tar -zcvf 压缩包名.tar.gz 源文件 压缩为 .tar.gz 格式的压缩文件
    • tar -zxvf 压缩包名.tar.gz 解压 .tar.gz 格式的文件
    • tar -jcvf 压缩包名.tar.bz2 源文件 压缩为 .tar.bz2 格式的压缩文件
    • tar -jxvf 压缩包名.tar.bz2 解压 .tar.bz2 格式的文件

关机重启命令

  • shutdown 命令
    • shutdown [选项] 时间
    • 选项
      • -c :取消前一个关机命令
      • -h :关机(尽可能少用)
      • -r :重启
  • 其他关机命令
    • halt
    • poweroff
    • init 0
  • 其他重启命令
    • reboot
    • init 6
  • 系统运行级别
    • 0 关机
    • 1 单用户
    • 2 不完全多用户,不含 NFS 服务
    • 3 完全多用户
    • 4 未分配
    • 5 图形界面
    • 6 重启
  • cat /etc/inittab 可以修复系统默认运行级别
  • runlevel 查询系统运行级别
  • logout 退出登录命令

挂载命令

  • 查询与自动挂载
    • mount [-t 文件系统] [-o 特殊选项] 设备 文件名 挂载点
      • -t 文件系统:加入文件系统类型来指定挂载的类型,可以 ext3、ext4、iso 9660 等文件系统
      • -o 特殊选项:可以指定挂载的额外选项
    • mount 查询系统中已经挂载的设备
    • mount -a 依据配置文件 /etc/fstab 的内容,自动挂载
  • 光盘的挂载
    • 挂载光盘
      • mkdir /mnt/cdrom/ 建立挂载点
      • mount -t iso9660 /dev/cdrom /mnt/cdrom/ 挂载光盘
      • mount /dev/sr0 /mnt/cdrom/
    • 卸载命令
      • umount 设备文件名或挂载点
      • umount /mnt/cdrom
  • U 盘的挂载
    • fdisk -l 查看存储设备文件名
    • mount -t vfat /dev/sdb1 /mnt/usb/

用户登录查看命令

  • w
    • USER :登录的用户名
    • TTY :登录终端
    • FROM :从哪个 IP 地址登录
    • LOGIN@ :登录时间
    • IDLE :用户闲置时间
    • JCPU :指的是和该终端连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间;
    • PCPU :是指当前进程所占用的时间;
    • WHAT :当前正在运行的命令
  • who
    • 用户名
    • 登录终端
    • 登录时间(登录来源 IP 地址)
  • last(查询当前登录和过去登录的用户信息)
    • last 命令默认是读取 /var/log/wtmp 文件数据
    • 命令输出
      • 用户名
      • 登录终端
      • 登录 IP
      • 登录时间
      • 退出时间(在线时间)
  • lastlog(查看所有用户的最后一次登录时间)
    • lastlog 命令默认是读取 /var/log/lastlog 文件内容
    • 命令输出
      • 用户名
      • 登录终端
      • 登录 IP
      • 最后一次登录时间

Shell 基础

Shell 概述

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

Shell 还是一个功能相当强大的编程语言,易编写,易调试,灵活性比较强。
Shell 是解释执行的脚本语言,在 Shell 中可以直接调用 Linux 的系统命令

Shell 的分类

  • Bourne Shell
    • sh、ksh、Bash、psh、zsh
  • C Shell
    • csh、tcsh

脚本执行方式

  • echo 输出命令
    • echo [选项] [输出内容]
    • 选项
      • -e :支持反斜线控制的字符转换
    • 字符转换
      • \a 输出警告音
      • \b 退格键,也就是向左删除键
      • \n 换行符
      • \r 回车键
      • \t 制表符
      • \v 垂直制表符
      • \0nnn 按照八进制 ASCII 码表输出字符。其中 0 为数字零,nnn 是三位八进制数
      • \xhh 按照十六进制 ASCII 码表输出字符。其中 hh 是两位十六进制数
    • 使用颜色
      • 30m=黑色
      • 31m=红色
      • 32m=绿色
      • 33m=黄色
      • 34m=蓝色
      • 35m=洋红
      • 36m=青色
      • 37m=白色
      • \e[1;31m \e[0m
    • 例子
      • echo -e "hell\bo";
      • echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f\t";
      • echo -e "\e[1;31mHello World \e[0m";

命令别名与快捷键

  • alias 查看系统中所有的命令别名
  • alias 别名='原命令' 设定命令别名
    • 例子:alias vi='vim'
  • vi ~/.bashrc 写入环境变量配置文件
  • unalias 别名 删除别名
  • 命令生效顺序
    • 第一顺位执行用绝对路径或相对路径执行的命令
    • 第二顺位执行别名
    • 第三顺位执行 Bash 的内部命令
    • 第四顺位执行按照 $PATH 环境变量定义的目录查找顺序找到的第一个命令
  • 常用快捷键
    • Ctrl + c 强制终止当前命令
    • Ctrl + l 清屏
    • Ctrl + a 光标移动到命令行首
    • Ctrl + e 光标移动到命令行尾
    • Ctrl + u 从光标所在位置删除到行首
    • Ctrl + z 把命令放入后台
    • Ctrl + r 在历史命令中搜索

历史命令

  • history [选项] [历史命令保存文件]
    • 选项
      • -c :清空历史缓存
      • -w :把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
    • 历史命令默认会保存 1000 条,可以在环境变量配置文件 /etc/profile 中的 HISTSIZE 进行修改
    • 历史命令的调用
      • 使用上、下箭头调用以前的历史命令
      • 使用 !n 重复执行第 n 条历史命令
      • 使用 !! 重复执行上一条命令
      • 使用 !字符 重复执行最后一条以该字符串开头的命令

输出重定向

1.标准输入输出

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/sdtout 1 标准输入
显示器 /dev/sdterr 2 标准错误输出

2.输出重定向

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

3.输入重定向

  • wc [选项] [文件名] 输入重定向
    • 选项
      • -c :统计字节数
      • -w :统计单词数
      • -i :统计行数

        管道符

1.多命令顺序执行

多命令执行符 格式 作用 例子
; 命令1;命令2 多个命令顺序执行,命令之间没有任何逻辑联系,即使报错也会往下执行 date ; ls ; cd ~; history;
&& 命令1&&命令2 逻辑与,当命令 1 正确执行,则命令 2 才会执行,当命令 1 执行不正确,则命令 2 不会执行 ls && echo yes
II 命令1 II 命令2 逻辑或,当命令 1 执行不正确,则命令 2 才会执行,当命令 1 正确执行,则命令 2 不会执行 lsls II echo no

2.管道符

  • 格式:命令 1 | 命令 2
  • 作用:命令 1 的正确输出作为命令 2 的操作对象

通配符

1.通配符

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

通配符执行例子

  • 存在文件夹dzp,dzp2,dzp3,dzp34,dzpadzpbols,dzpcang
  • 执行命令 ls dzp,显示文件夹 dzp
  • 执行命令 ls dzp?,显示文件夹 dzp2dzp3
  • 执行命令 ls dzp[0-9],显示文件夹 dzp2dzp3
  • 执行命令 ls dzp[0-9][0-9],显示文件夹 dzp34
  • 执行命令 ls dzp[^0-9],显示文件夹 dzpa
  • 执行命令 ls dzp[^0-9]*,显示文件夹 dzpadzpbolsdzpcang

2.Bash 中其他特殊符号

符号 作用
‘’ 单引号。在单引号中所有特殊符号,如 $ 和 ` 都没有特殊含义。
“” 双引号。在双引号中特殊符号都没有特殊含义,但是 $ 、`、\ 是例外,拥有调用变量值引用命令转义符的特殊含义
`` 反引号。反引号包括起来的内容是系统命令,在 Bash 中会先执行它。和 $() 作用一样,不过推荐使用 $(),因为反引号非常容易看错。
$() 和反引号作用一样,用来引用系统命令
# 在 Shell 脚本中,# 开头的行代表注释
$ 用于调用变量的值,如需要调用变量 name 的值时,需要用 $name 的方式得到变量的值
\ 转义符,跟在 \ 之后的

用户管理

用户和用户组的概念

  • 用户:使用操作系统的人
  • 用户组:具有相同系统权限的一组用户
  • /etc/group 存储当前系统中所有用户组信息
    • Group:x:499:root,luis,daemon
    • 组名称:组密码占位符:组编号:组中用户名列表
  • /etc/gshadow 存储当前系统中用户组的密码信息
    • Group:*: :root,luis
    • 组名称:组密码:组管理者:组中用户名列表
  • /etc/passwd 存储当前系统中所有用户的账号信息
    • root:x:0:0:root:/root:/bin/bash
    • 用户名:密码占位符:用户编号:用户组编号:用户注释信息:用户主目录:Shell 类型
  • /etc/shadow 存储当前系统中所有用户的密码信息
    • root:$6$tBDREHKV$JfcEQ/hTxaOWI8QKoRPARviOq3etqaE.szqFoqW8/Uxh6nAkCvlQzp8nRhg4kRM4ySRjpsfyS7kxXfa5cOlLa.:17044:0:99999:7:::
    • 用户名:密码:::

用户和用户组的基本命令

  • 用户组基本命令
    • 新增用户组:groupadd 用户组名称
    • 新增用户组并指定编号:groupadd -g 数字编号 用户组名称
    • 修改用户组名称:groupmod -n 新名称 旧名称
    • 修改用户组编号:groupmod -g 数字编号 用户组名称
    • 删除用户组:groupdel 用户组名称
  • 用户基本命令
    • 删除用户:userdel 用户名称
    • 删除用户并删除个人文件夹:userdel -r 用户名称
    • 新增用户并指定用户组:useradd -g 用户组名称 用户名称
    • 新增用户并指定用户个人文件夹:useradd -d 目录路径 用户名称
    • 修改用户名称:usermod -l 新名称 旧名称
    • 修改用户备注信息:usermod -c 备注信息 用户名称
    • 修改用户的用户组信息:usermod -g 用户组名称 用户名称
    • 指定用户新的个人文件夹:usermod -d 目录路径 用户名称
  • 其他命令
    • 切换用户:su
    • 锁定用户:passwd -l 用户名称
    • 解锁用户:passwd -u 用户名称
    • 无密码登录:passwd -d 用户名称
    • 设置组密码:gpasswd 用户组名称
    • 显示用户详情:
      • 显示当前登录用户名:whoami
      • 显示用户信息和组信息:id 用户名称
      • 显示用户所在的所有组:groups 用户名称
    • 设置用户资料:chfn 用户名称
    • 新增用户附属组:gpasswd -a 用户名称 用户组名称(在 Linux 当中,一个用户可以属于多个用户组,但只能有一个主要组,其余都是附属组)
    • 删除用户附属组:gpasswd -d 用户名称
    • 切换用户附属组:newgrp 用户组名称
    • 新增用户指定主要组和附属组:useradd -g 主要组名称 -G 附属组名称