前言
命令提示符
# 命令提示符样式:
[root@node00 ~]#
# 组成说明:
root # 当前登录用户
@ # 命令提示符中的分隔符
node00 # 主机名
~ # 目前所在的目录。~代表用户的家目录
# # root用户的结尾符。普通用户的结尾符为 $
# 查看当前登陆用户
[root@node00 ~]# whoami
root
# 查看主机名
[root@node00 ~]# hostname
node00
命令提示符的组成由PS1环境变量控制
# 默认的PS1设置
echo $PS1 # 结果为:[\u@\h \W]\$
# 可以通过修改/etc/bashrc文件的内容来设置提示信息,支持的配置如下:
PS1变量 含义
\d # 代表日期,格式为weekday month day,例如"Mon Aug 1"
\H # 完整的主机名
\h # 仅取主机的第一个名字
\t # 显示24小时制的时间,格式为HH:mm:ss
\T # 显示12小时制的时间,格式为hh:mm:ss
\A # 显示24小时制的时间,格式为HH:mm
\u # 当前用户的名称
\v # BASH版本信息
\w # 显示完整的路径,家目录用"~"代替
\W # 利用basename获取工作目录名称,只会列出最后一个目录
\# # 执行的第几个命令
\$ # 提示字符,如果是root,则提示符为#,普通用户为$
## 临时设置PS1变量
PS1='[\u@\h \w]\$ '
cd /etc/sysconfig/network-scripts/
# \w控制的显示全部路径已经生效了:[root@node00 /etc/sysconfig/network-scripts]#
## 永久设置PS1变量
vi /etc/bashrc
# 这是文件中默认的内容
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
# 修改为你自己喜欢的格式,一个美观的PS1变量的格式如下
PS1="[\[\[\e[34;1m\]\t \[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\h\[\e[0m\]\[\e[31;1m\] \W\[\e[0m\]]\\$ "
# 保存退出之后
source /etc/bashrc
命令格式
# command [arg] [path]
# 命令 可选的参数选项(可选) 文件或目录(可选)
# 示例:
rm -rf /tmp/test.txt
# 命令和参数、参数和要操作的文件或目录之间必须有至少一个空格
linux的目录结构
/ # 根目录(只有一个根盘符--类似就是一个C盘符)
/bin # Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。这个目录已经包含在“path”系统变量里面
/boot # 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev # Device(设备)的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
/etc # Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/etc/profile # 存储系统环境变量的文件
/etc/passwd # 存储所有用户列表的文件
/home # 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib # Library(库) 的缩写。这个目录里存放着系统最基本的动态连接共享库和内核模块,其作用类似于 Windows 里的 DLL 文件。 几乎所有的应用程序都需要用到这些共享库。
/lost+found # 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media # linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt # 系统提供该目录是为了让用户临时挂载别的文件系统的。将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
/opt # optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如安装一个ORACLE数据库则就可以放到这个目录下。 默认是空的。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。
/proc # Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件。 这个目录是一个虚拟的目录,它是系统内存的映射,可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令, 使别人无法ping你的机器:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
/root # 该目录为系统管理员,也称作超级权限者的用户主目录。
/sbin # Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
/selinux # 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙, 但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv # 该目录存放一些服务启动之后需要提取的数据。
/sys # 这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。
# sysfs 文件系统集成了下面3种文件系统的信息: 针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。 该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp # temporary(临时) 的缩写这个目录是用来存放一些临时文件的。 linux系统会定期自动对这个目录进行清理,因此,千万不要把重要的数据放在这里。
/usr # unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下, 类似于 windows 下的 program files 目录。
/usr/local # 存放用户手动安装的软件
/usr/bin # 系统用户使用的应用程序。
/usr/share # 用于存放一些共享的数据,比如音乐文件或者图标等等
/usr/share/fonts # 是字体目录
/usr/sbin # 超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src # 内核源代码默认的放置目录。
/usr/lib # 目录用于存放那些不能直接 运行的,但却是许多程序运行所必需的一些函数库文件
/var # variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,习惯将那些经常被修改的目录放在这个目录下。 包括各种日志文件。
/var/log # 系统日志存放,分析日志要看这个目录的东西
/run # 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。 如果你的系统上有 /var/run 目录,应该让它指向 run。
### 在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc # 这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
/bin, /sbin, /usr/bin, /usr/sbin # 这是系统预设的执行文件的放置目录,比如 ls 就是在 /bin/ls 目录下的。
# /bin, /usr/bin 是给系统用户使用的指令(除root外的通用户),而/sbin, /usr/sbin 则是给 root 使用的指令。
/var # 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在 /var/log 目录下,另外 mail 的预设放置也是在这里。
命令行常用快捷键
参考:Linux 命令行快捷键
# 控制命令
Ctrl + C :停止当前进程并返回提示符 # 常用
Ctrl + L :进行清屏操作。等同于命令(clear)
Ctrl + Z :暂停执行在终端运行任务
# 移动光标
Ctrl + A :跳到行的开头
Ctrl + E :跳到行尾 # 常用
Ctrl + B :往回(左)移动一个字符(相当于左键)
Ctrl + F :往后(右)移动一个字符(相当于右键)
Ctrl + XX :(两个X)在行的开头和光标之间移动
Alt + B :往回(左)移动一个单词
Alt + F :往后(右)移动一个单词
# 编辑命令
Ctrl + H :删除一个光标左方位置的字符
Ctrl + W :由光标位置开始,往左删除单词。往行首删 # 常用
Alt + D :由光标位置开始,往右删除单词。往行尾删
Ctrl + U :删除当前光标前面的所有文字(还有剪切功能) # 常用
Ctrl + K :删除当前光标后面的所有文字(还有剪切功能)
Ctrl + Y :粘贴Ctrl + U或Ctrl + K剪切的内容到光标后
Ctrl + _ :回复之前的状态。撤销操作 # 常用
Ctrl + A + K 或 Ctrl + E + U 或 Ctrl + K + U :组合可删除整行 # 常用
Tab :自动补全内容 # 常用
Ctrl + r :搜索执行过的命令
Ctrl + g :从搜索历史命令的UI中退出
Esc + . :获取上一条命令使用空格分隔后的最后一部分
Ctrl + l :清除屏幕内容
!! :执行上一条命令
!pw :执行最近以pw开头的命令
!pw:p :打印最近以pw开头的命令,但不执行Z
!num :执行历史命令列表中第num条命令
Ctrl + R :搜索历史命令,随着输入会显示历史命令中的一条匹配命令,Enter键执行匹配命令;ESC键在命令行显示而不执行匹配命令
终端/客户端:登出 关机 重启
终端
每次打开一个命令行窗口,都是开启一个新的终端,包括远程连接的窗口,使用 tty
命令来查看当前窗口的终端
# 查看当前窗口的终端的命令
tty # 输出为:/dev/pts/0
# 终端与终端的通信
/dev/pts/0终端发出通信信息:echo hello > /dev/pts/1
/dev/pts/1终端收到通信信息:hello
# 使用wall命令手动广播消息
wall 'hello everybody'
退出登录
仅退出当前用户(终端)的登录状态,并不关机
- 命令:exit
- 命令:logout
- 快捷键:crtl + d
关机重启主机
- 命令 halt :立即关机
- 命令 poweroff :立即关机
- 命令 reboot :立即重启
命令 init
init 0 # 立即关机 init 6 # 立即重启
shutdown:可以安全的关闭或者重启系统,并广播关机或者重启的消息给全部的终端
# 默认在一分钟之后关机 shutdown [arg] # arg参数: -r # 重启系统 -h # 关闭系统,可以再后面指定时间 -H # 关闭系统,不常用 -P # 关闭系统,不常用 -c # 取消正在执行的shutdown命令 -k # 只发送关机消息给所有终端,但并不会真正关机,极少使用 shutdown -h now # 立刻关机 shutdown -h 0 # 立刻关机 shutdown -h 5 # 5分钟之后关机,最大支持15min的延迟 shutdown -h 14:00 # 在14:00关机,最大支持15min的延迟 # 重启 shutdown -r now # 立刻重启 shutdown -r 0 shutdown -r 5 # 5分钟之后重启,最大支持15min的延迟 shutdown -r 14:00 # 取消计划 shutdown -c
CentOS7的关机、重启命令
# shutdown、reboot、poweroff、halt在CentOS7中实际上是systemctl命令的参数,CentOS7还有以下系统关机重启相关的命令: systemctl reboot # 重启系统 systemctl halt # 关闭系统,CPU停止工作 systemctl poweroff # 关闭系统并切断电源 systemctl suspend # 暂停系统运行 systemctl hibernate # 系统休眠 systemctl hybrid-sleep # 系统进入交互式休眠状态 systemctl rescue # 启动救援状态
bash:shell 脚本解释器
bash 是一个为 GNU 计划编写的 Unix shell。
bash 是大多数 Linux 系统以及Mac OSX 默认的 shell,它能运行于大多数类 Unix 风格的操作系统之上,甚至被移植到了 Microsoft Windows 上的 Cygwin 系统中,以实现 Windows 的 POSIX 虚拟接口。此外,它也被 DJGPP 项目移植到了 MS-DOS 上。
语法格式:
bash [参数] [文件]
# 常用参数:
-n 检测脚本是否正确,并不执行脚本
-x 执行脚本,输出执行过程
-c bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数
参考实例:
# 使用-n参数检查脚本语法时候正确:
bash -n linuxcool.sh
# 使用-x参数执行linuxcool.sh脚本并输出执行过程:
bash -x linuxcool.sh
sh 和 bash 的区别
sh
是一种 POSIX 标准,它有很多种实现,包括ksh88
,dash
,bash
等。- 因为
sh
是一种规范,并不是实现,sh 通常是一个软链接,链接到系统默认 shell。 - 大多数情况下,
/bin/sh
会链接到/bin/bash
所以执行
sh xx.sh
等价于执行bash xx.sh
但是在一些系统中,
/bin/sh
并没有指向/bin/bash
,比如在一些现代的 Debian 和 Ubuntu 系统中,sh
指向的是dash
文件管理
chown chmod:文件权限设置命令
用户对文件具有什么操作权限
root管理员
linux的文件操作权限:
- 读权限(r):对文件表示可读取此文件中的实际内容,对目录表示读取目录结构列表的权限
- 写权限(w):对文件表示可以编辑、新增或者修改文件中的内容,对目录表示可以新建,删除,修改,移动子目录和目录中的文件
- 执行权限(x):对文件表示该文件具有被系统执行的权限。对目录赋予 x 权限,代表用户可以进入目录
- rw- r-- r--
# 文件类型 -:文件 d:文件夹 l:链接文件(快捷方式) b:可供存储周边设备 c:一次性读取装置
# 文件所有者(用户root):读权限,写权限(对超级管理员root无效)
# 文件所属组(用户组root):读权限
# 其他用户:读权限
chown ==> 修改文件或目录所有者,所有组命令
# 语法
chown [-R] 所有者[:所属组] 文件或目录
-R, --recursive # 递归处理,将指令目录下的所有文件及子目录一并处理
# 参考实例
# 修改 test1.txt 文件的所有者为 www
chown www test1.txt # 结果:-rw-r--r--. 1 www root 0 3月 31 10:47 test1.txt
# 修改 text2.txt 文件的所有者和所有组为 www
chown www:www test2.txt # 结果:-rw-r--r--. 1 www www 0 3月 31 10:47 test2.txt
# 修改 test3.txt 文件的所有组为 www
chown :www test3.txt # 结果:-rw-r--r--. 1 root www 0 3月 31 10:47 test3.txt
chmod ==> 修改文件或目录权限命令
- 使用数字设置权限
# 语法
chmod [-R] 权限值 文件名
-R, --recursive # 递归处理,将指令目录下的所有文件及子目录一并处理
# 各个权限用数字表示规则:
r --> 4
w --> 2
x --> 1
- --> 0
# 示例:rwxr-xr-x = 765
所有者的权限值为:rwx = 4 2 1 = 4+2+1 = 7
所属组的权限值为:rw- = 4 2 0 = 4+2+0 = 6
其他人的权限值为:r-x = 4 0 1 = 4+0+1 = 5
# 参考示例
chmod 当前登录用户的权限/组中用户的权限/其他用户的权限 test1.txt
chmod 777 1.txt # 结果:-rwxrwxrwx. test1.txt
chmod 000 1.txt # 结果:----------. test1.txt
chmod 536 1.txt # 结果:-r-x-wxrw-. test1.txt
- 使用字母设置权限
# 语法
chmod [-R] [u,g,o,a][ ,-,=][r,w,x] # 使用字母设置权限
-R, --recursive # 递归处理,将指令目录下的所有文件及子目录一并处理
# 参数说明
[u,g,o,a]
u # 所属者身份
g # 所属组身份
o # 其他用户身份
a # 所有身份(不加身份参数,默认所有身份)
[+,-,=]
+ # 加入某个权限
- # 减少某个权限
= # 设置权限
[r,w,x]
r # 读权限
w # 写权限
x # 执行权限
# 参考实例
-rwxrwXrwx 1 www root 0 Dec 6 09:45 test1.txt
-rwxr-Xr-x 1 www www 0 Dec 6 09:45 test2.txt
-rw-r--r-- 1 root www 0 Dec 6 09:45 test3.txt
[root@centos test]# chmod o-wx test1.txt # 其他用户 减少 写(w)和执行(x)权限
[root@centos test]# chmod g=rwx test2.txt # 所属组 设置权限为 rwx
[root@centos test]# chmod u+x test3.txt # 所属者 添加 执行(x)权限
[root@centos test]# ll
total 0
-rwxrwxr-- 1 www root 0 Dec 6 09:45 test1.txt
-rwxrwxr-x 1 www www 0 Dec 6 09:45 test2.txt
-rwxr--r-- 1 root www 0 Dec 6 09:45 test3.txt
du:查看显示文件和目录占用空间
du 命令的英文全称是 “Disk Usage”,即用于查看磁盘占用空间的意思。但是与 df 命令不同的是 du 命令是对文件和目录磁盘使用的空间的查看,而不是某个分区。
语法格式:
# 默认遍历展示各级目录(包含隐藏目录)的占用空间大小,默认单位kb
du [参数] [文件/目录]
# 注:若不指定文件或目录则默认当前目录
# 常用参数:
-h # 以易读方式显示占用空间大小
-s # 仅显示总计,不展示各级目录和文件的大小。
-c # 追加显示总计占用空间大小
-a # 显示所有文件和目录的占用空间大小(即文件、文件夹、隐藏文件和文件夹)
-k # 以KB为单位显示占用空间大小。默认
-m # 以MB为单位显示占用空间大小
-g # 以GB为单位显示占用空间大小
参考实例:
# 查询当前目录总大小
du -sh
# 降序排列展示当前目录及一级子目录的占用空间
du -h --max-depth=1 | sort -gr
# 以易读方式显示当前目录及多级子路径的占用空间
du -h
# 以易读方式显示文件夹内所有文件大小
du -ah
# 输出当前目录及一级子目录的占用空间,并显示总计
du -ch --max-depth=1
# 显示指定文件的所占空间
du log2012.log
ls:显示指定工作目录下的内容及属性信息
ls 命令是 Linux 下最常用的指令之一。
ls 命令为英文单词 list 的缩写,正如英文单词 list 的意思,其功能是列出指定目录下的内容及其相关属性信息。
默认状态下,ls 命令会列出当前目录的内容。
语法格式:
ls [选项] [文件]
# 常用参数:
-a 显示所有文件及目录 (包括以“.”开头的隐藏文件)
-l 使用长格式列出文件及目录信息。ls -l 简写 ll
-r 将文件以相反次序显示(默认依英文字母次序)
-t 根据最后的修改时间排序
-A 同 -a ,但不列出 “.” (当前目录) 及 “..” (父目录)
-S 根据文件大小排序
-R 递归列出所有子目录
-h 以易读方式展示大小
参考实例:
# 列出所有文件(包括隐藏文件):
ls -a
# 列出文件的详细信息
ls -l
# 根据占用空间大小排序展示文件和文件夹
ls -lhS
# 列出当前工作目录下所有名称是 “s” 开头的文件
ll s*
# 列出根目录(/)下的所有目录:
ls /
cp:复制文件或目录
cp 命令可以理解为英文单词 copy 的缩写,其功能为复制文件或目录。
cp 命令可以将多个文件复制到一个具体的文件名或一个已经存在的目录下,也可以同时复制多个文件到一个指定的目录中。
语法格式:
cp [参数] 源文件 目录
# 常用参数:
-r # 递归复制文件和目录。
-f # 若目标文件已存在,则会直接覆盖原文件。
# 默认cp命令是有别名(alias cp='cp -i')的,无法强制覆盖,即使使用 -f 参数也无法强制覆盖文件
# 可以使用 \cp 执行cp命令时不走alias
-i # 若目标文件已存在,则会询问是否覆盖
-p # 保留源文件或目录的所有属性
-d # 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录
-l # 对源文件建立硬连接,而非复制文件
-s # 对源文件建立符号连接,而非复制文件
-b # 覆盖已存在的文件目标前将目标文件备份
-v # 详细显示cp命令执行的操作过程
-a # 等价于“dpr”选项
参考实例:
# 复制目录
cp -r dir1 dir2/
# 将文件test1复制到目录dir2,并改名为test2
cp -f test1 dir2/test2
# 复制多个文件
cp -r file1 file2 file3 dir
# 交互式地将目录 /usr/linuxcool 中的所有.c文件复制到目录 dir 中
cp -r /usr/linuxcool/*.c dir
mv:移动或改名文件
- mv 命令是“move”单词的缩写,其功能大致和英文含义一样,可以移动文件或对其改名。
- 这是一个使用频率超高的文件管理命令,需要特别留意它与复制的区别:mv 与 cp 的结果不同。
mv 命令好像文件“搬家”,文件名称发生改变,但个数并未增加。
cp 命令是对文件进行复制操作,文件个数是有增加的。
语法格式:
mv [参数] 源文件 目录
# 常用参数:
-i 若存在同名文件,则向用户询问是否覆盖
-f 覆盖已有文件时,不进行任何提示
-b 当文件存在时,覆盖前为其创建一个备份
-u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作
参考示例:
# 将文件file_1重命名为file_2
mv file_1 file_2
# 将文件file移动到目录dir中
mv file /dir
# 将目录dir1移动目录dir2中(前提是目录dir2已存在,若不存在则改名)
mv dir1 /dir2
# 将目录dir1下的所有文件移动到当前目录下
mv /dir1/* .
mkdir:创建目录
mkdir 命令是“make directories”的缩写,用来创建目录。
注意:默认状态下,如果要创建的目录已经存在,则提示已存在,而不会继续创建目录。 所以在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
语法格式 :
mkdir [参数] [目录]
# 常用参数:
-p 递归创建多级目录
-m 建立目录的同时设置目录的权限
-z 设置安全上下文
-v 显示目录的创建过程
参考示例:
# 在工作目录下,建立一个名为 dir 的子目录:
mkdir dir
# 在目录/usr/linuxcool下建立子目录dir,并且设置文件属主有读、写和执行权限,其他人无权访问
mkdir -m 700 /usr/linuxcool/dir
# 同时创建子目录dir1,dir2,dir3:
mkdir dir1 dir2 dir3
# 递归创建目录:
mkdir -p linuxcool/dir
touch:创建文件
touch 命令有两个功能:一是创建新的空文件,二是改变已有文件的时间戳属性。
touch 命令会根据当前的系统时间更新指定文件的访问时间和修改时间。如果文件不存在,将会创建新的空文件,除非指定了”-c”或”-h”选项。
注意:在修改文件的时间属性的时候,用户必须是文件的属主,或拥有写文件的访问权限。
语法格式:
touch [参数] [文件]
常用参数:
-a 改变档案的读取时间记录
-m 改变档案的修改时间记录
-r 使用参考档的时间记录,与 --file 的效果一样
-c, --no-create 不创建新文件
-d 设定时间与日期,可以使用各种不同的格式
-t 设定档案的时间记录,格式与 date 命令相同
参考实例:
# 创建空文件:
touch file.txt
# 批量创建文件:
$ touch file{1..5}.txt
rm:移除文件或目录
- rm 是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。
- 对于链接文件,只是删除了链接,原有文件均保持不变。
- rm 是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在 /(根目录)下执行 rm * -rf)
所以,在执行 rm 之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑。
语法格式:
rm [参数] [文件]
# 常用参数:
-f 忽略不存在的文件,不会出现警告信息
-i 删除前会询问用户是否操作
-r/R 递归删除
-v 显示指令的详细执行过程
参考实例:
# 直接删除,不会有任何提示:
rm -f 文件名或空目录
# 递归删除目录及目录下所有文件:
rm -rf /文件名或目录
# 删除当前目录下所有文件:
rm -rf *
# 清空系统中所有的文件(谨慎):
rm -rf /*
rmdir:删除空目录
rmdir 命令作用是删除空的目录,英文全称:“remove directory”。
注意:
- rmdir 命令只能删除空目录。当要删除非空目录时,就要使用带有“-R”选项的 rm 命令。
- rmdir 命令的“-p”参数可以递归删除指定的多级目录,但是要求每个目录也必须是空目录。
语法格式 :
rmdir [参数] [目录名称]
# 常用参数:
-p 用递归的方式删除指定的目录路径中的所有父级目录,非空则报错
-v 显示命令的详细执行过程
-- ignore-fail-on-non-empty 忽略由于删除非空目录时导致命令出错而产生的错误信息
参考实例:
# 删除空目录:
rmdir dir
# 递归删除指定的目录树:
rmdir -p dir/dir_1/dir_2
pwd:显示当前路径
pwd 命令是“print working directory”中每个单词的首字母缩写,其功能正如所示单词一样,为打印工作目录,即显示当前工作目录的绝对路径。
在实际工作中,经常会在不同目录之间进行切换,为了防止“迷路”,可以使用 pwd 命令快速查看当前所在的目录路径。
语法格式:
pwd [参数]
# 常用参数:
-L # 显示逻辑路径
# 获取当前文件夹的名称
basename `pwd`
ln:创建软/硬链接
语法格式:
ln -s target source
# 参数说明:
-s # 软链接,不加该参数默认为硬链接
target # 表示目标文件(夹)【即被指向的文件(夹)】
source # 表示当前目录的软链接名。【即源文件(夹)】。注意,该目录名不能已存在,不然会在该目录下创建软链接!
# 示例:
ln -s /data/aaa/bbb bbb
软连接的删除
rm -rf ./test_chk_ln/ # 会删除文件夹下的所有内容,但是没有删除这个链接;
rm -rf ./test_chk_ln # 则是仅删除这个软链接,不会删除下面的内容。
文档编辑
文件内容浏览命令
less 文件名 # 分页查看所有内容 # 常用
# 箭头上: 上一行
# 箭头下: 下一行
# 空格:下一页
# b:上一页
# q:退出查看
# 参数:
-m # 显示百分比
-N # 显示行号
cat 文件名 # 查看文件局部内容(查看的只是文件最后一部分的内容)
more 文件名 # 百分比分页查看所有内容
# 回车:下一行
# 空格:下一页
# q :退出
# 查看文件的头部/末尾指定行树 (默认显示文件的头部/末尾10行内容)
head -n 数字 文件名 # 查看文件头部内容
tail -n 数字 文件名 # 查看文件末尾内容
# -f 循环读取。常用
# -q 不显示处理信息
# -v 显示详细的处理信息
# -c<数目> 显示的字节数
# -n<行数> 显示文件的尾部 n 行内容
# --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
# -q, --quiet, --silent 从不输出给出文件名的首部
# -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
tail -f FileName # 把 FileName 文件里的最尾部的内容显示在屏幕上,并且不断刷新
文件内容编辑命令
- 编辑模式:对具体的内容进行操作
- 命令模式:对内容行进行操作 复制整行内容 粘贴整行内容 删除整行内容
- 底行模式:保存 退出
# 打开文件
vi 文件名 #或 vim 文件名 # 注:vim可以编辑jar包
# 编辑文件内容操作流程
vi 文件名 ==>打开文件进入 命令模式
----> 按 i 或 o ==>进入 编辑模式
----> (编辑内容)
----> 按 Esc ==>进入 命令模式(锁定内容,禁止编写,但是可以复制粘贴)
----> 按 Shift+: ==>进入 底行模式(保存 退出)
# 命令模式 常用的快捷键
dd # 删除当前行
yy # 复制当前行
p # 粘贴
/要搜索的内容 # 搜索指定内容。按n键:下一个;按N键:上一个
# 底行模式
:wq # 保存并退出
:q # 退出
:q! # 强制退出不保存
注:编写文件的过程中,如果卡死,下次进来需要将隐藏文件删除 .文件名.swp
cat:在终端设备上显示文件内容
Linux 系统中有很多个用于查看文件内容的命令,每个命令又都有自己的特点,比如 cat 命令就是用于查看内容较少的纯文本文件的。
注意:
当文件内容较大时,文本内容会在屏幕上快速闪动(滚屏),用户往往看不清所显示的具体内容。
因此对于较长文件内容:
- 按 Ctrl+S 键,可以停止滚屏
- 按 Ctrl+Q 键,可以恢复滚屏
- 按Ctrl+C(中断)键,可以终止该命令的执行
或者对于大文件,干脆用 more 命令吧!
语法格式:
cat [参数] [文件]
# 常用参数:
-n 显示行数(空行也编号)
-s 显示行数(多个空行算一个编号)
-b 显示行数(空行不编号)
-E 每行结束处显示$符号
-T 将TAB字符显示为 ^I符号
-v 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
-e 等价于”-vE”组合
-t 等价于”-vT”组合
-A 等价于 -vET组合
参考示例:
# 查看文件的内容:
cat filename.txt
# 查看文件的内容,并显示行数编号:
cat -n filename.txt
# 查看文件的内容,并添加行数编号后输出到另外一个文件中:
cat -n linuxcool.log > linuxprobe.log
# 清空文件的内容:
cat /dev/null > /root/filename.txt
# 持续写入文件内容,碰到EOF符后结束并保存:
cat > filename.txt <<EOF
Hello, World
Linux!
EOF
# 将软盘设备制作成镜像文件:
cat /dev/fd0 > fdisk.iso
tail:查看文件尾部内容
tail 用于显示文件尾部的内容,默认在屏幕上显示指定文件的末尾 10 行。
- 如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。
- 如果没有指定文件或者文件名为“-”,则读取标准输入。
语法格式:
tail [参数]
# 常用参数:
-f, --follow<name|descriptor> 显示文件最新追加的内容
-c, --bytes=N 输出文件尾部的N(N为整数)个字节内容
-n, --line=N 输出文件的尾部N(N位数字)行内容
--pid=PID 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令
--retry 即使在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。 使用此选项时需要与选项“——follow=name”连用
-F 与选项“--follow=name --retry”连用时功能相同
参考示例:
# 显示文件file的最后10行:
tail file
# 显示文件file的内容,从第20行至文件末尾:
tail +20 file
# 显示文件file的最后10个字符:
tail -c 10 file
# 一直变化的文件总是显示后10行:
tail -f 10 file
less:分页显示工具
浏览文字档案的内容。
用 less 命令显示文件时,PageUp 键向上翻页,PageDown 键向下翻页,要退出 less 程序,应按 Q 键。
less 的作用与 more 十分相似,不同点为 less 命令允许用户向前或向后浏览文件,而 more 命令只能向前浏览 。
语法格式:
less [参数] [文件]
# 常用参数:
-b 置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 在单行显示较长的内容,而不换行显示
-x 将TAB字符显示为指定个数的空格字符
实际实例:
# 查看文件 :
less test.php
# ps查看进程信息并通过less分页显示:
ps -ef | less
# 查看命令历史使用记录并通过less分页显示:
history | less
# 浏览多个文件 :
less log2018.log log2019.log
# 当正在浏览一个文件时,也可以使用 :e命令 打开另一个文件:
less file1
:e file2
命令内部操作:
- b 向后翻一页
- d 向后翻半页
- h 显示帮助界面
- Q 退出less 命令
- u 向前滚动半页
- y 向前滚动一行
- 空格键 滚动一页
- 回车键 滚动一行
grep:过滤查找
参考:linux grep命令
grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
格式
grep [选项]... PATTERN [FILE]...
# 主要参数:
# 正则表达式控制参数
-w, --word-regexp # 强制 PATTERN 仅完全匹配字词
-x, --line-regexp # 强制 PATTERN 仅完全匹配一行
-i, --ignore-case # 忽略大小写
-E, --extended-regexp # PATTERN 是一个可扩展的正则表达式(缩写为 ERE),识别逻辑操作符 与(|)
-e, --regexp=PATTERN # 用 PATTERN 来进行匹配操作
-G, --basic-regexp # PATTERN 是一个基本正则表达式(缩写为 BRE)
-A, --after-context=NUM # 打印含匹配词的后 NUM 行
-B, --before-context=NUM # 打印含匹配词的前 NUM 行
-C, --context=NUM # 打印含匹配词的前后 NUM 行
# 输出控制参数
-v # 对过滤结果取反
-c # 只输出匹配行的计数
-h # 查询多文件时不显示文件名前缀
-l # 查询多文件时只输出包含匹配字符的文件名
-n # 输出的同时打印行号,行号在前
-m, --max-count=NUM # NUM 次匹配后停止
# 其他
-s # 不显示不存在或无匹配文本的错误信息
-v # 显示不包含匹配文本的所有行。示例:grep -v '^$' 文件名
# pattern正则表达式主要参数:
| # 逻辑操作符:与
\ # 忽略正则表达式中特殊字符的原有含义
^ # 匹配正则表达式的开始行
$ # 匹配正则表达式的结束行
\< # 从匹配正则表达 式的行开始
\> # 到匹配正则表达式的行结束。
[ ] # 单个字符,如[A]即A符合要求
[ - ] # 范围,如[A-Z],即A、B、C一直到Z都符合要求
。 # 所有的单个字符
\* # 有字符,长度可以为0
使用实例:
# 显示所有以d开头的文件中包含 test的行
$ grep ‘test’ d*
# 显示在aa,bb,cc文件中匹配test的行
$ grep ‘test’ aa bb cc
# 显示所有包含每个字符串至少有5个连续小写字符的字符串的行
$ grep ‘[a-z]\{5\}’ aa
# 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
$ grep ‘w\(es\)t.*\1′ aa
sed:流编辑器
参考:Linux中sed的用法
sed 流编辑器,实现对文字的增删改替换查(过滤、取行),能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。
流程:Sed软件从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行……
模式空间:sed软件内部的一个临时缓存,用于存放读取到的内容。
命令格式:
sed [选项] [命令] [输入文件]
# 常用选项:
-i # 直接修改文件内容。如:sed -i s#old#new#g
-n # 只打印模式匹配的行,一般与 p 一起使用。
# 如:sed -n '2p' /data.text 表示输出/data的第二行
# 如:sed -n '20,30p' ./data.text 显示 /data/boy的20到30行
-e # 进行多项编辑,即对输入行应用多条sed命令时使用,此为默认选项
# 如:sed -e '/^#/d' -e '/^$/d' ./data.text 表示删除空格的行和#开头的行
-r # 支持扩展表达式
-f filename # 将sed的动作写在一个脚本文件内,执行filename内的sed动作
# 常用命令。注:如果命令中要传变量,则需要使用双引号,不能使用单引号
s/pattern/replaces/替换标记 # 查找pattern用replaces替换;分隔符可自行指定,常用的分隔符有/, #, @等
# 替换标记:
# g:全局替换。示例:sed -i 's/pattern/replaces/g' test.text
# w /file:将替换的结果保存至指定文件中;
# 实例:sed -i 's/pattern/replaces/w my.txt' test 将替换后的结果保存到my.txt中
# p:显示替换成功的行
d # delete, 删除匹配到的行;
# 示例:sed -i '/xxx/d' filename
# 更换分隔符为#,示例:sed -i '\#xxx#d' filename
p # print, 显示匹配到的行;通常 p 会与参数 sed -n 一起用
a text # append, 在指定行后追加文本text,支持使用\n实现多行追加。
# 示例:sed '/hello/a world' hello.sh # hello行追加world行
i text # insert, 在指定行前插入文本text,支持使用\n实现多行插入
# sed '/hello/i world\n westos' hello.sh # 在hello行前插入 world行 和 westos行
# sed '4i abc' test.txt # 在第4行插入abc
c text # 将指定行的内容替换为文本text
# 示例:sed '/hello/c hello world' hello.sh # 将hello行替换为 hello world
w file # write, 保存模式空间中匹配到的行至指定的文件中;
r file # read, 将指定文件的内容读取至当前模式空间中被匹配到的行后面,常用于实现文件合并
# 示例:sed -i '/Ethernet/r myfile' test
# 匹配Ethernet的行,读进来另一个文件的内容,读进来的文件的内容会插入到匹配Ethernet的行后
y # 用于(对应)转换字符
= # 打印行号
! # 匹配后取反
l # 打印行号,并显示控制字符
q # 读取匹配到的行后退出
sed在文件中查询文本的方式
格式 | 描述 | 示例 |
---|---|---|
x/p | 查询第x行 | sed -n '2p ' /data |
x,y/p | 查询从x到y行 | sed -n '1,3p ' /data |
/pattern/p | 查询包含pattern的行 | sed -n '/pattern/p' /data |
/pattern 1/,/pattern 2/p | 查询包含pattern 1或pattern 2的行 | sed -n '/pn1/,/pn2/p' /data |
/pattern/,xp | 查询从包含pattern的行到x行 | sed -n '/pn/,5p' /data |
x,/pattern/p | 查询从x到包含pattern的行 | sed -n '5,/pn/p' /data |
x,y!p | 查询不包含指定行号x和y的行 | sed -n '5,8!p' /data |
10{sed-commands} # 对第10行操作
10,20{sed-commands} # 对10到20行操作,包括第10,20行
10,+20{sed-commands} # 对10到30(10+20)行操作,包括第10,30行
1~2{sed-commands} # 对1,3,5,7,……行操作
10,${sed-commands} # 对10到最后一行($代表最后一行)操作,包括第10行
/oldboy/{sed-commands} # 对匹配oldboy的行操作
/oldboy/,/Alex/{sed-commands} # 对匹配oldboy的行到匹配Alex的行操作
/oldboy/,${sed-commands} # 对匹配oldboy的行到最后一行操作
/oldboy/,10{sed-commands} # 对匹配oldboy的行到第10行操作
# 注意:如果前10行没有匹配到oldboy,sed软件会显示10行以后的匹配oldboy的行,如果有。
1,/Alex/{sed-commands} # 对第1行到匹配Alex的行操作
/oldboy/,+2{sed-commands} # 对匹配oldboy的行到其后的2行操作
### 正则
#去除空行
sed '/^$/d'
# 文件末尾添加新行
sed -i '$a 数据' 文件名
# 指定行后面追加新行(在第4行后面追加)
sed '4 a 哈工大' data.txt
# 指定匹配模式后追加数据(在包含 小王 的行后面追加 哈工大)
sed '/小王/a 哈工大' data.txt
# 替换12行的匹配值
sed '12s/小王/哈工大/g' data.txt
# 替换前缀为 小王 的任意匹配值
sed 's/小王*/哈工大/g' data.txt
备份压缩
tar:打包/解包文件
- tar 命令可以为 linux 的文件和目录创建档案。
利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。
- tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。
利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
语法格式:
tar [参数] [文件或目录]
# 常用参数:
-A 新增文件到以存在的备份文件
-B 设置区块大小
-c 建立新的备份文件
-C <目录> 切换工作目录,先进入指定目录再执行压缩/解压缩操作,可用于仅压缩特定目录里的内容或解压缩到特定目录
-d 记录文件的差别
-x 从归档文件中提取文件
-t 列出备份文件的内容
-z 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz
-Z 通过compress指令处理备份文件
-f<备份文件> 指定备份文件
-v 显示指令执行过程
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-j 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2
-v 显示操作过程
-l 文件系统边界设置
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-w 确认压缩文件的正确性
-p 保留原来的文件权限与属性
-P 使用文件名的绝对路径,不移除文件名称前的“/”号
-N <日期格式> 只将较指定日期更新的文件保存到备份文件里
-- -exclude=<范本样式> 排除符合范本样式的文件
-- -remove-files 归档/压缩之后删除源文件
参考实例:
# 将所有.jpg的文件打成一个名为file.tar的包:
tar -cvf file.tar *.jpg
# 打包文件之后删除源文件:
tar -cvf file.tar file --remove-files
# .tar解包到当前目录
tar -xvf file.tar
# .tar解包到指定目录
tar -xvf file.tar -C /usr/temp/
# 打包文件以后,以 gzip 压缩:
tar -zcvf log.tar.gz file.log
# 解包文件以后,以 gzip 解压缩:
tar -zxvf file.tar.gz
zip:压缩文件
zip 程序将一个或多个压缩文件与有关文件的信息(名称、路径、日期、上次修改的时间、保护和检查信息以验证文件完整性)一起放入一个压缩存档中。可以使用一个命令将整个目录结构打包到 zip 存档中。
语法格式:
zip [参数] [文件名.zip] [文件/目录]
# 常用参数:
-r 递归处理,将指定目录下的所有文件和子目录一并处理
-d 删除压缩包里的条目
-q 不显示指令执行过程
-z 替压缩文件加上注释
-v 显示指令执行过程或显示版本信息
-n<字尾字符串> 不压缩具有特定字尾字符串的文件
参考实例:
# 将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:
zip -r html.zip /home/html
# 把abc文件夹和123.txt压缩成为abc123.zip:
zip -r abc123.zip abc 123.txt
# 压缩文件 cp.zip 中删除文件 a.txt:
zip -dv cp.zip a.txt
unzip:解压缩zip文件
- unzip 命令是用于 .zip 格式文件的解压缩工具
unzip 命令将列出、测试或从 zip 格式存档中提取文件,这些文件通常位于 MS-DOS 系统上。
- 默认行为(就是没有选项)是从指定的 ZIP 存档中提取所有的文件到当前目录(及其下面的子目录)。
语法格式:
unzip [参数] [文件]
# 常用参数:
-d 解压到的目录
-o:不必先询问用户,unzip执行后覆盖原有的文件
-l 不解压,显示压缩文件内所包含的文件的简单信息
-v 不解压,显示压缩文件内所包含的文件的详细信息
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换
-n 解压缩时不要覆盖原有的文件
-j 不处理压缩文件中原有的目录路径
-t 验证压缩包是否完整
参考实例:
# 把wwwroot.zip直接解压到当前目录里面:
unzip wwwroot.zip
# 把mydata.zip解压到mydatabak目录里面:
unzip mydata.zip -d mydatabak
# 把abc12.zip、abc23.zip、abc34.zip同时解压到当前目录里面:
unzip abc\*.zip
# 查看wwwroot.zip里面的内容:
unzip -v wwwroot.zip
# 验证/home目录下面的wwwroot.zip是否完整:
unzip -t wwwroot.zip
tar:归档/还原tar包
语法格式:
tar [参数] [文件/目录]
# 常用参数:
-c, --create # 创建新的归档文件
-x, --extract # 解压缩已归档的指定(或所有)文件
-z, --gzip # 调用gzip对tar归档文件进一步压缩成tar.gz格式,或者对tar.gz格式完成解压缩
-v, --verbose # 生成详细输出
-f, --file # 指定归档文件名
-r # 向归档文件末尾追加文件
-C # 改变目录
参考实例:
## .tar:打包文件
tar -cvf file.tar file # .tar打包命令
tar -xvf file.tar # .tar解包命令
## .tar.gz:打包压缩文件
# .tar.gz打包命令
tar -zcvf file.tar.gz file
# .tar.gz解包命令(掌握)
tar -zxvf file.tar.gz # 解压缩到当前目录下
tar -zxvf file.tar.gz -C /usr/temp/ # 解压缩到指定目录下
dump:备份文件系统
dump 命令用于备份文件系统
dump 为备份工具程序,可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
语法格式:
dump [参数]
# 常用参数:
-0123456789 备份的层级
-b 指定区块的大小,单位为KB
-B 指定备份卷册的区块数目
-c 修改备份磁带预设的密度与容量
-d 设置磁带的密度。单位为BPI
-f 指定备份设备
-h 当备份层级等于或大于指定的层级时,将不备份用户标示为”nodump”的文件
-n 当备份工作需要管理员介入时,向所有”operator”群组中的使用者发出通
-s 备份磁带的长度,单位为英尺
-T 指定开始备份的时间与日期
-u 备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等
-w 与-W类似,但仅显示需要备份的文件
-W 显示需要备份的文件及其最后一次备份的层级,时间与日期
参考实例:
# 备份文件到/home目录:
dump -0 -u /dev/tape /home/
# 备份文件系统/boot到 SCSI 磁带设备:
dump -0f /dev/nst0 /boot
mysqldump:MySQL 数据库备份
mysqldump 命令是 MySQL 数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。
语法格式:
mysqldump [选项] 数据库名 [表名] > 脚本名
mysqldump [选项] --数据库名 [选项 表名] > 脚本名
mysqldump [选项] --all-databases [选项] > 脚本名
# 常用参数:
-h, --host 服务器IP地址
-P. --port 服务器端口号
-u, --user MySQL 用户名
-p, --pasword MySQL 密码
--databases 指定要备份的数据库
--all-databases 备份mysql服务器上的所有数据库
--compact 压缩模式,产生更少的输出
--comments 添加注释信息
--complete-insert 输出完成的插入语句
--lock-tables 备份前,锁定所有数据库表
--no-create-db/--no-create-info 禁止生成创建数据库语句
--force 当出现错误时仍然继续备份操作
--default-character-set 指定默认字符集
--add-locks 备份数据库表时锁定数据库表
--ignore-table 备份数据时库排除某表
参考实例:
# 导出整个数据库:
mysqldump -u linuxcool -p smgp_apps_linuxcool > linuxcool.sql
# 导出指定的数据库:
mysqldump -u linuxcool -p smgp_apps_linuxcool users > linuxcool_users.sql
# 备份指定数据库指定表(多个表以空格间隔)
mysqldump -uroot -p mysql db event > /backup/mysqldump/2table.sql
# 导出一个数据库结构:
mysqldump -u linuxcool -p -d --add-drop-table smgp_apps_linuxcool > linuxcool_db.sql
# 备份指定数据库排除某些表
mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.sql
备份还原命令:
mysqladmin -uroot -p create db_name
mysql -u root -p password db_name < /backup/mysqldump/db_name.db
# 注:在导入备份数据库前,db_name如果没有,是需要创建的; 而且与db_name.db中数据库名是一样的才可以导入。
k8s部署 定时备份mysql数据库及还原命令:
# 创建定时任务
crontab -e
# 定时任务(每天0点执行):
0 0 * * * /usr/local/bin/kubectl exec `/usr/local/bin/kubectl get po | grep mysql | awk '{print $1}'` -- mysqldump -u user -p password db_name > /root/mysql-bak/`date + \%d`.sql 2>&1
# 注:2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了~.sql。那么标准错误也会输出到~.sql文件里
# 还原命令:
/usr/local/bin/kubectl exec `/usr/local/bin/kubectl get po | grep mysql | awk '{print $1}'` -- mysql -u user -p password db_name < /root/mysql-bak/`date + \%d`.sql