商城网站具体需求,怎么做网络运营,与wordpress类似的都有哪些,黑龙江省机场建设集团官网网站Linux 常用快捷键
Tab 命令或路径等的补全键#xff0c;特别常用的快捷键Ctrl insert 复制命令行内容#xff08;常用可提高效率#xff09;Shift insert 粘贴命令行内容#xff08;常用可提高效率#xff09;Ctrl C 中断当前任务#xff08;退出#xff09;Ctrl Z…Linux 常用快捷键
Tab 命令或路径等的补全键特别常用的快捷键Ctrl insert 复制命令行内容常用可提高效率Shift insert 粘贴命令行内容常用可提高效率Ctrl C 中断当前任务退出Ctrl Z 暂停当前任务Ctrl I 清除屏幕所有的内容Ctrl A 光标迅速回到行首Ctrl E 光标迅速回到行尾Ctrl F 光标向右移动一个字符Ctrl B 光标向左移动一个字符Ctrl K 剪切删除光标处到行尾的所有字符Ctrl U 剪切删除光标处到行首的所有字符Ctrl W 剪切删除光标前的一个字符Ctrl Y 粘贴 Ctrl K、Ctrl U、Ctrl W 删除的字符Ctrl H 删除光标前的一个字符相当于退格键Ctrl D 退出当前shell命令行如果是切换过来的用户则执行这个命令回退到原用户相当于exitCtrl R 搜索命令行使用过的历史命令记录 history命令可以查看历史命令Ctrl G 从 Ctrl R 的搜索历史命令模式中退出Ctrl S 锁定终端使任何人无法输入Ctrl Q 解锁 Ctrl S 的锁定状态↑、↓ 切换之前输入的历史命令
Linux 常用命令
帮助命令 man、help、info
在 Linux 的操作系统中我们基本都是使用命令的方式来操作的比如我们前面看到的 ls、cd、vi 等都是命令各个命令都是有自己的用法的我们不可能全部记住每一个命令的用法的所以每次碰到新的命令的时候我们可以借助 Linux 提供的帮助命令来查看这个命令的用法。
Linux 提供了三种帮助命令
manhelpinfo
对于不了解的命令我们也可以通过网络搜索去学习其用法。接下来我们分别介绍下上面三种帮助命令。
man
man 是 manual 的缩写可以帮助我们查找一个命令的用法。比如
man lsman 本来就是一个命令上面的命令的意思是查看 ls 这个命令的用法。
man 也是一个命令我们想知道这个命令的用法可以通过下面的命令来获取 man 这个命令的帮助
man manman 一共分为 9 章为什么要分为 9 章呢这个主要是解决命令重名的问题比如系统中有两个 passwd一个是命令一个是 /etc/passwd 配置文件那么我们可以通过下面的命令分别查询 passwd 的用法
## 查询命令的 passwd 的用法帮助
man 1 passwd## 查询配置文件的 passwd 的帮助
man 5 passwdman 默认的情况下是查询第 1 章的帮助。
如果我们不知道一个字符串是命令还是配置文件我们可以这样来查看它的帮助文档
man -a passwd这样我们就能查询出所有的 passwd 的帮助文档。
help
Linux 中有两种命令
shell (命令解释器) 自带的命令称为内部命令其他的是外部命令
内部命令通过 man 是获取不到帮助的比如 cd 这个命令这个时候我们可以尝试使用 help 命令来获取帮助。
如果是内部命令的话我们可以这样使用 help 帮助
ls --help我们可以使用 type 命令来查看一个命令是内部命令还是外部命令
type cd输出
cd is a shell builtin说明 cd 这个命令是内部命令。
type ls输出
ls is aliased to ls --colorauto这里 ls 是一个别名所以这里没有直接说 ls 是一个外部命令但是 ls 确实是一个外部命令。
info
info 帮助比 help 帮助更详细作为 help 帮助的补充如下
info ls文件目录查看命令 ls 和 cd
ls 命令
ls 查看当前目录下的文件ls 后面可以跟文件或者文件目录名称比如
ls / # 查看根目录下有多少文件
ls /root # 查看 /root 目录下有多少文件我们通过 man 中查看到 ls 的用法如下
ls [OPTION]... [FILE]...我们看到 FILE 后面带有 ... 表示 ls 后面可以跟多个文件或者文件目录
ls /root / # 同时输出 / 目录和 /root 目录下的文件信息通过 man ls 可以知道ls语法是 ls [选项, 选项…] [文件或者目录…]
这里的选项参数主要有
-a 显示所有文件及目录 (. 开头的隐藏文件也会列出)-d 只列出目录不递归列出目录内的文件-l 以长格式显示文件和目录信息包括权限、所有者、大小、创建时间等-r 倒序显示文件和目录-t 将按照修改时间排序最新的文件在最前面-A 同 -a 但不列出 “.” (目前目录) 及 “…” (父目录)-h 列出文件大小 (例如 1K 234M 2G)-F 在列出的文件名称后加一符号例如可执行档则加 “*”, 目录则加 “/”-R 递归显示目录中的所有文件和子目录
我们没必要记住所有的选项的含义只需要记住几个常见的选项即可。 ls -l表示长格式显示 ls 出来的结果 如果 ls -l 命令后面没有跟文件名那么默认的就是显示当前的文件目录中的文件实际上和 ls -l . 命令是相等的其中 . 表示当前的文件目录为了简洁我们可以将 . 省略掉。 ls -a全称 ls -all查看所有文件包括当前文件目录中的隐藏文件和隐藏文件目录。 在 Linux 中在文件名或者文件目录前面加上 . 表示是隐藏的文件或者文件目录。 隐藏文件的作用是防止用户在日常操作中不会误操作到隐藏文件隐藏文件在系统启动以及日常用户操作当中都起着特殊的管理功能。 ls -r表示以逆向的顺序进行排序显示 一般单独使用的话和 ls 没啥区别需要配合 ls -l使用如ls -l -r 默认情况下是按照文件名称进行逆序排列的如果想按照时间进行逆序排序的话我们可以ls -l -r -t /etc/sysconfig 也可以简化为ls -lrt /etc/sysconfig ls -R表示递归显示文件夹中的文件。 注意在 Linux 中的命令的选项是区分大小写的所以 ls -R 和 ls -r 的功能是不一样的。 我们可以将 -R 选项和前面的选项进行组合ls -lartR /etc/sysconfig 该命令的作用就是列出 /etc/sysconfig 目录中的所有的文件以及子文件夹中的子文件 ls -lh以长格式的形式查看当前目录下所有可见文件的详细属性并且显示此时文件大小。
cd 命令
cd 更改当前的操作目录如 cd /root表示进入 /root 目录下cd ..回到上一级目录cd - 用于两个目录相互切换哪来的就回到哪儿cd /path/to/... 绝对路径cd ./path/to/... 相对路径cd ../path/to/... 相对路径
pwd 命令
pwd 显示当前的工作目录名称如果不知道 pwd 的用法的话可以使用 man pwd 来查看。
创建和删除目录命令 mkdir 和 rm
mkdir 命令
作用是创建一个空的文件目录功能和 windows 中的新建文件夹是一样的。
mkdir /a # 在根目录下创建一个名字为 a 的文件目录
mkdir ./a # 在当前目录下创建一个名字为 a 的文件目录
mkdir a # 同上可以省略 ./
mkdir b c d # 在当前目录下创建多个文件如果目录已经存在的话则创建不了文件目录
mkdir /a/b/c # 创建多级目录如果在不存在的文件目录中则创建不了子目录rm 命令
rm -r /a # 删除非空目录a无法递归删除需要逐级确认
rm -rf /a # 删除非空目录a递归删除不需要确认慎用删除之前一定要三思而后行
rmdir /a # 只能删除空目录复制和移动文件命令 cp 和 mv
cp 命令
copy 的缩写用于文件的复制
cp /root/a /tmp
cp -r /root/a /tmp # cp 是用来复制文件的默认情况下复制目录会报错需要加上 -r 参数来复制目录
ls /tmptouch /filea # 先创建一个文件
cp /filea /tmp # 复制文件
ls /tmpcp -v /filea /tmp # 显示复制时候的进度默认情况下复制后的文件的时间和原先文件的时间不一致如果我们想保持时间一样的话可以
cp -p /filea /tmpmv 命令
move 的缩写有两个功能
文件移动功能文件重命名
mv /filea.txt /fileb.txt ## 重命名
mv /fileb.txt /tmp ## 文件移动
ls /tmpmv /tmp/fileb.txt /filec.txt ### 文件移动加重命名## 移动目录
mkdir /dirc
mv /dirc /tmp通配符
* 表示匹配多个字符? 表示匹配单个字符
cd /tmp
touch filea fileb filecmkdir -p dira dirb dirc## 复制以 file 开头的文件
cp -v file* /touch fileaa fileabc
cp -v file* /touch fileaa fileabc filea fileb filec## 显示以 file 开头的文件
ls file*## 匹配单个字符
cp file? /ls file?文件内容查看命令 cat、head、tail、more、less
cat 文本内容显示到终端用于文本中行数较少的场景head 查看文件开头tail 查看文件结尾常用参数 -f 表示文件内容更新后显示信息同步更新wc 统计文本的行数more 和 less 命令用于翻页和搜索
cat 命令
## 我们先创建一个名为 test 的空文件
touch test### 查看文本
cat test### 往文件 test 中追加内容
echo this is an example testcat test## 再次执行往 test 中追加内容
echo this is another example test## 再次 cat 查看文件内容发现之前的数据被覆盖了
cat test## 如果在往文件中写内容的时候不覆盖原先的内容的话可以这样
echo this is an example test
echo this is another example testcat testecho 就和 Java 中的 System.out.println() 功能差不多 我们继续往文件中不断的追加内容
echo this is another example 1 test
echo this is another example 2 test
echo this is another example 3 test
echo this is another example 4 test
echo this is another example 5 test
echo this is another example 6 test
echo this is another example 7 test
echo this is another example 8 test
echo this is another example 9 test
echo this is another example 10 test
echo this is another example 11 test
echo this is another example 12 test
echo this is another example 13 test
echo this is another example 14 test
echo this is another example 15 test
echo this is another example 16 test
echo this is another example 17 test
echo this is another example 18 test
echo this is another example 19 test
echo this is another example 20 testcat testhead 和 tail 命令
head 命令用于查看文件内容的前面内容
## 默认的话是查看文件的前 10 行
head test## 如果想指定查看前 3 行的话可以
head -n3 test## 可以直接简写成
head -3 testtail 命令用于查看文件的后面的内容
## 默认的话是查看文件的后 10 行
tail test## 如果想指定查看后 3 行的话可以
tail -n3 test## 可以直接简写成
tail -3 test## 我们可以查看动态的文件内容即当文件增加内容的时候就实时的打印出来使用 -f 选项
tail -f test## 这个时候我们向 test 文件中追加内容
echo this is another example 21 test
echo this is another example 22 test
echo this is another example 23 test## 上面的 tail -f 会实时的打印数据出来
## tail -f 默认是一开始查询后面的 10 行数据如果想一开始查询文件的后面的 15 行数据的话可以
tail -fn15 testtail -fn 文件名一般用来实时查看日志文件 wc 命令
上面我们可以看出如果文件的行数不多的话可以使用 cat 命令来查看文件内容如果文件行数太多的话我们可以选择使用 head 和 tail 了。
那么怎么知道一个文件的行数到底有多少呢我们可以通过 wc 这个命令来查询一个文件的行数
## 查看文件 test 的行数
wc -l testwc -l /etc/man_db.confmore 和 less 命令
more 和 less 也是用于查看文件只是这两个命令在查看文件内容的时候是允许翻页的。
more 一页一页的显示文件内容
more /etc/man_db.conf## 向下翻一页空白键(space)
## 向下翻一行回车键(Enter)
## 向上翻一页字母键(b)
## 向下搜索指定的字符串/字符串比如 /path 表示向下搜索 path
## 退出 more 命令字母键(q)less 一页一页的显示文件内容搜索的时候比 more 更加灵活
less /etc/man_db.conf## 向下翻一页空白键(space) 或者 [PgDn] 键
## 向下翻一行回车键(Enter)
## 向上翻一页[PgUp] 键
## 向下搜索指定的字符串/字符串比如 /path 表示向下搜索 path
## 向上搜索指定的字符串?字符串比如 ?path 表示向上搜索 path
## 重复前一个搜索字母键 n
## 反向重复前一个搜索字母键 N
## 翻到文件的第一页 字母键 g
## 翻到文件的最后一页字母键 G
## 退出 less 命令 字母键 q打包压缩和解压缩命令
打包 tar
在 Linux 中对文件进行备份的时候一般先使用 tar 命令进行打包比如我们接下来对 /etc 目录进行打包
## /etc 下的文件是系统中常用的配置文件是我们常见的备份目录
ls /etc## 打包 /etc 成一个文件
## 选项 c 是表示执行打包操作
## 选项 f 是表示打包成一个文件
tar cf /tmp/etc-backup.tar /etc## 查看打包后的文件的大小
ls -l /tmp/etc-backup.tar## 文件大小以 MB、GB 等显示
ls -lh /tmp/etc-backup.tar一般的情况下打完包之后会进行压缩将文件的内容压缩下使得占用磁盘空间变少。
Linux 中压缩一般使用 gzip 和 bzip2 来进行压缩但是 tar 命令已经集成了这两种压缩方式如下
## 使用 gzip 压缩打包后的文件在 tar 命令中增加 z 选项
## 压缩后的文件名一般使用 .gz 来表明这个文件是使用 gzip 来压缩的
tar czf /tmp/etc-backup.tar.gz /etc## 使用 bzip2 压缩打包后的文件在 tar 命令中增加 j 选项
## 压缩后的文件名一般使用 .bz2 来表明这个文件是使用 bzip 来压缩的
tar cjf /tmp/etc-backup.tar.bz2 /etc## 执行上面的命令会报错
## 这个是因为我们安装的最小化的 centos 7 默认没有安装 bzip2
## 可以通过下面的命令来安装下 bzip2
yum -y install bzip2## 然后就可以使用 bzip2 来压缩
tar cjf /tmp/etc-backup.tar.bz2 /etc## 但是我们发现使用 bzip2 压缩需要的时间比 gzip 的要慢一些
## 这个是因为 bzip2 压缩的程度比 gzip 要大
## 我们可以看下压缩后的文件的大小
ls -lh /tmp/etc-backup.tar*## 可以发现使用 bzip2 压缩的文件的大小最小也就是压缩的程度最大了
## 选择使用 bzip2 压缩还是使用 gzip 压缩这个取决于你的需求了
## 如果你想要压缩速度的话那么选择使用 gzip
## 如果你想要大的压缩比的话那么选择使用 bzip2 .tar.gz 有的时候会缩写成 .tgz .tar.bz2 有的时候会缩写成 .tbz2 解压缩
如果我们拿到一个打包并且压缩后的文件我们想解压缩的话我们仍然可以使用 tar 命令了。
## 解包
## x 表示执行的是解包
## f 表示的是解包文件
## -C 表示将解包后的文件放在指定的文件目录下如果不加 -C 选项的话则表示将解包之后的文件放在当前的目录中
tar xf /tmp/etc-backup.tar -C /root## 如果我们想对压缩后的文件进行解压缩可以使用
## gzip 压缩的使用
tar zxf /tmp/etc-backup.tar.gz -C /root## bzip2 压缩的使用
tar jxf /tmp/etc-backup.tar.bz2 -C /rootvi 的四种模式
我们知道 windows 可以对文本文件内容进行编辑、删除、复制、粘贴等Linux 中的 vi 命令也提供了强大的文本编辑功能我们可以使用 vi 对 Linux 上的文件内容进行编辑、删除、复制、粘贴等。
为了使得文本编辑的功能变的很强大vi 支持了 4 种模式
正常模式Normal Mode插入模式Insert Mode命令模式Command Mode可视模式Visual Mode
每种模式下都可以完成不同的文件操作功能。我们在 Linux 中输入 vi 得到如下的界面 从上可以看出 vim 是 vi 命令的扩展在 vi 的基础之上做了很多的扩展。
以上进入的界面就是以正常模式。我们在正常模式中输入小写的字母 i 就可以进入插入模式如下 在插入模式按 ESC 键就可以转换到正常模式在正常模式下面输出冒号(:) 就可以进入命令模式如下
在命令模式中按 ESC 就可以进行正常模式在正常模式下输出字母 v 就可以进入可视模式如下 vi 的正常模式
打开 vim 编辑器
## 可以直接执行 vi 打开 vi 编辑器
vi## 也可以在 vi 后面加上需要编辑的文件
vi test当我们通过上面的命令是进入到 vi 的正常模式我们可以使用下面的方式进入到插入模式
输入字母 i 表示在光标当前的位置进入到插入模式输入字母 I 表示进入插入模式只是光标定位到了所在行的开头输入字母 a 表示进入插入模式只是光标定位到之前光标所在位置下一个位置输入字母 A 表示进入插入模式只是光标定位到所在行的结尾输入字母 o 表示进入插入模式只是光标定位到所在行的下一行输入字母 O 表示进入插入模式只是光标定位到所在行的上一行
在正常模式下的操作
控制光标的上下左右 H 表示向左 L 表示向右 J 表示向下 K 表示向上 键盘中的上下左右键也可以控制光标但是有的时候不能所以建议还是熟练使用 HJKL 来控制光标复制 (y 命令) yy 表示复制一行 p 表示粘贴多次输入 p 则是多次粘贴 3 yy 表示复制 3 行 y$ 表示复制光标开始到结尾的内容剪切 (d 命令) dd 表示剪切一行 (也可以用于删除一行) d$ 表示剪切光标开始到结尾的内容撤销命令 输入字母 u重做命令 输入 ctrl r单个字符删除的命令输入字母 x替换字符的命令输入字母 r切入到命令模式然后输入 set nu就会显示文本内容中的行号我们可以通过 数字G 快速使得光标跳到指定的行快速使光标移动到第一行输入字母 g快速使光标移动到最后一行输入字母 G快速使光标移动到当前行的开头输入字母快速使光标移动到当前行的结尾输入字母 $
vi 的命令模式
在插入模式中对文件做了修改后我们想对文件进行保存的话我们需要输入 ESC 键进入正常模式然后输入 : 进入命令模式然后我们在 : 的后面输入
## w 表示保存的意思
w /root/a.txt## 保存当前文件并退出可以输入
wq## 使用 vi 打开指定文件
vi /root/a.txt## 保存退出
:wq ## 不保存但是退出
:q!在命令模式下还可以执行其他的命令比如我们在命令模式下想执行查看 ip 的命令我们可以在 : 后面输出!ifconfig
命令行模式还可以查找和替换
查找 在正常模式中输出 / 进入搜索界面在 / 后面输入需要查找的字符串 输入字母 n 将光标定位到下一个查找到的字符串字母 N 将光标定位到上一个替换 语法 :s/old/new 比如将小写的 x 替换成大写的 X :s/x/X。:s只是针对光标所在的行进行替换 语法 :%s/old/new这个是对全文进行替换这里默认只会替换一次 替换多次的话可以 :%s/x/X/g :3,5s/x/X 表示在第 3 行到第 5 行之间进行单词替换对 vi 设置 设置行号set nu 取消行号set nonu
vi 的可视模式
从正常模式进入到可视模式的三种方式
输入小写的 v 这个叫做字符可视模式光标是以字符为单位移动的输入大写的 V 这个叫做行可视模式光标是以行为单位移动的移动光标的时候是对行进行选定输入 ctr l v 的时候这个叫做块可视模式这个是用的最多的模式当光标移动的时候是选中块的我们现在可以 1在选定的块之前插入内容可以输入大写的 I来插入内容然后按两下 ESC 即可 2删除选定的块先选定块然后按字母 d 就可以删除块
命令别名和历史命令
别名
在 cmd 中我们可以使用 cls 命令来清屏而在 linux 中则使用 clear 来清屏我们发现 clear 比 cls 更长书写起来没有 cls 方便那么我们可以在 linux 中使用 cls 来作为清屏的命令吗答案是可以的可以使用 alias 命令将 clear 命令别名为 cls 即可如下
alias clsclear## 使用 cls 来进行清屏
cls我们可以通过下面的命令来查看所有的别名
alias## 输出所有的别名
alias clsclear
alias cpcp -i
alias egrepegrep --colorauto
alias fgrepfgrep --colorauto
alias grepgrep --colorauto
alias l.ls -d .* --colorauto
alias llls -l --colorauto
alias lsls --colorauto
alias mvmv -i
alias rmrm -i
alias whichalias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde以上输出包括我们自己定义的别名和系统事先定义好的别名有几个别名我们需要来看下
ls 是 ls --colorauto 的别名可以通过 man 来查看 --color 有多少个取值ll 是 ls -l --colorauto 的别名
如果我们想删除别名的话使用 unalias
## 删除 cls 别名
unalias cls## 查询所有的命令
alias历史命令
我们可以使用命令 history 来查询我们曾经执行过的命令。
## 1. 列出所有的历史命令
history## 2. 列出目前最近的 3 条历史命令
history 3## 在默认的情况下在服务器注销的时候会将历史记录写入 ~/.bash_history 文件中
## 我们也可以强制将历史命令写到文件中
history -w## 默认的话是保留 1000 条历史命令的。我们除了可以查询历史命令外还可以执行历史命令如下
## 执行第 784 个历史命令
!784## 执行最近的以 ls 开头的历史命令
!ls## 执行上一个命令
!!用户管理常用命令
Linux 是一个多用户多任务的系统多而用户可以同时登录到同一个 Linux 服务器中并且同时操作系统。
那么在 Linux 中有两种用户
root 用户这个用户就是上帝拥有一切权限可以访问系统的任何地方普通用户除了 root 用户之外的所有用户普通用户的权限是受限的
在实际的应用当中我们一般不建议使用 root 用户登录服务器因为它的权限太大了可以删除任何东西这样太危险了如果不小心删除了什么东西的话那就会导致系统瘫痪了。
在平时工作中我们都是以普通用户登录到 Linux 服务器的在系统刚刚安装的时候是没有普通用户的那么可以通过 useradd 命令来创建一个普通用户
useradd user1那么当我们执行了创建用户的操作之后系统都做了哪些操作呢
系统为每一个用户分配了一个唯一的 id
## root 用户的 id 是 0
id rootid user1id abc创建了这个用户的家目录(或者说主目录)比如 root 用户的主目录是 /rootuser1 用户的家目录是 /home/user1这个文件目录默认是空的但是存在隐藏文件这些隐藏文件就是这个用户的相关配置文件创建的这个用户的信息还会记录到 /etc/passwd 这个配置文件中可以通过 tail -10 /etc/passwd 来查看创建的这个用户的信息还会记录到 /etc/shadow 这个配置文件中可以通过 tail -10 /etc/shadow 来查看这个配置文件是用户的密码配置 注意只有 root 用户才可以创建普通用户 接下来我们需要为创建好的用户设置密码可以使用 passwd 命令
passwd user1## 直接修改当前 root 用户的密码可以
passwd这个时候我们可以通过客户端 xshell 去连接这个 user1 用户了。
有些情况下下我们需要给用户分组相同组的用户可以享受相同的权限、配置等。
我们使用 id user1 可以看出来默认情况下在创建用户的时候也会创建一个名为用户名的组那么创建的这个用户就是属于这个用户组的。
我们也可以自己使用命令 groupadd 来创建一个新的用户组
groupadd group1然后通过 usermod 命令来修改用户 user1 属于 group1 这个组
usermod -g group1 user1id user1
## 可以看出用户 user1 所属的组就被改成 group1 了我们也可以在创建用户的时候直接指定这个用户所属的组
useradd -g group1 user2id user2我们可以通过 userdel 的命令删除一个用户
## 通过下面的命令删除 user1 用户但是 user1 的家目录还是保留着
userdel user1ls /home## 如果我们想删除用户的时候也将这个用户的家目录删除的话需要
userdel -r user2ls /home我们可以通过 groupdel 命令删除一个用户组
groupdel group1su 命令
可以直接从 root 用户切换到其他的普通用户下面如下
## 先建一个名为 bigdata 的用户并设置密码
useradd bigdata
passwd## 从 root 用户直接切换到 bigdata 用户下
su - bigdata
## 切换到 bigdata 用户并且进入到了 bigdata 的家目录
pwd## 这个时候访问 root 的家目录是没有权限的如下
cd /root## 如果 su 后面不跟 - 的话那么就不会进入到 bigdata 的家目录
su bigdatapwd## 这个时候直接访问当前的目录是没有权限的
ls## 需要切换目录才能来到自己的家目录
cd /home/bigdata## 没有带 - 不是很方便一般的话都会使用 su - 来切换用户sudo 命令
在 Linux 中有一个名为 shutdown 的命令是用来关机的这个命令只有 root 用户可以执行默认情况下其他的用户是执行不了的。比如我们在 root 用户下执行
## 命令系统 30 分钟后执行关机
shutdown -h 30## 我们也可以通过下面的命令取消上面的关机计划
shutdown -c当然上面的两条命令默认都是只能在 root 账号下执行的假设我们现在想在 bigdata 用户下执行 shutdown -c 命令的话我们该怎么办呢其实呢有两种方案
我们在 bigdata 用户下使用 su 来切换到 root 用户然后执行命令这种方案有一个缺点普通用户知道了 root 的密码这个是非常危险的所以我们在实际的生产环境中是不建议这么做的使用 sudo 命令来执行接下来我们详细讲解怎么使用 sudo 命令
我们要完成上面的需求只需要让 root 用户将执行 shutdown -c 这条命令的权限给 bigdata 用户即可我们可以在 root 用户下执行
## 设置执行指定命令的权限给指定的用户或者用户组
visudo ## 在最后加上配置
bigdata ALL/sbin/shutdown -c然后我们重新进入 bigdata 用户执行
sudo /sbin/shutdown -c 就完成了上面的需求了。
有的时候在练习的时候我们一般喜欢把一个普通用户的权限设置的和 root 权限一样因为这样很方便可以在 visudo 中添加
## 使用 sudo 的时候不需要输入密码
## 这样 bigdata 的权限和 root 的一样
## 只是执行的时候需要使用 sodu 来执行
bigdata ALL(ALL) NOPASSWD: ALL用户(组)配置文件
和用户(组)相关的配置文件有 3 个
/etc/passwd 用户相关的配置文件/etc/shadow 用户密码相关的配置文件/etc/group 用户组相关的配置文件
1. /etc/passwd
执行如下的命令
vi /etc/passwd输出如下 这个配置文件的每一行表示一个用户每个用户有 7 个字段意义分别如下
用户名x 表示登录的时候需要进行密码验证每过不写的话则表示不需要密码验证用户的唯一 idLinux 系统中是通过这个 id 来识别用户的用户所属组的唯一 id表示对用户的注释用户的家目录用户登录的命令解释器就是用户登录成功后用来解释用户输入的命令现在通用的命令解释器就是 /bin/bash/sbin/nologin 则表示禁止这个用户登录
2. /etc/shadow
执行如下的命令
cat /etc/shadow输出如下 这个文件主要是存储用户设置的密码的密码都是经过了加密的并且相同的密码经过加密后也是不一样的。
我们主要是掌握如下两个字段
用户名用户密码
3. /etc/group
这个文件主要是存储用户组的配置信息的执行如下的命令
vi /etc/group输出如下
字段的含义
用户组的名字登录的时候是否需要验证密码用户组 id 即 gid属于这个组的用户这个组是这个用户的其他组 id postfix
更改文件的属主和属组
在 Linux 中不管是文件还是文件目录都有自己所属的用户和自己所属的用户组如下 以上
1 就是文件所属的用户我们也称为属主2 就是文件所属的用户组我们也称为属组
我们可以通过命令 chown 来修改属主和属组如下
## 修改文件目录的属主为 bigdata
chown bigdata /root/test ## 修改文件目录的属组为 bigdata
chown :bigdata /root/test## 现在新增一个用户组
groupadd group1## 修改文件目录的属组为 group1
chgrp group1 /root/test文件和目录的权限
在 Linux 中的文件和文件目录都有自己的权限控制 下面详细介绍 第一个字符表示文件的类型
- 表示普通文件d 表示文件目录b 表示块特殊文件c 表示字符特殊文件l 表示符号链接和 windows 中的快捷方式类似f 表示命名管道s 表示套接字文件
后面 9 个字符表示的是对应文件的权限文件权限的表示和文件类型有关我们分别来了解下普通文件和文件目录权限的表达。
我们先创建 2 个用户组
groupadd group1
groupadd group2然后再创建 3 个用户并指定所属的用户组
useradd -g group1 user1
useradd -g group1 user2
useradd -g group2 user3普通文件的权限表达
r 表示可读权限w 表示可写权限x 表示可执行权限
也可以使用数字来表达上面的权限
r 4w 2x 1
我们先来看下权限的修改可以使用 chmod 命令来修改文件的权限
touch testfile
ls -l testfile## 默认的权限是 rw-r--r--表示属主对这个文件具有可读可写权限属组对这个文件具有可读权限其他用户对这个文件具有可读权限
## 需求一修改属主的权限为 rwx
chmod ux testfile
ls -l testfile## 需求二修改属主的权限为 -wx
chmod u-r testfile
ls -l testfile## 需求三修改属主权限为 ---
chmod u-wx testfile
ls -l testfile## 需求四修改属主权限为 rw- 权限
chmod urw testfile
ls -l testfile## 需求五修改属主权限为 x 权限
chmod ux testfile
ls -l testfile## 需求六修改属主权限为 rwx
chmod urwx testfile
ls -l testfile## 需求七修改属组权限为 rw-
chmod gw testfile
ls -l testfile## 需求八修改属组权限为 ---
chmod g-rw testfile
ls -l testfile## 需求九修改属组权限为 rwx
chmod grwx testfile
ls -l testfile## 需求十修改其他用户权限为 rw
chmod ow testfile
ls -l testfile## 需求十一修改其他用户权限为 ---
chmod o-rw testfile
ls -l testfile## 需求十二修改其他用户权限为 rwx
chmod orwx testfile
ls -l testfile## 需求十三修改属主的权限为 rw- 属组的权限为 r-x 其他用户的权限为 r--
chmod urw testfile
chmod grx testfile
chmod or testfile## 我们可以使用数字来表达
chmod 654 testfile## 需求十三修改属主的权限为 rwx 属组的权限为 --x 其他用户的权限为 r-x
chmod 715 testfile我们先在 root 用户下创建一个文件
touch /tmp/afilels -l /tmp/afile
## 创建的文件的默认的属主是 root属组也是 root而且还有默认的权限 rw-r--r--## 修改文件的属主为 user1属组为 group1
chown user1:group1 /tmp/aflie## 设置文件只能被属主查看
chmod 400 /tmp/afile
ls -l /tmp/afile## 在 root 用户下将数据写入到文件中
echo 123 /tmp/afilecat afile## 切换到 user1 用户
## 可以查看文件
cat /tmp/afile
## 但是不能写入文件下面的命令没有权限执行
echo 345 /tmp/afile## 相同属组的用户和其他用户都没有任何权限
exit
su - user2
cat /tmp/afileexit
su - user3
cat /tmp/afile## 测试文件的写权限
exit
chmod 200 /tmp/afile
ls -l /tmp/afilesu - user1
## 可写
echo 456 /tmp/afile
## 但是不能查看
cat /tmp/afile ## 相同属组的用户和其他用户都没有任何权限上面我们进行的属主的权限设置接下来看下属组的权限设置
exit
touch /tmp/bfile
ls -l /tmp/bfile## 修改属主和属组
chown user1:group1 /tmp/bfile
ls -l /tmp/bfile## 现在修改文件的权限为----w----即同一属组的用户具有可写权限
chmod 020 /tmp/bfile
ls -l /tmp/bfile## 进入到 user1
## 对文件没有写的权限因为这个文件的属主对这个文件没有任何的权限
echo 111 /tmp/bfile## 进入到属于 group1 组的 user2 用户可以写成功因为这个文件允许属于 group1 组的用户进行写文件
exit
su - user2
echo 111 /tmp/bfile## 进入到 user3 是不能写入文件的
exit
su - user3
echo 111 /tmp/bfile## 切换到 root 用户修改文件的其他用户的权限为 rw-
exit
chmod orw /tmp/bfile## 那么进入 user3 用户是可以写文件的文件目录的权限表达
x 表示可进入目录rx 表示可以进入到目录并且查看目录内的文件名wx 表示可以进入到目录并且修改目录的文件名
我们来看一下文件目录的权限控制
## 进入到 root 用户创建一个文件目录
mkdir /test
ls -ld /test## 修改目录的属主和属组
chown user1:group1 /test
ls -ld /test## 在 /test 目录下创建两个文件
touch /test/afile
touch /test/bfile
ls -l /test## 修改目录的权限为 r--------
chmod 400 /test
ls -ld /test## 进入到 user1然后尝试进入 /test 目录发现权限不够
su - user1
ls -l /test
## 只能看到这个目录中的文件名其他的信息都看不到
## cd 也进不去说没有权限
cd /test
exit## 说明对于目录r 权限并不是表示可读的权限如果我们需要能进入文件目录的权限需要将权限设置为 x 权限## 修改目录的权限为--x------
chmod ux /test
su - user1
## 可进入目录
cd /test
## 但是不能看出目录中的文件下面的命令会报错
ls
exit## 如果我们想能进入目录并且可以查看文件目录中的文件的话需要设置权限为 rx
chmod urx /test
su - user1
## 可进入目录
cd /test
## 可以查看这个目录下的文件
ls
## 但是却不能对文件进行修改下面的命令会报错
mv afile cfile
exit## 想要对目录中的文件进行修改的话需要设置权限 wx
chmod uwx /test
su - user1
## 可进入目录
cd /test
## 但是不能查看这个目录下的文件
ls
## 可以对文件进行修改
mv afile cfile
exit## 如果相对文件目录技能进入查看里面的文件并且进行修改的话需要将权限设置维 rwx
chmod urwx /test
su - user1
## 可进入目录
cd /test
## 能查看这个目录下的文件
ls
## 可以对文件进行修改
mv cfile afile
exit最后看一个和文件以及目录权限都相关的一个场景
## 将文件 /test/afile 的权限设置为 可读可写可执行
chmod 777 /test/afile
ls -l /test/afilesu - user2
## 不能对文件 /test/afile 进行修改下面的命令报权限不足的错
ls -l /test/afile## 这个是因为user2 对文件目录 /test 都没有进入的权限
## 修改 /test 的权限为 rwxr-x---
exit
chmod grx /testsu - user2
## 有查看权限
ls -l /test/afile
## 也可以修改文件了
echo 123 /test/afile
exitsu - user3
## 使用 vi 的时候提示没有权限只是一个可读的文件
vi /test/afile进程管理命令
ps 命令
进程就是正在运行的程序是资源分配的单位。
你如果想知道在 Linux 系统中有多少进程在运行的话我们可以通过如下的命令来查询
## ps 命令是 process status 的缩写表示进程的状态
ps输出如下 ps 命令用来查询当前终端有多少个进程在运行从上可以看出有 2 个进程在运行。
以上的输出中我们一般会关心第一个和第四个字段
PID 表示一个进程的唯一 ID用来唯一标识一个进程的所以说以后我们想查询具体某个进程的话就需要通过 PID 来查询了CMD 表示该进程运行的命令也就是进程的名字不同进程的 PID 一定是不同的但是名字可以是一样的
如果我们想查询这台服务器中所有的进程的话可以通过下面的命令查询
ps -e执行上面的命令就可以显示这台服务器上所有的进程了。
我们也可以使用 man ps 来查看 ps 更多的选项。那么我们经常用的选项除了 -e 外还有一个是 -ef如下
ps -ef输出如下 可以发现显示的进程的信息更加的丰富了我们对我们关心的字段做个说明
UID 表示启动该进程的用户PPID 表示该进程的父进程 ID在这里我们需要注意的是所有的进程都是有父进程的都需要从父进程中继承一些属性的 第一个进程是 0 号进程也成为 idle 进程它是所有进程的祖先后面的 1 号进程就是它启动的。系统的空闲时间其实就是指 idle 进程的运行时间 从上面可以看出每个进程都有自己的父进程当然 0 号进程除外所以进程实际上是以树状的结构组织起来的。这个我们可以通过命令 pstree 来验证
## 先下载安装 pstree
yum -y install psmisc## 执行
pstree输出如下 top 命令
top 命令用来查看每个进程消耗的资源等信息
执行如下的命令
top输出如下 输出分为两大块上面部分是系统状态信息、下面部分是每个进程状态信息
在系统状态信息中分别解释
第一行开机时间、系统运行了多少时间、有几个用户在用、平均负载用于衡量系统的繁忙程度的第二行进程任务的个数、运行任务的个数、睡觉任务的个数第三行CPU 的使用情况%CPU(s) 表示多个 CPU 的平均值我们可以按数字 1 查看每一个 CPU 的状态信息。us 表示用于对 CPU 的使用率sy 表示系统对 CPU 的使用率第四行内存的使用情况第五行交换分区(相当于 Windows 中的虚拟内存)的使用情况
在每个进程状态信息中对于开发人员会非常关心两个字段
%CPU 表示该进程使用 CPU 的占比%MEN 表示该进程使用内存的占比
默认情况下每 3 秒会更新一次每个进程状态信息我们可以按字母 s 然后输入你想多长时间更新一次 输入字母 q 可以退出 top 命令。
kill 命令
有的时候进程间需要进行通讯比如我们在终端想去停止掉一个进程这就需要和需要停止的进程进行通讯在 Linux 中可以使用信号来进行进程之间的通讯。
下面我们就来看看如何 kill 一个进程我们可以通过下面的命令查看下 kill 到底有多少中信号
kill -l输出为 可以看出总共有 64 个信号。我们常用的两个信号是
2 号名为 SIGINT 的信号实际上当我们执行 ctrl c 来停止进程的时候实际上就是发送的 2 号信号9 号名为 SIGKILL 的信号当发送这个信号的话那么进程会立马停止进程两者的区别是 2 号信号程序在结束之前,能够保存相关数据,然后再退出 9 号信号直接强制结束程序有可能会丢失数据
我们现在在终端启动一个 nc 服务
nc -l -p 5001然后启动另一个终端使用 ps -ef 可以查看到这个进程的状态信息 这个 nc 进程的 PID 是 11603知道这个 PID 之后我们就可以使用 kill 命令来停止这个进程如下
kill -2 11603## 或者
kill -9 11603当然我们也可以在启动 nc 的终端使用 ctrl c 来停止这个 nc 进程 进程的启动方式
到现在为止我们都是直接在终端上启动一个进程的如下启动 nc 服务进程
## 先创建一个文件
touch /root/test.txt## 然后动态的查看这个文件中的数据
tail -f /root/test.txt但是这种启动方式有一个严重的问题那就是当我们关闭当前的终端的时候这个进程也会停止了这个不是我们想要的我们可以通过如下的两种方式
nohup 与 配合screen
nohup 与 配合
我们可以先在上面的命令后面加上 字符表示控制进程在后台运行如下
tail -f /root/test.txt 这样当关闭终端的时候这个进程还在的但是这种方式有个缺点就是查询的数据你看不到了这个时候我们可以通过 nohup 命令来记录查询到的数据如下
## 关闭上面启动的进程
## 先查询 PID
ps -ef | grep tail
## 然后根据 PID 来停止进程
kill -9 12657## 使用 nohup 和 配合来启动命令
nohup tail -f /root/test.txt 执行上面的命令的话就会在当前目录中创建一个名为 nohup.out 的文件那么 tail 动态查询的数据都是放在这个文件中了。
screen
先要安装 screen
yum -y install screen然后在终端上输入
## 进入 screen
screen## 在 screen 中输入需要执行的命令
tail -f /root/test.txt## 退出 screen
## ctrl a然后输入字母 d现在就可以关闭终端了不会影响命令的执行当我们开起另一个终端的时候可以通过下面的命令来恢复 screen
## 先查看有哪些 screen 正在运行
screen -ls## 输出如下
There is a screen on:11920.pts-1.master (Detached)
1 Socket in /var/run/screen/S-root.## 然后恢复
screen -r 11920## 可以 ctrl c 停止进程## 再退出
exit内存查看命令
我们可以使用下面的命令查看服务器的内存使用情况
free输出为 以上看到的内存大小是以字节为单位显示的我们可以以 MB 来显示
free -m输出如下 字段说明
total 表示总的内存大小used 表示使用了的内存大小free 表示空闲的内存大小buff/cache 表示缓存了的内存大小available 表示可用的内存大小一般的话我们要知道你的服务器还剩多少内存的话一般就是看这个字段了。
Swap 就是交换分区可以理解为虚拟内存当真正的内存真的不够用的时候就会使用这个交换分区交换分区本质上是磁盘。
除了使用 free 命令外我们还可以使用 top 命令动态的查看内存使用情况。
文件大小查看命令 du
## 查看当前目录的大小以及递归查看当前目录下的子目录或者子文件的大小
du## 可读性更强
du -h## 查看指定文件的大小
du -h /root/test.txt## 查看指定文件目录的大小并且查看这个目录下的子目录的大小
du -h /## 查看指定文件目录的大小
du -hs /## 查看指定层数的子目录大小
du -h -d 1 /