写在前面
这是本linux纯小白的linux学习笔记,主要听b站韩顺平老师的课程,更加详细的知识点来源于各种博客与百度大佬的介绍供自己及时复习,现供大家参考。以后更加深度学习linux后会继续写相关进阶博客。
一些骚话
操作系统是覆盖在裸机之上的第一层软件,直接控制管理各种硬件资源,所以操作系统是整个计算机系统的控制管理中心。
linux内核kernel是系统的心脏,是运行程序,管理磁盘和操作计算机硬件设备的核心程序,实现操作系统的基本功能,包括cpu调度,作业管理,内存管理,文件管理,磁盘管理。
shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。接收用户的命令,并且把它送到内核去执行。
linux应用程序,包括文本编辑器,编程语言,办公套件,数据库等。
linux系统特点:开放性,多用户,多任务,界面友好,设备独立,网络强,安全性,可移植,兼容性,支持多种文件系统。
linux内核版本号由三个数字组成r.x.y 目前发布的kernel版本(主版本号).偶数:稳定版本,奇数:开发中版本(次版本号).错误修补次数
$表示普通用户,输入su再按回车再输入密码切换为超级用户。su fzh 回车切换到普通用户。
重启或关闭系统时超级用户下输入以下命令:shutdown -r 10 Attention:System will be reboot in 10 minites,Please save your work
shell是系统的用户界面。提供了用户与内核进行交互的一种接口,接受用户的命令并把他送入内核去执行。
虚拟机克隆
方式一:直接拷贝安装好的虚拟机文件到别的盘,再用vmware打开。文件->打开->找到.vmx文件
方式二:使用vmware的克隆操作。(克隆时,需要先关闭linux系统)
右键想要克隆的虚拟机->管理->克隆->创建完整克隆
虚拟机迁移和删除
虚拟系统本质上是文件(放在文件夹里),因此迁移就是将安装好的虚拟系统这个文件夹整体拷贝或者剪切到另外位置使用。
删除用vmware进行移除,再点击菜单->从磁盘删除即可,或者手动删除虚拟系统对应的文件夹即可。
虚拟机快照
使用虚拟机想要回到原先一个状态,vmware有个快照管理的功能。
担心有些误操作,需要回到原先的某个正常运行状态。
选中虚拟机,右键,快照,创建快照,变化的时候打开快照管理
安装linux的三种网络连接模式
1.桥接模式:虚拟系统可以和外部系统通讯,但是容易造成ip冲突
2.NAT模式:网络地址转换模式,虚拟系统可以和外部系统通讯,不会造成ip冲突
3.主机模式:独立系统,不和外界发生联系。
linux下一切都是文件
/bin (binaries)存放二进制可执行文件,存放经常使用的命令 /sbin (super user binaries)存放二进制可执行文件,只有root才能访问 /etc (etcetera)存放系统配置文件 /usr (unix shared resources)用于存放共享的系统资源,类似win的program files目录 /home 存放普通用户文件的根目录 /root 超级用户目录 /dev (devices)用于存放设备文件 /lib (library)存放跟文件系统中的应用程序运行所需要的动态连接共享库及内核模块,类似windows的dll文件 /mnt (mount)系统管理员安装临时文件系统的安装点,可以将外部的存储挂载/mnt上,共享文件夹在这里 /boot 存放用于系统引导时使用的各种文件,存放系统启动相关文件,包括一些连接文件,镜像文件,不要动 /tmp (temporary)用于存放各种临时文件 /var (variable)用于存放运行时需要改变数据的文件 /opt 给主机额外安装软件所摆放的目录 /lost+found 这个目录一般情况下是空的,当系统非法关机后,里面就存放一些文件** 在linux下隐藏文件是拿.开头的
linux系统内置vi文本编辑器 vim是vi的增强版
-
登录xShell (使用XShell来连接并使用安装好Linux系统的虚拟机) -
vim Hello.java回车后进入正常模式(好像每次vim都创建一个新文件,后来懂了,原来不存在的时候才会创建新的),按下ioar任何一个字母进入插入(编辑)模式,即可写代码 -
为保存文件需要进入命令行模式,按下esc,再输入:,再输入wq(写入并退出write,quit),回车 -
命令行模式下 输入vim He哎等等!现在咱们按下tab键就可以自动补全了,重新进入文件 各种模式切换 命令行模式->一般(正常)模式 ? vim xxx 执行这个最先进入的就是一般模式 一般模式->编辑(插入)模式 ? ioar(一般ia,懂我意思把,哈哈),回退 esc 一般->命令行 ?按:或者/ ,回退esc , 在输入(wq或q!)q!不保存退出
一般模式下的快捷键
- 拷贝当前行 yy,多行xyy 并粘贴(输入p)
- 删除当前行dd,多行xdd(5dd删光标下五行)
- vim /etc/profile 进入一般模式,编辑/etc/profile文件,到文件首行gg,末行G
- 插入模式下想撤回刚刚动作,按下esc进入一般模式,按u撤回
- 定位到第20行: 输入20(我们是看不到我们的输入的!)再shift+g
命令行模式下快捷键
- 一般模式下,输入/进入命令行模式,输入要查找的单词,回车,按n查找下一个
- set nu设置文件行号,set nonu 删除行号,每次执行操作时都要再次输入:(不能使用‘/’不知道为啥)
- 编辑etc/profile文件,到文件首行
关机&重启命令
shutdown
-h now 立即关机 h :halt停止
-h 1 1分钟后关机
-r now 选中重启 rehoot 重启
rehoot 重启
halt 关机
sync 把内存从数据同步到磁盘。关机,重启之前最好执行多次这个命令
用户和组相关的文件(命令行模式下输入)
- /etc/passwd 文件: 记录用户的各种信息,每增加一个用户,增加到这个文件里,每行含义:(笔记后面有详细介绍)
用户名:口令(看不到x):用户标识符:组标识符:注释性描述:主目录:登录shell - /etc/shadow 文件 :记录口令信息,每行含义:登录名:密码:中间各种时间:标志
- /etc/group 文件: 记录组信息
shell:命令解释器,将指令翻译解释后发给内核,shell是操作系统最外面的一层,种类很多bash(bashell),csh(Unix,linux系统),cmd.exe(windows NT系统),同时它又是一程序设计命令语言,它交互式的解释和执行用户输入的命令。排序算法中,shell是希尔排序的名称。命令行式shell(command line interface shell,即CLI shell)
dos:Disk Operating System,磁盘操作系统,
su - 用普通用户登陆后,再用“su - 用户名”切换成系统管理员
logout 注销用户,在图形界面无效,在运行级别3下有效 或者exit
useradd 默认该用户家目录在/home/xxx
-d 指定目录,给新的用户指定家目录 directory目录
eg; useradd -d /home/test king
userdel
1.删除该用户,但保留家目录
userdel fan [root@fanzhenhua home]# ls abc.txt ahh apple.txt fan
2.不保留家目录 -r
passwd xxx 给xxx设置密码
pwd指令 :print working directory,显示当前工作目录的绝对路径(从根目录开始/home/tom/a.txt,相对路径是从当前目录开始,若在home中,则tom/a.txt)
id xxx 查询该用户信息,组名啥的
whoami 此时运行的用户信息
groupadd groupdel
useradd -g 用户组 用户名
usermod -g用户组 用户名 修改用户的组
一些命令
[root@fanzhenhua /]
3.10.0-957.el7.x86_64
uname -m
uname -i
uname -v
?软连接(符号链接)
ln -s(soft软连接) 链接目标文件 链接名 *cat 链接名 就相当于:cat 目标文件
?硬链接(保护文件不被错误删除),删除文件后,硬链接还可以找到文件
ln 链接目标文件 链接名
一个文件定位一个文件,最主要找inode(stat命令显示)
硬链接直接指向inode,软连接先指向目标文件后,目标文件才指向inode
- 重定向
这个关于重定向的笔记是我学习一大佬的,原文翻找不到了
输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。
ll /root > test ll /opt >test *最后test显示/opt里面信息,因为是覆盖性追加
为了表示和区分已经打开的文件,Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。
文件描述符 | 文件名 | 类型 | 硬件 |
---|
0 | stdin | 标准输入文件 | 键盘 | 1 | stdout | 标准输出文件 | 显示器 | 2 | stderr | 标准错误输出文件 | 显示器 |
Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。一个文件描述符只是一个和打开的文件相关联的整数,它的背后可能是一个硬盘上的普通文件、FIFO、管道、终端、键盘、显示器,甚至是一个网络连接。stdin、stdout、stderr 默认都是打开的,在重定向的过程中,0、1、2 这三个文件描述符可以直接使用。
类 型 | 符 号 | 作 用 |
---|
标准输出重定向 | command >file | 以覆盖的方式,把 command 的正确输出结果输出到 file 文件中。 | | command >>file | 以追加的方式,把 command 的正确输出结果输出到 file 文件中。 | 标准错误输出重定向 | command 2>file | 以覆盖的方式,把 command 的错误信息输出到 file 文件中。 | | command 2>>file | 以追加的方式,把 command 的错误信息输出到 file 文件中。 | 正确输出和错误信息同时保存 | command >file 2>&1 | 以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。 | | command >>file 2>&1 | 以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。 | | command >file1 2>file2 | 以覆盖的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。 | | command >>file1 2>>file2 | 以追加的方式,把正确的输出结果输出到 file1 文件中,把错误信息输出到 file2 文件中。 |
当文件描述符为 1 时,一般都省略不写,如上表所示;当然,如果你愿意,也可以将command >file 写作command 1>file ,但这样做是多此一举。
文件描述符和>之间不能有空格(反正<两边都不加空格,默认为1或者0不写的时候就为空格)
[c.biancheng.net]$ ls -l #先预览一下输出结果
总用量 16
drwxr-xr-x. 2 root root 21 7月 1 2016 abc
-rw-r--r--. 1 mozhiyan mozhiyan 399 3月 11 17:12 demo.sh
-rw-rw-r--. 1 mozhiyan mozhiyan 67 3月 22 17:16 demo.txt
[c.biancheng.net]$ ls -l >demo.txt #重定向
[c.biancheng.net]$ cat demo.txt #查看文件内容
总用量 12
drwxr-xr-x. 2 root root 21 7月 1 2016 abc
-rw-r--r--. 1 mozhiyan mozhiyan 399 3月 11 17:12 demo.sh
-rw-rw-r--. 1 mozhiyan mozhiyan 0 3月 22 17:21 demo.txt
命令正确执行是没有错误信息的,我们必须刻意地让命令执行出错,如下所示:
[c.biancheng.net]$ ls java #先预览一下错误信息
ls: 无法访问java: 没有那个文件或目录
[c.biancheng.net]$ ls java 2>err.log #重定向
[c.biancheng.net]$ cat err.log #查看文件
ls: 无法访问java: 没有那个文件或目录
【实例1】把正确结果和错误信息都保存到一个文件中,例如:
[c.biancheng.net]$ ls -l >out.log 2>&1
[c.biancheng.net]$ ls java >>out.log 2>&1
[c.biancheng.net]$ cat out.log
总用量 12
drwxr-xr-x. 2 root root 21 7月 1 2016 abc
-rw-r--r--. 1 mozhiyan mozhiyan 399 3月 11 17:12 demo.sh
ls: 无法访问java: 没有那个文件或目录
out.log 的最后一行是错误信息,其它行都是正确的输出结果。
上面的实例将正确结果和错误信息都写入同一个文件中,这样会导致视觉上的混乱,不利于以后的检索,所以我建议把正确结果和错误信息分开保存到不同的文件中,也即写成下面的形式:
ls -l >>out.log 2>>err.log
这样一来,正确的输出结果会写入到 out.log,而错误的信息则会写入到 err.log。
/dev/null 文件
如果你既不想把命令的输出结果保存到文件,也不想把命令的输出结果显示到屏幕上,干扰命令的执行,那么可以把命令的所有结果重定向到 /dev/null 文件中。如下所示:
ls -l &>/dev/null
可以把 /dev/null 当成 Linux 系统的垃圾箱,任何放入垃圾箱的数据都会被丢弃,不能恢复。
- 输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入。
符号 | 说明 |
---|
command <file | 将 file 文件中的内容作为 command 的输入。 | command <<END | 从标准输入(键盘)中读取数据,直到遇见分界符 END 才停止(分界符可以是任意的字符串,用户自己定义)。 | command file2 | 将 file1 作为 command 的输入,并将 command 的处理结果输出到 file2。 |
和输出重定向类似,输入重定向的完整写法是fd<file ,其中 fd 表示文件描述符,如果不写,默认为 0,也就是标准输入文件。
运行级别
init 【012345】 0:关机 3:多用户状态下有网络服务 5:图像界面
systemctl get-default 查询当前级别(graphical.target图像,multi-user.target 多用户有网络服务级别)
systemctl set-default multi-user.target 进入多用户有网络服务级别
文件目录类
选项
- -l long
- -a all
- -t time
- -p 父目录不存在情况下先生成父目录parents
- -r 递归处理。将指定目录下的文件与子目录一并拷贝recursive
- -f 强制删除文件或目录(rm -f)force
快捷键
ctrl+c 停止当前进程
ctrl+r 查看历史命令
ctrl+l清屏,与clear命令作用相同
ls: 显示文件和目录列表,ls -l 详细内容。ls -lh让文件大小的格式不是字节的形式显示出来eg:200M h=human人比较容易看
cd:change directory, 切换到指定目录, cd ~,cd:回到家目录, 若是登录用的root,就到/root,若用tom登录,就到/home cd …回到当前目录的上一级目录
[root@fanzhenhua /]
[root@fanzhenhua fzh]
[root@fanzhenhua ~]
[root@fanzhenhua fzh]
[root@fanzhenhua ~]
[root@fanzhenhua fzh]
[root@fanzhenhua home]
/home/fzh
-
用绝对路径到fan目录(本来在root):/home/fan -
用相对路径到/root : cd …/…/(回到根目录)root(找到),完整的就是:cd …/…/root -
mkdir 创建目录 :mkdir /home/dog(home已存在,故相当于创建一个目录) -p创建多级目录:mkdir -p /home/dog/air -
rmdir 删除空目录 -rf删除非空目录(谨慎) -
touch 创建空文件 touch hello.txt hello2.txt -
cp copy拷贝文件到指定目录(copy) cp [选项] source(文件) dest(要拷贝到的地方) -r递归复制整个文件夹 强制覆盖不提示 /cp -
rm 删除文件或目录 -r(recursion)递归删除整个文件夹, -f 强制删除不提示 -
mv 移动文件与目录或重命名 ,
mv 旧名 新名
mv pig.txt /root/ 移动
mv pig.txt /root/cow.txt 移动并且改名
将opt的bbb目录下全部移动到home目录下 mv bbb/ /home/ 此时进入opt目录,bbb/是相对路径
-
cat 查看文件内容 -n显示行号 , 为了浏览方便,一般带上管道命令 |more 管道就是将前面得到的结果传给后面进行操作 cat -n /etc/profile | more ,enter换行 空格换页 全部显示完毕退出来 catenate -
more 基于vim编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容。 交互指令:enter换行, 空格换页 ,q 退出,ctrl+f向下滚动一屏,ctrl+b返回上一屏,=输出当前行号,:f输出文件名和当前行的行号 -
less 分屏查看文件内容,比more强大,支持各种显示终端,并不是把整个文件加载出来才显示的,而是根据显示加载,对大型文件有较高的效率。 空格:向下翻页,[pagedown]:向下翻页,[gapeup]:向上翻页,/字串或者?字串: n:向下查找,N向上查找,q退出 -
echo 输出内容到控制台,相当于print eg:echo $PATH 输出 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin echo $HOSTNAME 输出 hspEdu01 echo “hello” >/home/ahh.txt把hello写入ahh.txt中 -
head 显示文件的开头部分,默认前十行head 文件名,head -n 5 文件名 :前五行 -
tail 显示文件尾部,除了与上面差不多的两个外,tail -f 文件:实时追踪该文档的所有更新 循环读取(follow) 实时监控mydate.txt 看看文件有变化时,实时的追加 “变化” ctrl+c退出
[root@fanzhenhua home]# touch mydate.txt
[root@fanzhenhua home]# tail -f mydate.txt
hello
eyigeo
虚拟器终端如此操作
[root@fanzhenhua ~]# echo "hello" > /home/mydate.txt
[root@fanzhenhua ~]# echo "wzaixieyigeo" > /home/mydate.txt
- wc : word count,统计文本的行数,字数,字符数
-m 统计文本字符数
-w 统计文本字数
-l 统计文本行数
ln 软链接也叫符号链接,类似windows里的快捷方式,主要存放链接其他文件的路径 link ln -s [原文件或目录 软连接名 功能:给原文件创建一个软连接 eg:/home 目录下创建一个软连接myboot 连接到/root目录
[root@fanzhenhua ~]
[root@fanzhenhua ~]
总用量 36
-rw-r--r--. 1 1000 root 0 7月 12 11:03 abc.txt
-rw-r--r--. 1 1003 root 0 7月 11 00:07 apple.txt
drwx------. 16 fzh fzh 4096 10月 9 16:36 fzh
-rw-r--r--. 1 root root 30 7月 10 23:26 hello.txt
-rw-r--r--. 1 root root 668 10月 20 09:26 info.txt
drwxrwx---. 5 jack police 4096 7月 12 11:48 jack
lrwxrwxrwx. 1 root root 6 10月 20 09:36 myboot -> /root/
[root@fanzhenhua ~]
[root@fanzhenhua myboot]
-s对源文件建立符号链接,而非硬链接
- history 查看已经执行过的历史命令,也可以执行历史命令
显示所有 history
最近10个 history 10
执行历史编号为5的指令 !5
-
top 显示当前系统中耗费资源最多的进程 -
ps 显示瞬间的进程状态
-e/-A 显示所有进程,环境变量
-f 全格式
-a 显示所有用户的所有进程
-u 按用户名和启动时间的顺序来显示进程
-x 显示无控制终端的进程
-
kill 杀死一个进程 -
df 显示文件系统磁盘空间的使用情况 -
du 显示指定的文件已使用的磁盘空间的总文件大小 -
free 显示当前内存和交换空间的使用情况 -
netstat 显示网络状态信息
-a 显示所有连接和监听端口
-t (tcp) 仅显示tcp相关选项
-u udp 仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化数字
-p 显示建立相关链接的程序名
时间指令
date 显示当前时间
date +%Y年份
date +%m月份
date +%d哪一天
date "+%Y-%m-%d %H:%M:%S"显示年月日时分秒
date -s “2021-11-11 20:02:10 ” 设置系统当前日期为这个
[root@fanzhenhua ~]
2021-10-20
[root@fanzhenhua ~]
20211020
[root@fanzhenhua ~]
2021 10 20
cal 显示本月日历
cal 2020 显示2020整年日历
查找命令
- find 将从指定目录向下递归的遍历各个子目录,将满足条件的文件或目录显示在终端 基本语法: find 搜索范围 选项
-name find /home -name hello.txt 按名称查找/home目录下的hello.txt文件
-user find /opt -user mick 查找/opt目录下用户mick创建的文件
-size find / -size +200M 在根目录下查找大于200兆的文件 k M G
- locate 快速定位文件路径 ,该基于数据库进行查询,第一次运行前,必须使用updatedb指令创建locate数据库,使得查询速度大大增加。
[root@fanzhenhua ~]
[root@fanzhenhua ~]
/home/hello.txt
[root@fanzhenhua ~]
hello
yes
ok
yes
jjj
ojk
hhh
yes
yes
[root@fanzhenhua ~]
yes
yes
yes
yes
[root@fanzhenhua ~]
2:yes
4:yes
8:yes
9:yes
[root@fanzhenhua ~]
2:yes
4:yes
8:yes
9:yes
压缩和解压命令
- gzip/gunzip压缩/解压文件命令。
- zip/unzip压缩/解压文件或者目录命令(在项目打包中有用)。
-r 递归压缩,即压缩目录时写这个 zip -r myhome.zip /home/ 将home文件夹全部压缩
-d 指定压缩后文件的存放目录 unzip -d /opt/tmp /home/myhome.zip
[root@fanzhenhua ~]
[root@fanzhenhua ~]
abc.txt apple.txt fzh hello.txt.gz
[root@fanzhenhua ~]
[root@fanzhenhua ~]
abc.txt apple.txt fzh hello.txt
- tar 语法:tar [选项] xxx.tar.gz 打包的内容
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压
[root@fanzhenhua home]
tar: 从成员名中删除开头的“/” 压缩后的文件夹名
/home/pig.txt
/home/cat.txt
[root@fanzhenhua home]
abc.txt apple.txt cat.txt fzh hello.txt info.txt jack mydir my.sh orange.txt *pc.tar.gz*
[root@fanzhenhua home]
rm:是否删除普通空文件 "cat.txt"?y
rm:是否删除普通空文件 "pig.txt"?y
[root@fanzhenhua home]
abc.txt apple.txt fzh hello.txt info.txt jack mycal mydate.txt mydir my.sh orange.txt pc.tar.gz
[root@fanzhenhua home]
home/pig.txt
home/cat.txt
[root@fanzhenhua home]
abc.txt apple.txt fzh hello.txt home【多了这个】 info.txt jack mycal mydate.txt mydir my.sh orange.txt pc.tar.gz
[root@fanzhenhua home]
[root@fanzhenhua home]
cat.txt pig.txt
linux组
在linux中的每个用户必须属于一个组,不能独立于组外。
具有一定关联性用户的集合形成组,给该组赋权限,该组所有成员都享有该权限
文件的所有者:ls -ahl查看文件所有者,与ll差不多 修改文件所有者:chown 用户名 文件名
所在组:文件所在组就是文件所有者所在的组。
[root@fanzhenhua home]
[root@fanzhenhua home]
[root@fanzhenhua home]
总用量 48
-rw-r--r--. 1 1000 root 0 7月 12 11:03 abc.txt
-rw-r--r--. 1 jack root 0 10月 21 07:14 apple.txt
drwx------. 3 fox monster 4096 10月 21 07:16 fox
ll 输出的 0-9 位
第0位 确定文件类型
l是链接 相当于wins的快捷方式
d是目录,相当于windows的文件夹
c 字符设备文件,鼠标,键盘
b 块设备,硬盘
-普通文件
1-3 文件所有者 User
4-6 所属组 Group
7-9 其他用户Other
10位 文件数或者目录下的文件数
11位 用户
12位 组4096字节
13位 文件大小,如果是文件夹,显示
然后是 最后修改日期
最后文件名
rwx read,write,exectute
修改权限
任务调度 crond
比如有的重要工作需要周而复始的执行,如病毒扫描。就需要任务调度。复杂的、分布式的、工作流式的调度可以通过azkaban来进行调度,除了执行调度任务之外,它还能进行定时调度。而对于简单的服务器任务,如执行一个小脚本,发送邮件等,可以使用crontab命令直接进行。linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。
crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。/etc/crontab文件包括下面几行:
[root@fanzhenhua ~]
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
? /etc/cron.allow说明:该文件中所列用户允许使用crontab命令
? /var/spool/cron/说明:所有用户crontab文件存放的目录,以用户名命名
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:minute hour day month week command
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“0 8,12 *** 命令”代表在每天八点零分,十二点零分都执行一次
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率。同时正斜线可以和星号一起使用,例如*/10****,如果用在minute字段,表示每十分钟执行一次。
*/10 4 *** 每天凌晨四点,每隔十分钟执行一次命令
crontab 进行定时任务的设置 -e 编辑crontab定时任务edit -l 查询crontab任务list -r 删除当前用户所有的crontab任务,终止任务调度 service crond restart 重启任务调度 service crond status 查看 crond 服务的运行状态 service crond stop //关闭服务 service crond reload //重新载入配置
crontab -man命令可以查看简单的帮助手册!
https://www.cnblogs.com/yepei/p/6694735.html
小例子
[root@fanzhenhua home]
*/1 * * * * /home/da.sh
[root@fanzhenhua home]
总用量 52
-rw-r--r--. 1 root root 20 10月 24 21:22 da.sh
[root@fanzhenhua home]
[root@fanzhenhua home]
总用量 48
-rwxr--r--. 1 root root 20 10月 24 21:22 da.sh
[root@fanzhenhua home]
2021年 10月 24日 星期日 21:24:26 CST
[root@fanzhenhua home]
2021年 10月 24日 星期日 21:24:26 CST
2021年 10月 24日 星期日 21:28:01 CST
crontab -e
0 2 * * * mysqldump -u root -proot testdb >/home/db.bak
[root@fanzhenhua ~]
*/1 * * * * /home/da.sh
[root@fanzhenhua ~]
[root@fanzhenhua ~]
no crontab for root
at定时任务 执行一次性的定时任务
要想使用 at 命令,读者需提前安装好 at 软件包,并开启 atd 服务。因此,首先来看看如何安装 at 软件包。
在 Linux 系统中,查看 at 软件包是否已安装,可以使用 rpm -q 命令,如下所示:
[root@localhost ~]
at-3.1.13-20.el7x86_64
若读者所用系统未安装,可使用如下命令进行安装:
[root@localhost ~]
除此之外,at 命令要想正确执行,还需要 atd 服务的支持。atd 服务是独立的服务,启动的命令如下:
[root@localhost ~]
正在启动 atd: [确定]
如果想让 atd 服务开机时自启动,则可以使用如下命令:[root@localhost ~]# chkconfig atd on
安装好 at 软件包并开启 atd 服务之后,at 命令才可以正常使用,不过在此之前,我们还要学习一下 at 命令的访问控制。访问控制指的是允许哪些用户使用 at 命令设定定时任务,或者不允许哪些用户使用 at 命令。大家可以将其想象成设定黑名单或白名单,这样更容易理解。
at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:
- 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。
- 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。
- 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。
系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可。
[root@fanzhenhua ~]
-rw-r--r--. 1 root root 1 10月 31 2018 /etc/at.deny
[root@localhost ~]
[root@localhost ~]
user1
[root@localhost ~]
[user1@localhost ~]$ at 02:00
You do not have permission to use at.
[user1@localhost ~]$ exit
logout
[root@localhost ~]
[root@localhost ~]
user1
[root@localhost ~]
[user1@localhost ~]$ at 02:00
at>
[user1@localhost ~]$ exit
logout
[root@localhost ~]
at>
这个实验说明了 /etc/at.allow 文件的优先级更高,如果 /etc/at.allow 文件存在,则 /etc/at.deny 文件失效。/etc/at.allow 文件的管理更加严格,因为只有写入这个文件的用户才能使用 at 命令,如果需要禁用 at 命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny 文件的管理较为松散,如果允许使用 at 命令的用户较多,则可以把禁用的用户写入这个文件。不过这两个文件都不能对 root 用户生效。
ps -ef 检测当前运行的进程
[root@fanzhenhua ~]
root 8105 1 0 17:08 ? 00:00:00 /usr/sbin/atd -f
root 10642 10177 0 17:43 pts/0 00:00:00 grep --color=auto atd
at [选项] [时间] ctrl+d 结束at命令的输入
-m | 当 at 工作完成后,无论命令是否输出,都用 E-mail 通知执行 at 命令的用户。 |
---|
-c 工作标识号 | 显示该 at 工作的实际内容。 | -t 时间 | 在指定时间提交工作并执行,时间格式为 [[CC]YY]MMDDhhmm。 | | | -d | 删除某个工作,需要提供相应的工作标识号(ID),同 atrm 命令的作用相同。 | -l | 列出当前所有等待运行的工作,和 atq 命令具有相同的额作用。 | -f 脚本文件 | 指定所要提交的脚本文件。 |
格式 | 用法 |
---|
HH:MM | 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。 | Midnight(midnight) | 代表 12:00 AM(也就是 00:00)。 | Noon(noon) | 代表 12:00 PM(相当于 12:00)。 | Teatime(teatime) | 代表 4:00 PM(相当于 16:00)。 | 英文月名 日期 年份 | 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无。 | MMDDYY、MM/DD/YY、MM.DD.YY | 比如 011518 表示 2018 年 1 月 15 号。 | now+时间 | 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。 | today,tomorrow | 指定完成命令的时间 |
案例
[root@fanzhenhua ~]
at> /bin/ls /home<EOT>
job 2 at Wed Oct 27 17:00:00 2021
[root@fanzhenhua ~]
2 Wed Oct 27 17:00:00 2021 a root
[root@fanzhenhua ~]
at> date > /root/date100.log<EOT>
job 3 at Tue Oct 26 17:00:00 2021
[root@fanzhenhua ~]
2 Wed Oct 27 17:00:00 2021 a root
3 Tue Oct 26 17:00:00 2021 a root
【例 1】
[coot@localhost ~]
\#!/bin/bash
echo "hello world!!"
\#该脚本会打印"hello world!!"
[root@localhost ~]
at> /root/hello.sh >> /root/hello.log
\#执行hello.sh脚本,并把输出写入/root/hello.log文件
at> <EOT>
\#使用Ctrl+D快捷键保存at任务
job 8 at 2013-07-25 20:54
[root@localhost ~]
\#查询第8个at任务的内容
...省略部分内容...
\#主要定义系统的环境变量
/root/hello.sh >> /root/hello.log
\#可以看到at执行的任务
【例 2】
[root@localhost ~J# at 02:00 2013-07-26 at> /bin/sync at> /sbin/shutdown -h now at> job 9 at 2013-07-26 02:00 #在指定的时间关机。在一个at任务中是可以执行多个系统命令的
在使用系统定时任务时,不论执行的是系统命令还是 Shell 脚本,最好使用绝对路径来写命令,这样不容易报错。at 任务一旦使用 Ctrl+D 快捷键保存,实际上写入了 /var/spool/at/ 这个目录,这个目录内的文件可以直接被 atd 服务调用和执行。
表 1 中提到了 atq 命令和 atrm 命令。atq 命令用于查看当前等待运行的工作,atrm 命令后者用于删除指定的工作,它们的使用方法也很简单,这里给大家举几个简单的例子。
【例 3】atq 命令的用法。
[root@localhost ~]# atq 9 2013-07-26 02:00 a root #说明root用户有一个at任务在2013年7月26日02:00执行,工作号是9 [root@localhost ~]# atrm [工作号] #删除指定的at任务
【例 4】atrm 命令的用法。
[root@localhost ~]# atrm 9 [root@localhost ~]# atq #删除9号at任务,再查询就没有at任务存在了
磁盘应用
查看所有设备挂载情况:
ide硬盘,hda1表示第一个硬盘的第一个主分区,scsi硬盘,标识符为“sdx~”,sda1代表第一块硬盘第一个分区,2代表第1款硬盘第二个分区…4代表第1块硬盘第四个分区…,sdb代表第二块硬盘
[root@hspEdu01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sdb 8:16 0 1G 0 disk
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
[root@hspEdu01 ~]# lsblk -f ?查看的完全设备挂载情况
NAME FSTYPE LABEL UUID ?每个分区的40位的唯一标识符 MOUNTPOINT?挂载点
sda ?分区情况 ?格式化后为每个分区分配那唯一字符串,表示他已经格式化
├─sda1 ext4 22dddfbb-4515-463b-bb50-d79f69571026 /boot
├─sda2 swap f0ccf5ba-c68c-4ae1-9ca0-af47d67ead5a [SWAP]
└─sda3 ext4 95b68be7-28c6-4d13-b5f2-e2aa70b43b0e /
sdb
sr0 iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00 /run/media/root/CentOS 7 x86_64
在虚拟机里——>设置——>添加硬盘 sdb 重启后reboot,显示出硬盘
分区命令:fdisk /dev/sdb
[root@hspEdu01 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
Device does not contain a recognized partition table
使用磁盘标识符 0x0de8215b 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition ?删除分区
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu ?显示命令列表
n add a new partition ?新增分区
o create a new empty DOS partition table
p print the partition table ?显示磁盘分区,同fdisk -l
w write table to disk and exit ?写入退出
1、命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
2、Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-2097151,默认为 2048): ?回车,默认全部剩余空间
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):?同上
将使用默认值 2097151
分区 1 已设置为 Linux 类型,大小设为 1023 MiB
命令(输入 m 获取帮助):w ?写入并退出,若不想保存,直接写q
正在同步磁盘。
[root@hspEdu01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 17G 0 part /
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part ?分区已经有了,但是还未格式化,不能挂载
sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
mkfs -t ext4 /dev/sdb1
ext4是分区类型
卸载掉挂载
挂载: mount 设备名称 挂载目录
卸载: umount 设备名或者挂载目录 umount /dev/sdb1 或者umount /newdisk
umount: /newdisk:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以找到有关使用该设备的进程的有用信息)
mkdir newdisk # 创建新的被挂载的地方,在newdisk里创建的文件就在磁盘sdb1里
mount /dev/sdb1 /newdisk
永久挂载
修改/etc/fstab实现挂载,添加后执行mount -a立即生效
用命令挂载重启后会失效
进入:vim /etc/fstab
yyp拷贝
或者把拷贝的改为:/dev/sdb1 /newdisk ext4 defaults 0 0
紧急模式解决:重启后输入root密码回车,去到root终端,然后vim /ect/fstab ,修改回正确的,然后reboot
磁盘情况查询
查询整体磁盘使用情况: df -h
查询指定目录: du -h 目录 (没有带目录时默认情况下查询的是当前目录)
-s 指定目录的磁盘占用情况
-h带计量单位
-c列出明细的同时,增加汇总值
-a含文件
--max-depth=1 子目录的深度
案例查询opt目录下的磁盘占用情况
[root@hspEdu01 ~]# cd /opt/
[root@hspEdu01 opt]# ls
rh VMwareTools-10.3.23-17030940.tar.gz vmware-tools-distrib
[root@hspEdu01 opt]# du -h --max-depth=1 /opt
4.0K /opt/rh
154M /opt/vmware-tools-distrib
205M /opt
[root@hspEdu01 opt]# du -ha --max-depth=1 /opt
4.0K /opt/rh
52M /opt/VMwareTools-10.3.23-17030940.tar.gz
154M /opt/vmware-tools-distrib
205M /opt
[root@hspEdu01 opt]# du -hac --max-depth=1 /opt
4.0K /opt/rh
52M /opt/VMwareTools-10.3.23-17030940.tar.gz
154M /opt/vmware-tools-distrib
205M /opt
205M 总用量
几个小应用
统计opt文件夹下文件个数
[root@hspEdu01 opt]# ls -l /opt ?列出opt下面的内容
总用量 52584
drwxr-xr-x. 2 root root 4096 10月 31 2018 rh
[root@hspEdu01 opt]# ls -l /opt | grep "^-" ?用管道过滤出首字母为-的,就是普通文件
-rw-r--r--. 1 root root 53834249 10月 14 2020 VMwareTools-10.3.23-17030940.tar.gz
[root@hspEdu01 opt]# ls -l /opt | grep "^-" | wc -l ?用wc统计数字
1
统计opt文件夹下目录个数
[root@hspEdu01 opt]# ls -l /opt | grep "^d" | wc -l ?因为目录是以d开头的,然后用wc求和
[root@hspEdu01 opt]# ls -lR /opt | grep "^-" |wc -l ?列出opt包括子文件的个数 R递归
以树状显示目录结构,首先使用 yum install tree 安装Tree
tree /opt
NAT网络配置
ping(数据包internet groper)命令用于检查主机与服务器(eg:ping www.baidu.com)、主机(eg:ping 192.168.216.128)之间的网络连接。以ip地址或url为输入。
ctrl+c停止
ifconfig在linux中查询ip地址192.168.216.128(会变), ipconfig在cmd中查 :vmnet8处IPv4 地址 : 192.168.216.1, cmd中ping 192.168.216.128,很容易ping通,在linux中ping 192.168.216.1得先关闭防火墙(控制面板中)才可以ping通 linux虚拟机可以上网原因主机还有无线网卡 IPv4 地址 . . . . . . . . . . . . : 192.168.3.85,虚拟机连接主机时,经由无线网卡的代理找到网关,最后找到互联网。
网络环境配置
第一种方法 自动获取
第二种方法 指定ip 直接修改文件来指定ip,并可以连接到外网
vim /etc/sysconfig/network-scripts/ifcfg-ens33
p65
service network restart 、reboot 重启网络服务或者重启系统生效
设置主机名
hostname 查看主机名
vim /etc/hostname 修改主机名
设置hosts映射 也就是如何通过主机名找到某个Linux而不是用ip地址
在C:\windows\System32\drivers\etc\hosts文件指定即可 记事本打开就行 eg:192.168.216.128 hspedu100
linux 在/etc/hosts 编辑写入192.168.216.1 LAPTOP-ERDAN5JF
hosts是一个文本文件,用来记录ip和hostname的映射关系
dns 就是 domain name system 的缩写 ,域名系统(一组服务器),是互联网上作为域名和ip地址相互映射的一个分布式数据库
进程
在Linux里,每一个执行的程序都称为一个进程,每一个进程都分配一个id号(pid,进程号)。每个进程都以两种方式存在:前台,后台。
linux的每个命令是以进程的方式运行的,每个进程运行时会自动打开三个文件,称为命令的标准文件。stdin,0(标准输入文件),stdout,1,stderr,2
显示系统执行的进程
ps指令是用来查看目前系统中,有哪些正在执行,执行情况,可不加任何参数
[root@hspEdu100 ~]# ps -aux | more ?终端
?进程执行用户 ?进程号 ?占用物理内存?物理内存大小 ?运行状态 ?占用cpu时间
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
?占用cpu百分比?占用虚拟内存大小 ?开始执行时间 ?进程名,执行该进程的指令
root 1 0.1 0.3 193816 6924 ? Ss 08:37 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 08:37 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 08:37 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 08:37 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 08:37 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 08:37 0:00 [rcu_bh]
STAT 其中S- 睡眠
s-表示该进程是会话的先导进程
N-表示进程拥有比普通优先级更低的优先级
R-正在运行
D-短期等待
Z-僵死进程
T-被跟踪或者被停止
ps -aux | grep xxx 看有没有xxx服务
ps -a 显示当前终端所有进程信息
ps -u 以用户的格式显示进程
ps -x 显示后台进程运行的参数
查看进程父进程
ps -ef以全格式显示当前所有进程 -e 显示所有进程,-f全格式
rpm包管理
rpm用于互联网下载包的打包以及安装工具,一个 RPM 包包含了已压缩的软件文件集以及该软件的内容信息,通常表现为以 .rpm 扩展名结尾的文件,例如 samba.rpm 。如果需要对RPM包进行操作则需要使用rpm命令。
查询已安装的rpm列表: rpm -qa |grep xx, rpm -qa | more ,rpm -qa
[root@hspEdu100 ~]# rpm -qa | grep firefox
firefox-60.2.2-1.el7.centos.x86_64 //rpm包名基本格式的例子
名称:firefox
版本号:60.2.2-1
适用的操作系统:el7.centos.x86_64 64位
rpm -q 软件包名:查询软件是否安装
rpm -qi 软件包名:查询软件包信息
rpm -ql 软件包名:查询软件包中的文件
rpm -qf 文件全路径名:查询文件所属软件包
rpm -qf /etc/passwd:查询该文件归属于哪个软件包
[root@hspEdu100 ~]# rpm -qf /etc/passwd
setup-2.8.71-10.el7.noarch //noarch是32位64位通用的
卸载rpm包 rpm -e rpm包名 //erase 擦除
安装rpm包:rpm -ivh rpm包全路径名称 //i install安装,v verbose 提示,h=hash 进度条
# 我输入rpm -p at 出现下面的情况 好像是告诉每个选项的全拼
用法: rpm [-aKfgpqVcdLilsiv?] [-a|--all]
[-f|--file]
[-g|--group]
[-p|--package] [--pkgid] [--hdrid] [--triggeredby] [--whatrequires]
[--whatprovides] [--nomanifest]
[-c|--configfiles]
[-d|--docfiles]
[-L|--licensefiles] [--dump]
[-l|--list] [--queryformat=QUERYFORMAT]
[-s|--state] [--nofiledigest] [--nofiles] [--nodeps] [--noscript]
[--allfiles] [--allmatches] [--badreloc] [-e|--erase <package>+]
[--excludedocs] [--excludepath=<path>] [--force]
[-F|--freshen <packagefile>+]
[-h|--hash] [--ignorearch] [--ignoreos]
[--ignoresize] [-i|--install] [--justdb] [--nodeps] [--nofiledigest]
[--nocontexts] [--noorder] [--noscripts] [--notriggers]
[--nocollections] [--oldpackage] [--percent] [--prefix=<dir>]
[--relocate=<old>=<new>] [--replacefiles] [--replacepkgs] [--test]
[-U|--upgrade <packagefile>+] [--reinstall=<packagefile>+]
[-D|--define “MACRO EXPR”] [--undefine=MACRO]
[-E|--eval “EXPR”]
[--macros=<FILE:…>] [--noplugins] [--nodigest] [--nosignature]
[--rcfile=<FILE:…>]
[-r|--root ROOT] [--dbpath=DIRECTORY]
[--querytags] [--showrc] [--quiet]
[-v|--verbose] [--version]
[-?|--help] [--usage] [--scripts] [--setperms] [--setugids]
[--conflicts] [--obsoletes] [--provides] [--requires] [--info]
[--changelog] [--xml] [--triggers] [--last] [--dupes]
[--filesbypkg] [--fileclass] [--filecolor] [--fscontext]
[--fileprovide] [--filerequire] [--filecaps]
yum
yum是shell前端软件包管理器,基于rpm包管理,能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包
查询yum服务器是否有需要安装的软件 yum list | grep xx
安装指定的yum包:yum install xx
shell
shell是一个命令行解释器,为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至编写一些程序。
脚本格式要求:脚本以 #!/bin/bash 开头,脚本需要有可执行的权限。
[root@hspEdu100 ~]# mkdir /root/shellcode
[root@hspEdu100 ~]# cd /root/shellcode
[root@hspEdu100 shellcode]# ls
[root@hspEdu100 shellcode]# vim hello.sh
[root@hspEdu100 shellcode]# ll
总用量 4
-rw-r--r--. 1 root root 29 7月 19 20:30 hello.sh //没有执行权限
[root@hspEdu100 shellcode]# chmod u+x hello.sh
[root@hspEdu100 shellcode]# ll
总用量 4
-rwxr--r--. 1 root root 29 7月 19 20:30 hello.sh
[root@hspEdu100 shellcode]# vim hello.sh
脚本执行方式① 需要有可执行权限
[root@hspEdu100 shellcode]# ./hello.sh //相对路径执行脚本
hello,world
[root@hspEdu100 shellcode]# /root/shellcode/hello.sh //相对路径执行脚本
hello,world
②sh+脚本 没有执行权限也行 sh hello.sh
[root@hspEdu100 shellcode]# chmod u-x hello.sh
[root@hspEdu100 shellcode]# sh hello.sh
hello,world
vim里:
#!/bin/bash //脚本以此开头
echo "hello,world"
shell命令
linux命令就是shell命令
内部命令
是shell本身包含的一些命令
外部命令
存放一些二进制可执行文件或shell脚本,外部命令执行时,shell会在文件系统中指定一些目录去搜索相应文件,然后调入内存执行。
shell变量
shell变量分为系统变量,用户自定义变量
系统变量
$HOME $PWD $SHELL $USER
[root@hspEdu100 shellcode]# echo $HOME
/root
set查看所有系统变量
自定义变量
定义:变量名=值 变量名一般为大写
撤销变量: unset 变量
声明静态变量: readonly变量,注意:不能unset
#!/bin/bash
A=1
echo $A 或者echo A=$A 或者 echo "A=$A"
unset A
readonly B=2
echo B=$B #静态变量
C=`A` 等价于C=$(A)
环境变量
//?在/etc/profile文件中定义TOMCAT_HOME环境变量/全局变量
export 变量名=变量值(将shell变量输出为环境变量/全局变量)
source 配置文件 ,让他刷新一下
[root@hspEdu100 opt]# vim /etc/profile
[root@hspEdu100 opt]# echo $TMOCAT_HOME
[root@hspEdu100 opt]# source /etc/profile
[root@hspEdu100 opt]# echo $TMOCAT_HOME
:<<! !多行注释
history命令可以查看所有历史命令,记录的多少由用户环境变量中的HISTSIZE决定。n!显示第n条命令
/etc/passwd:用户基础信息
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,他记录了这个用户的一些基本属性。这个文件对所有用户都是可读的。对安全性需求较高的Linux系统都把加密后的口令字分离出来,独立存放在一个文件中,这个文件是/etc/shadow文件。只有终极用户才拥有该文件读权限,这就确保了用户密码的安全性。
/etc/shadow:用户密码
/etc/shadow中的记录行和/etc/passwd中的一一对应,他由pwconv命令根据/etc/passwd中的数据自动产生。他的文件格式和/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
(1)“登录名”是和/etc/passwd文件中的登录名相一致的用户账号
(2)“口令”字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不必口令;如果含有不属于集合{ ./0-9A-Za-z }中的字符,则对应的用户不能登录。
(3)“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不相同。例如在SCO Linux中,这个时间起点是1970年1月1日。
(4)“最小时间间隔”指的是两次修改口令之间所需的最小天数。
(5)“最大时间间隔”指的是口令保持有效的最大天数。
(6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
(7)“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
(8)“失效时间”字段给出的是个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是个合法的账号,也就不能再用来登录了。
/etc/group:用户组信息
用户组的所有信息都存放在/etc/group文件中
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。每个用户都属于某个用户组;一个组中能有多个用户,一个用户也能属于不同的组。当 一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。用户要访问属 于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。用户组的所有信息都存放在/etc/group文件中。此文件的格式也 类似于/etc/passwd文件,由冒号隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表
(1)“组名”是用户组的名称,由字母或数字构成。和/etc/passwd中的登录名相同,组名不应重复。
(2)“口令”字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或是*。
(3)“组标识号”和用户标识号类似,也是个整数,被系统内部用来标识组。
urce /etc/profile [root@hspEdu100 opt]# echo $TMOCAT_HOME
:<<! !多行注释
history命令可以查看所有历史命令,记录的多少由用户环境变量中的HISTSIZE决定。n!显示第n条命令
# /etc/passwd:用户基础信息
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,他记录了这个用户的一些基本属性。这个文件对所有用户都是可读的。对安全性需求较高的Linux系统都把加密后的口令字分离出来,独立存放在一个文件中,这个文件是/etc/shadow文件。只有终极用户才拥有该文件读权限,这就确保了用户密码的安全性。
# /etc/shadow:用户密码
/etc/shadow中的记录行和/etc/passwd中的一一对应,他由pwconv命令根据/etc/passwd中的数据自动产生。他的文件格式和/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
(1)“登录名”是和/etc/passwd文件中的登录名相一致的用户账号
(2)“口令”字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不必口令;如果含有不属于集合{ ./0-9A-Za-z }中的字符,则对应的用户不能登录。
(3)“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不相同。例如在SCO Linux中,这个时间起点是1970年1月1日。
(4)“最小时间间隔”指的是两次修改口令之间所需的最小天数。
(5)“最大时间间隔”指的是口令保持有效的最大天数。
(6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
(7)“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
(8)“失效时间”字段给出的是个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是个合法的账号,也就不能再用来登录了。
# /etc/group:用户组信息
用户组的所有信息都存放在/etc/group文件中
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段。每个用户都属于某个用户组;一个组中能有多个用户,一个用户也能属于不同的组。当 一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。用户要访问属 于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。用户组的所有信息都存放在/etc/group文件中。此文件的格式也 类似于/etc/passwd文件,由冒号隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表
(1)“组名”是用户组的名称,由字母或数字构成。和/etc/passwd中的登录名相同,组名不应重复。
(2)“口令”字段存放的是用户组加密后的口令字。一般Linux系统的用户组都没有口令,即这个字段一般为空,或是*。
(3)“组标识号”和用户标识号类似,也是个整数,被系统内部用来标识组。
(4)“组内用户列表”是属于这个组的所有用户的列表,不同用户之间用逗号“,”分隔。这个用户组可能是用户的主组,也可能是附加组。
|