linux reboot函数_linux

  • 常见的Linux系统版本
    • 红帽企业系统(RedHatEnterpriseLinux,RHEL.):红帽公司是全球最大的开源技术厂商,RHEL是全世界内使用最广泛的Linux系统。
    • 社区企业操作系统(Community Enterprise Operating System,CentOS):通过把RHEL系统重新编译并发布给用户免费使用的Linux系统,具有广泛的使用人群。CentOS当前已被红帽公司“收编”。
    • Fedora:由红帽公司发布的桌面版系统套件(目前已经不限于桌面版)。用户可免费体验到最新的技术或工具,这些技术或工具在成熟后会被加入到RHEL系统中,因此Fedora也称为RHEL系统的“试验田”。
    • openSUSE:源自德国的一款著名的Linux系统,在全球范围内有着不错的声誉及市场占有率。
    • Gentoo:具有极高的自定制性,操作复杂,因此适合有经验的人员使用。
    • Debian:稳定性、安全性强,提供了免费的基础支持,可以良好地支持各种硬件架构,以及提供近十万种不同的开源软件,在国外拥有很高的认可度和使用率。
    • Ubuntu:是一款派生自Debian的操作系统,对新款硬件具有极强的兼容能力。
  • Centos7重置root用户密码
    • 第1步:重启Linux系统主机并出现引导界面时,按下键盘上的e键进入内核编辑界面

e4060d6a397dec1eaa18f13481b259ec.png
    • 第2步:在linux16参数这行的最后面追加“rd.break”参数,然后按下Ctrl + X组合键来运行修改过的内核程序

1b63e772ec8bd9d527469d56c21ce5dc.png
    • 第3步:大约30秒过后,进入到系统的紧急求援模式

6b316f418ed262c84e86c1439cecbcac.png
    • 第4步:依次输入以下命令,等待系统重启操作完毕,然后就可以使用新密码linuxprobe来登录Linux系统了。
mount -o remount,rw /sysroot
chroot /sysroot
passwd
touch /.autorelabel
exit
reboot
  • RPM红帽软件包
安装软件的命令格式	rpm -ivh filename.rpm
升级软件的命令格式	rpm -Uvh filename.rpm
卸载软件的命令格式	rpm -e filename.rpm
查询软件描述信息的命令格式	rpm -qpi filename.rpm
列出软件文件信息的命令格式	rpm -qpl filename.rpm
查询文件属于哪个RPM的命令格式	rpm -qf filename
  • Yum软件仓库
    • 尽管RPM能够帮助用户查询软件相关的依赖关系,但问题还是要运维人员自己来解决,而有些大型软件可能与数十个程序都有依赖关系,在这种情况下安装软件会是非常痛苦的。Yum软件仓库便是为了进一步降低软件安装难度和复杂度而设计的技术。Yum软件仓库可以根据用户的要求分析出所需软件包及其相关的依赖关系,然后自动从服务器下载软件包并安装到系统。
yum repolist all	列出所有仓库
yum list all	列出仓库中所有软件包
yum info 软件包名称	查看软件包信息
yum install 软件包名称	安装软件包
yum reinstall 软件包名称	重新安装软件包
yum update 软件包名称	升级软件包
yum remove 软件包名称	移除软件包
yum clean all	清除所有仓库缓存
yum check-update	检查可更新的软件包
yum grouplist	查看系统中已经安装的软件包组
yum groupinstall 软件包组	安装指定的软件包组
yum groupremove 软件包组	移除指定的软件包组
yum groupinfo 软件包组	查询指定的软件包组信息
  • Systemd初始化进程
    • Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。红帽RHEL 7系统已经替换掉了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。无论怎样,RHEL 7系统选择systemd初始化进程服务已经是一个既定事实,因此也没有了“运行级别”这个概念。systemd用目标(target)代替了System V init中运行级别的概念
System V init运行级别	systemd目标名称	        作用
0	runlevel0.target, poweroff.target	关机
1	runlevel1.target, rescue.target  	单用户模式
2	runlevel2.target, multi-user.target	等同于级别3
3	runlevel3.target, multi-user.target	多用户的文本界面
4	runlevel4.target, multi-user.target	等同于级别3
5	runlevel5.target, graphical.target	多用户的图形界面
6	runlevel6.target, reboot.target	        重启
emergency	       emergency.target	        紧急Shell
    • 如果想要将系统默认的运行目标修改为“多用户,无图形”模式,可直接用ln命令把多用户模式目标文件连接到/etc/systemd/system/目录:
[root@linuxprobe ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
systemctl start foo.service	启动服务
systemctl restart foo.service	重启服务
systemctl stop foo.service	停止服务
systemctl reload foo.service	重新加载配置文件(不终止服务)
systemctl status foo.service	查看服务状态
systemctl enable foo.service	开机自动启动
systemctl disable foo.service	开机不自动启动
systemctl is-enabled foo.service	查看特定服务是否为开机自启动
systemctl list-unit-files --type=service	查看各个级别下服务的启动与禁用情况
  • Linux系统的内核负责完成对硬件资源的分配、调度等管理任务。
  • echo:echo命令用于在终端输出字符串或变量提取后的值,格式为“echo [字符串 | $变量]”。
[root@linuxprobe ~]# echo $SHELL
/bin/bash
  • date:date命令用于显示及设置系统的时间或日期,格式为“date [选项] [+指定的格式]”。
  %A    当前locale 的星期名全称 (如:星期日)
  %c    当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
  %d    按月计的日期(例如:01)
  %H    小时(00-23)
  %I    小时(00-12)
  %j    按年计的日期(001-366)
  %m    月份 (01..12)
  %M    分钟 (00..59)
  %S    秒(00-60)
  %W    一年中的第几周,以周一为每星期第一天(00-53)
  %Y    年份

##将系统的当前时间设置为2017年9月1日8点30分的date命令如下所示:
[root@linuxprobe ~]# date -s "20170901 8:30:00"
Fri Sep 1 08:30:00 CST 2017
  • reboot:重启系统,其格式为reboot。
  • poweroff:关闭系统,其格式为poweroff。
  • wget:在终端中下载网络文件,格式为“wget [参数] 下载地址”。
参数	作用
-b	后台下载模式
-P	下载到指定目录
-t	最大尝试次数
-c	断点续传
-p	下载页面内所有资源,包括图片、视频等
-r	递归下载
  • ps:用于查看系统中的进程状态,格式为“ps [参数]”。
参数	作用
-a	显示所有进程(包括其他用户的进程)
-u	用户以及其他详细信息
-x	显示没有控制终端的进程

##在Linux系统中,有5种常见的进程状态,分别为运行、中断、不可中断、僵死与停止,其各自含义如下所示:
R(运行):进程正在运行或在运行队列中等待。
S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该   状态。
D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
T(停止):进程收到停止信号后停止运行。

当执行ps aux命令后通常会看到如表所示的进程状态,以下只是列举了部分输出值,而且正常的输出值中不包括中文注释。
USER	           PID	           %CPU             %MEM	       VSZ	                         RSS	                  TTY	          STAT	           START	     TIME	          COMMAND
进程的所有者	进程ID号	运算器占用率	内存占用率	虚拟内存使用量(单位是KB)	占用的固定内存量(单位是KB)	所在终端	进程状态	被启动的时间	实际使用CPU的时间	命令名称与参数
root	           1	           0.0	             0.4	       53684	                        7628	                   ?	           Ss	            07:22	     0:02	        /usr/lib/systemd/systemd
root	           2	           0.0	             0.0	         0	                          0	                   ?	            S	            07:22	     0:00	        [kthreadd]
root	           3	           0.0	             0.0	         0	                          0	                   ?	            S	            07:22	     0:00	        [ksoftirqd/0]
root	           5	           0.0	             0.0	         0	                          0	                   ?	            S<	            07:22	     0:00	        [kworker/0:0H]
root	           7	           0.0	             0.0	         0	                          0	                   ?	            S	            07:22	     0:00	        [migration/0]
  • top:用于动态地监视进程活动与系统负载等信息,其格式为top。

bcc833ae1d80f86a5676a11c066c9eac.png

第1行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。

第2行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

第3行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,例如“97.1 id”意味着有97.1%的CPU处理器资源处于空闲。

第4行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。

第5行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。

  • pidof:用于查询某个指定服务进程的PID值,格式为“pidof [参数] [服务名称]”。
[root@linuxprobe ~]# pidof sshd
2156
  • kill:用于终止某个指定PID的服务进程,格式为“kill [参数] [进程PID]”。
[root@linuxprobe ~]# kill 2156
  • killall:用于终止某个指定名称的服务所对应的全部进程,格式为:“killall [参数] [服务名称]”。
[root@linuxprobe ~]# pidof httpd
13581 13580 13579 13578 13577 13576
[root@linuxprobe ~]# killall httpd
[root@linuxprobe ~]# pidof httpd
  • ifconfig:用于获取网卡配置与网络状态等信息,格式为“ifconfig [网络设备] [参数]”。
    • 其实主要查看的就是网卡名称、inet参数后面的IP地址、ether参数后面的网卡物理地址(又称为MAC地址),以及RX、TX的接收数据包与发送数据包的个数及累计流量
[root@linuxprobe ~]# ifconfig
eno16777728: flags=4163  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::20c:29ff:fec4:a409  prefixlen 64  scopeid 0x20
        ether 00:0c:29:c4:a4:09  txqueuelen 1000  (Ethernet)
        RX packets 36  bytes 3176 (3.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 38  bytes 4757 (4.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • uname:用于查看系统内核与系统版本等信息,格式为“uname [-a]”。
[root@linuxprobe ~]# uname -a
Linux linuxprobe.com 3.10.0-123.el7.x86_64 #1 SMP Mon May 5 11:16:57 EDT 2017 x86_64 x86_64 x86_64 GNU/Linux
  • uptime:用于查看系统的负载信息,格式为uptime。
[root@linuxprobe ~]# uptime
22:49:55 up 10 min, 2 users, load average: 0.01, 0.19, 0.18
  • free:用于显示当前系统中内存的使用量信息,格式为“free [-h]”。
             内存总量	已用量	可用量	进程共享的内存量	磁盘缓存的内存量	缓存的内存量
             total	used	  free	    shared	            buffers	           cached
Mem:	     1.8G	1.3G	  542M	     9.8M	             1.6M	            413M
-/+ buffers/cache:	869M	  957M			
Swap:	      2.0G       0B	  2.0G		
  • who:用于查看当前登入主机的用户终端信息,格式为“who [参数]”。
  • last:用于查看所有系统的登录记录,格式为“last [参数]”。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!
  • history:用于显示历史执行过的命令,格式为“history [-c]”。执行history命令能显示出当前用户在本地计算机中执行过的最近1000条命令记录。如果觉得1000不够用,还可以自定义/etc/profile文件中的HISTSIZE变量值。在使用history命令时,如果使用-c参数则会清空所有的命令历史记录。还可以使用“!编码数字”的方式来重复执行某一次的命令。历史命令会被保存到用户家目录中的.bash_history文件中。Linux系统中以点(.)开头的文件均代表隐藏文件,这些文件大多数为系统服务文件,可以用cat命令查看其文件内容。要清空当前用户在本机上执行的Linux命令历史记录信息,可执行如下命令:
[root@linuxprobe ~]# history -c
  • sosreport:用于收集系统配置及架构信息并输出诊断文档,格式为sosreport。当Linux系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。
  • pwd:用于显示用户当前所处的工作目录,格式为“pwd [选项]”。
  • cd:用于切换工作路径,格式为“cd [目录名称]”。用“cd -”命令返回到上一次所处的目录,使用“cd..”命令进入上级目录,以及使用“cd ~”命令切换到当前用户的家目录,亦或使用“cd ~username”切换到其他用户的家目录。
  • ls:用于显示目录中的文件信息,格式为“ls [选项] [文件] ”。
  • cat:用于查看纯文本文件(内容较少的),格式为“cat [选项] [文件]”。
  -n, --number             对输出的所有行编号
  • more:用于查看纯文本文件(内容较多的),格式为“more [选项]文件”。空格键向下翻页,b向上翻页。
  • head:用于查看纯文本文档的前N行,格式为“head [选项] [文件]”。
[root@linuxprobe ~]# head -n 20  initial-setup-ks.cfg 
  • tail:用于查看纯文本文档的后N行或持续刷新内容,格式为“tail [选项] [文件]”。
[root@linuxprobe ~]# head -n 20  -f initial-setup-ks.cfg    ##-f表示持续刷新一个文件的内容,实时输出
  • tr:用于替换文本文件中的字符,格式为“tr [原始字符] [目标字符]”。
[root@linuxprobe ~]# cat anaconda-ks.cfg | tr [a-z] [A-Z] ##把文本内容中的英文全部替换为大写
  • wc:用于统计指定文本的行数、字数、字节数,格式为“wc [参数] 文本”。
参数	作用
-l	只显示行数
-w	只显示单词数
-c	只显示字节数
  • stat:用于查看文件的具体存储信息和时间等信息,格式为“stat 文件名称”。
    stat命令可以用于查看文件的存储信息和时间等信息,命令stat anaconda-ks.cfg会显示出文件的三种时间状态(已加粗):Access、Modify、Change。

Linux下的三个时间:

1. Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间

2. Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。

3. Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

  • touch:用于创建空白文件或设置文件的时间,格式为“touch [选项] [文件]”。
参数	作用
-a	仅修改“读取时间”(atime)
-m	仅修改“修改时间”(mtime)
-d	同时修改atime与mtime
  • cut:用于按“列”提取文本字符,格式为“cut [参数] 文本”。
[root@node11 tmp]# cut -d : -f 1 /etc/passwd
root
bin
daemon
adm
  • diff:用于比较多个文本文件的差异,格式为“diff [参数] 文件”。
[root@node11 tmp]# diff -q a.txt b.txt 
文件 a.txt 和 b.txt 不同
##可使用-c参数来描述文件内容具体的不同。
  • mkdir:用于创建空白的目录,格式为“mkdir [选项] 目录”。
    • 结合-p参数来递归创建出具有嵌套叠层关系的文件目录。
  • cp:用于复制文件或目录,格式为“cp [选项] 源文件 目标文件”。
参数	作用
-p	保留原始文件的属性
-d	若对象为“链接文件”,则保留该“链接文件”的属性
-r	递归持续复制(用于目录)
-i	若目标文件存在则询问是否覆盖
-a	相当于-pdr(p、d、r为上述参数)
  • mv:用于剪切文件或将文件重命名,格式为“mv [选项] 源文件 [目标路径|目标文件名]”。
  • rm:rm命令用于删除文件或目录,格式为“rm [选项] 文件”。
  • dd:用于按照指定大小和个数的数据块来复制文件或转换文件,格式为“dd [参数]”。
    • dd命令是一个比较重要而且比较有特色的一个命令,它能够让用户按照指定大小和个数的数据块来复制文件的内容。当然如果愿意的话,还可以在复制过程中转换其中的数据。Linux系统中有一个名为/dev/zero的设备文件,这个文件不会占用系统存储空间,但却可以提供无穷无尽的数据,因此可以使用它作为dd命令的输入文件,来生成一个指定大小的文件。(主要的用处是用来创建一个指定长度用于初始化的空文件,像临时交换文件)
参数	作用
if	输入的文件名称
of	输出的文件名称
bs	设置每个“块”的大小
count	设置要复制“块”的个数

##生成一个1G大小的空文件
[root@node11 tmp]# dd if=/dev/zero of=./test.mp4 bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,0.928118 秒,1.2 GB/秒

dd命令的功能也绝不仅限于复制文件这么简单。如果您想把光驱设备中的光盘制作成iso格式的镜像文件,在Windows系统中需要借助于第三方软件才能做到,但在Linux系统中可以直接使用dd命令来压制出光盘镜像文件,将它变成一个可立即使用的iso镜像

[root@linuxprobe ~]# dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso
7311360+0 records in
7311360+0 records out
3743416320 bytes (3.7 GB) copied, 370.758 s, 10.1 MB/s
  • file:用于查看文件的类型,格式为“file 文件名”。
  • tar:用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”。
参数	作用
-c	创建压缩文件
-x	解开压缩文件
-t	查看压缩包内有哪些文件
-z	用Gzip压缩或解压
-j	用bzip2压缩或解压
-v	显示压缩或解压的过程
-f	目标文件名
-p	保留原始的权限与属性
-P	使用绝对路径来压缩
-C	指定解压到的目录

  • grep:用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项] [文件]”。
参数	作用
-b	将可执行文件(binary)当作文本文件(text)来搜索
-c	仅显示找到的总行数
-i	忽略大小写
-n	显示行号
-v	反向选择——仅列出没有“关键词”的行。
  • find:用于按照指定条件来查找文件,格式为“find [查找路径] 寻找条件 操作”。
参数	作用
-name	匹配名称
-perm	匹配权限(mode为完全匹配,-mode为包含即可)
-user	匹配所有者
-group	匹配所有组
-mtime -n +n	匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n	匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n	匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser	匹配无所有者的文件
-nogroup	匹配无所有组的文件
-newer f1 !f2	匹配比文件f1新但比f2旧的文件
--type b/d/c/p/l/f	匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size	匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune	忽略某个目录
-exec …… {};	后面可跟用于进一步处理搜索结果的命令(下文会有演示)

-exec这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但依然只需要一个减号(-)。

##该实验的重点是“-exec {}   ;”参数,其中的{}表示find命令搜索出的每一个文件,并且命令的结尾必须是“;”。完成该实验的具体命令如下:
[root@linuxprobe ~]# find / -user linuxprobe -exec cp -a {} /root/findresults/ ;
  • 输入输出重定向:输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。
符号	作用
命令 < 文件	将文件作为命令的标准输入
命令 << 分界符	从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2	将文件1作为命令的标准输入并将标准输出到文件2

命令 > 文件	将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件	将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件	将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件	将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 
或
命令 &>> 文件	将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
  • 管道命令符:把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入。
[root@linuxprobe ~]# ls -l /etc/ | more

在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和passwd命令的--stdin参数相结合,我们可以用一条命令来完成密码重置操作:

[root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.


##root用户给自己发送邮件
[root@localhost Desktop]# echo "Content" | mail -s "Subject" root
[root@localhost Desktop]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 6 messages 6 new
>N  1 root                  Fri Aug  2 03:06  18/609   "Subject"
  • 命令行的通配符:
    • 星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。
  • 常用的转义字符:
反斜杠():使反斜杠后面的一个变量变为单纯的字符串。
单引号(''):转义其中所有的变量为单纯的字符串。
双引号(""):保留其中的变量属性,不进行转义处理。
反引号(``):把其中的命令执行后返回结果。
  • 重要的环境变量:
命令在Linux中的执行分为4个步骤:
第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
第2步:Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用alias命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。若要取消一个命令别名,则是用unalias命令,格式为“unalias 别名”。我们之前在使用rm命令删除文件时,Linux系统都会要求我们再确认是否执行删除操作,其实这就是Linux系统为了防止用户误删除文件而特意设置的rm别名命令,接下来我们把它取消掉:
[root@linuxprobe ~]# ls
anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates
Desktop Downloads Music Public Videos
[root@linuxprobe ~]# rm anaconda-ks.cfg 
rm: remove regular file ‘anaconda-ks.cfg’? y
[root@linuxprobe~]# alias rm
alias rm='rm -i'
[root@linuxprobe ~]# unalias rm
[root@linuxprobe ~]# rm initial-setup-ks.cfg 
[root@linuxprobe ~]#
第3步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令。
第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。

   Linux系统中最重要的10个环境变量

变量名称	作用
HOME	用户的主目录(即家目录)
SHELL	用户在使用的Shell解释器名称
HISTSIZE	输出的历史命令记录条数
HISTFILESIZE	保存的历史命令记录条数
MAIL	邮件保存路径
LANG	系统语言、语系名称
RANDOM	生成一个随机数字
PS1	Bash解释器的提示符
PATH	定义解释器搜索用户执行命令的路径
EDITOR	用户默认的文本编辑器

[root@linuxprobe ~]# mkdir /home/workdir
[root@linuxprobe ~]# WORKDIR=/home/workdir
[root@linuxprobe ~]# cd $WORKDIR 
[root@linuxprobe workdir]# pwd
/home/workdir
[root@linuxprobe ~]# export WORKDIR

但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。如果工作需要,可以使用export命令将其提升为全局变量,这样其他用户也就可以使用它了,但是系统重启后将消失,若想永久保留该环境变量,需要在/etc/profile文件中定义。

  • Vim文本编辑器:
命令	作用
dd	删除(剪切)光标所在整行
5dd	删除(剪切)从光标处开始的5行
yy	复制光标所在整行
5yy	复制从光标处开始的5行
n	显示搜索命令定位到的下一个字符串
N	显示搜索命令定位到的上一个字符串
u	撤销上一步的操作
p	将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
a       在光标后插入数据
i       在光标前插入数据
o       在光标后新增一行插入数据

:w	保存
:q	退出
:q!	强制退出(放弃对文档的修改内容)
:wq!	强制保存退出
:set nu	显示行号
:set nonu	不显示行号
:命令	执行该命令
:整数	跳转到该行
:s/one/two	将当前光标所在行的第一个one替换成two
:s/one/two/g	将当前光标所在行的所有one替换成two
:%s/one/two/g	将全文中的所有one替换成two
?字符串	在文本中从下至上搜索该字符串
/字符串	在文本中从上至下搜索该字符串
  • 配置主机名称:
主机名大多保存在/etc/hostname文件中,接下来将/etc/hostname文件的内容修改为“node1”,步骤如下。

第1步:使用Vim编辑器修改“/etc/hostname”主机名称文件。
第2步:把原始主机名称删除后追加“node1”。注意,使用Vim编辑器修改主机名称文件后,要在末行模式下执行:wq!命令才能保存并退出文档。
第3步:保存并退出文档,然后使用hostname命令检查是否修改成功。
  • 配置网卡信息:
现在有一个名称为ifcfg-eno16777736的网卡设备,我们将其配置为开机自启动,并且IP地址、子网、网关等信息由人工指定,其步骤应该如下所示。
第1步:首先切换到/etc/sysconfig/network-scripts目录中(存放着网卡的配置文件)。
第2步:使用Vim编辑器修改网卡文件ifcfg-eno16777736,逐项写入下面的配置参数并保存退出。由于每台设备的硬件及架构是不一样的,因此请读者使用ifconfig命令自行确认各自网卡的默认名称。

设备类型:TYPE=Ethernet
地址分配模式:BOOTPROTO=static
网卡名称:NAME=eno16777736
是否启动:ONBOOT=yes
IP地址:IPADDR=192.168.10.10
子网掩码:NETMASK=255.255.255.0
网关地址:GATEWAY=192.168.10.1
DNS地址:DNS1=192.168.10.1

第3步:重启网络服务并测试网络是否联通。
  • 配置Yum仓库:
第1步:进入到/etc/yum.repos.d/目录中(因为该目录存放着Yum软件仓库的配置文件)。
第2步:使用Vim编辑器创建一个名为rhel7.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面加粗的配置参数并保存退出(不要写后面的中文注释)。

[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突。
name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处。
baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)。
enabled=1:设置此源是否可用;1为可用,0为禁用。
gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验。
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。

第3步:按配置参数的路径挂载光盘,并把光盘挂载信息写入到/etc/fstab文件中。
第4步:使用“yum repolist”命令检查Yum软件仓库是否已经可用。

##设置成开机自动挂载
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0
  • 编写Shell脚本:
脚本中实际上出现了三种不同的元素:
第一行的脚本声明(#!)用来告诉系统使用哪种Shell解释器来执行该脚本;
第二行的注释信息(#)是对脚本功能和某些命令的介绍信息,使得自己或他人在日后看到这个脚本内容时,可以快速知道该脚本的作用或一些警告信息;
第三、四行的可执行语句也就是我们平时执行的Linux命令了。

$0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值(返回0表示执行成功,否则失败),而$1、$2、$3……则分别对应着第N个位置的参数值

[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
[root@linuxprobe ~]# sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。
  • 测试语句:格式为“[ 测试表达式 ]”。(注意:前后中括号和表达式之间都有一个空格)
按照测试对象来划分,条件测试语句可以分为4种:
1、文件测试语句;
2、逻辑测试语句;
3、整数值比较语句;
4、字符串比较语句。


操作符	作用
-d	测试文件是否为目录类型
-e	测试文件是否存在
-f	判断是否为一般文件
-r	测试当前用户是否有权限读取
-w	测试当前用户是否有权限写入
-x	测试当前用户是否有权限执行

-eq	是否等于
-ne	是否不等于
-gt	是否大于
-lt	是否小于
-le	是否等于或小于
-ge	是否大于或等于

=	比较字符串内容是否相同
!=	比较字符串内容是否不同
-z	判断字符串内容是否为空

[root@linuxprobe ~]# [ $USER != root ] && echo "user" || echo "root"
root
[root@linuxprobe ~]# [ 10 -gt 10 ]
[root@linuxprobe ~]# echo $?
1
  • 流程控制语句:
    • if条件测试语句
[root@node11 tmp]# vi if.sh
#!/bin/bash
##if tess
read -p "Enter Grade:" GRADE
if [ $GRADE -ge 85 ] ; then
 echo "greate"
elif [ $GRADE -ge 70 ] ; then
 echo 'pass'
else
 echo 'fail'
fi
    • for条件循环语句
[root@node11 tmp]# vi for.sh
#!/bin/bash
##test  for
for IP in `cat /tmp/ips.txt`
do
ping $IP -c 3 &>/dev/null
if [ $? -eq 0 ] ; then
echo "$IP is alive"
else
echo "$IP dead"
fi
done
    • while条件循环语句
[root@node11 tmp]# vi while.sh 
#!/bin/bash
##while test
PRICE=`expr $RANDOM % 1000`
TIME=0
while true
do
let TIME++
read -p "please input price:" GUESSPRICE
if [ $GUESSPRICE -gt $PRICE ] ; then
 echo 'too high'
elif [ $GUESSPRICE -lt $PRICE ]; then
 echo 'too low'
else
  echo "the price is $PRICE,and times is $TIME"
  exit 0
fi
done
    • case条件测试语句
[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
  • 计划任务服务程序
    • 一次性计划任务:
[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl+d来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
    • 长期性计划任务:在crond服务的计划任务参数中,所有命令一定要用绝对路径的方式来写,如果不知道绝对路径,请用whereis命令进行查询
[root@node11 tmp]# systemctl status crond   ##查看crontab服务情况

字段	说明
分钟	取值为0~59的整数
小时	取值为0~23的任意整数
日期	取值为1~31的任意整数
月份	取值为1~12的任意整数
星期	取值为0~7的任意整数,其中0与7均为星期日
命令	要执行的命令或程序脚本

[root@linuxprobe ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l
*/2 * * * 1,3,5 /bin/echo "helloworld"       ###每周一、三、五,每隔2分钟输出一个helloworld

需要说明的是,除了用逗号(,)来分别表示多个时间段,例如“8,9,12”表示8月、9月和12月。
还可以用减号(-)来表示一段连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。
以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
  • linux用户体系
    • 管理员UID为0:系统的管理员用户。
    • 系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
    • 普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
    • 创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组
  • useradd:用于创建新的用户,格式为“useradd [选项] 用户名”。
参数	作用
-d	指定用户的家目录(默认为/home/username)
-e	账户的到期时间,格式为YYYY-MM-DD.
-u	指定该用户的默认UID
-g	指定一个初始的用户基本组(必须已存在)
-G	指定一个或多个扩展用户组
-N	不创建与用户同名的基本用户组
-s	指定该用户的默认Shell解释器
  • groupadd:用于创建用户组,格式为“groupadd [选项] 群组名”。
  • usermod:用于修改用户的属性,格式为“usermod [选项] 用户名”。
参数	作用
-c	填写用户账户的备注信息
-d -m	参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e	账户的到期时间,格式为YYYY-MM-DD
-g	变更所属用户组
-G	变更扩展用户组
-L	锁定用户禁止其登录系统
-U	解锁用户,允许其登录系统
-s	变更默认终端
-u	修改用户的UID
  • passwd:用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。
参数	作用
-l	锁定用户,禁止其登录
-u	解除锁定,允许用户登录
--stdin	允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username
-d	使该用户可用空密码登录系统
-e	强制用户在下次登录时修改密码
-S	显示用户的密码是否被锁定,以及密码所采用的加密算法名称
  • userdel:用于删除用户,格式为“userdel [选项] 用户名”。
参数	作用
-f	强制删除用户
-r	同时删除用户及用户家目录
  • 文件权限与归属:Linux系统使用了不同的字符来加以区分,常见的字符如下所示
-:普通文件。
d:目录文件。
l:链接文件。
b:块设备文件。
c:字符设备文件。
p:管道文件。
  • 文件的特殊权限:在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID与SBIT的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。
    • SUID:

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。

[root@linuxprobe ~]# ls -l /etc/shadow
----------. 1 root root 1004 Jan 3 06:23 /etc/shadow
[root@linuxprobe ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29 2017 /bin/passwd
    • SGID:SGID的第一种功能是参考SUID而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。
    • 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
    • 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
[root@linuxprobe ~]# cd /tmp
[root@linuxprobe tmp]# mkdir testdir
[root@linuxprobe tmp]# ls -ald testdir/
drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/
[root@linuxprobe tmp]# chmod -Rf 777 testdir/
[root@linuxprobe tmp]# chmod -Rf g+s testdir/
[root@linuxprobe tmp]# ls -ald testdir/
drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/
[root@linuxprobe tmp]# su - linuxprobe
Last login: Wed Feb 11 11:49:16 CST 2017 on pts/0
[linuxprobe@linuxprobe ~]$ cd /tmp/testdir/
[linuxprobe@linuxprobe testdir]$ echo "linuxprobe.com" > test
[linuxprobe@linuxprobe testdir]$ ls -al test
-rw-rw-r--. 1 linuxprobe root 15 Feb 11 11:50 test
  • SBIT:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值