命令基本格式及文件处理命令
命令提示符
命令提示符例子:[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.输入重定向
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
,dzpa
,dzpbols
,dzpcang
- 执行命令
ls dzp
,显示文件夹dzp
- 执行命令
ls dzp?
,显示文件夹dzp2
,dzp3
- 执行命令
ls dzp[0-9]
,显示文件夹dzp2
,dzp3
- 执行命令
ls dzp[0-9][0-9]
,显示文件夹dzp34
- 执行命令
ls dzp[^0-9]
,显示文件夹dzpa
- 执行命令
ls dzp[^0-9]*
,显示文件夹dzpa
,dzpbols
,dzpcang
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 附属组名称
- 切换用户: