【体系】Linux-基础

0.序言

由于windows运行时间过长时其运行速度会减慢,需要重启才能解决问题,而Linux能够保持服务器长时间稳定的运行,故而Linux的学习就很有必要,该文章主要是熟悉Linux并学习书写shell脚本完成满足部署服务器和Jenkins脚本的配置任务。

1.Linux学习平台安装

Linux安装详情请见
辅佐工具Xshell下载地址
辅佐工具WinSCP下载地址

2.初学者注意事项

  • Linux中所有内容都是以文件形式进行保存和管理的,硬件设备也是文件。Linux设备文件保存在/dev/目录中,硬盘文件是/dev/sd[a-p],光盘文件是/dev/hdc等
  • Linux中不靠扩展名区分文件类型(大部分扩展名只是为了让文件更加便于观察而人为添加的,对于Linux系统而言没有任何意义)而是靠权限位标识来确定文件类型(Linux可执行文件只不过是普通文件被赋予可执行权限而已),常见文件类型只有普通文件、目录、链接文件、块设备文件、字符设备文件等几种。但是约定俗成Linux中一些特殊文件要写"扩展名"来帮助管理员区分不同文件类型,例如:1.压缩包:.gz,.bz2,.zip,.tar.gz,.tar.bz2,.tgz以分别压缩方式 2.二进制软件包:.rpm 3.程序文件:.sh .c .html
  • Linux中所有存储设备(如硬盘、U盘、光盘)都有自己的设备文件名,这些设备文件名必须在挂载(给设备分配盘符)之后才能使用。Linux中盘符是一个已经建立的空目录(即挂载点)。将设备文件(如/dev/sdb)和挂载点(已经建立的空目录)连接的过程叫做挂载
  • 计算机硬盘禁止在高速存储时断电或者重启,这样容易造成硬盘损坏。所以在重启前先中止服务,甚至断开网络。
  • 重启前建议执行几次"sync"命令(数据同步命令,可暂时将保存内存中的数据同步到硬盘中),然后建议使用"shutdown -r now"命令重启(重启时会正常保存和中止服务器中正在运行的程序)
  • 一般运维认为17:00~24:00算作访问高峰期。一般建议在凌晨4:00-5:00使用系统的计划任务执行高负载命令
  • 为了在远程配置防火墙时不把自己提出服务器,在远程配置服务器的时候先写一个系统定时任务,让它每5分钟清除一下防火墙规则,等测试通过了再删除该定时任务。
目录名目录作用
/bin/存放系统命令,普通和超级用户都可执行。是/usr/bin/目录软链接
/sbin/存放系统命令,只有超级用户才可以执行。是/usr/sbin/目录软链接
/usr/bin存放系统命令,普通和超级用户都可执行
/sbin存放系统命令,只有超级用户才可以执行
/boot/系统启动目录,保存于系统启动相关文件,如内核文件和启动引导程序grub文件等
/dev/设备文件保存位置
/etc/配置文件保存位置。系统内所有采用默认安装(rpm安装)服务配置文件都保存在此目录中,如用户信息、服务启动脚本、常用服务的配置文件等
/home/普通用户家目录。创建用户时,每个用户都有一个默认登录和保存自己数据位置就是家目录,所有普通用户宿主目录是/home/下建立的一个和用户名相同的目录。如用户user1的家目录就是/home/user1/
/lib/调用系统函数库保存位置。是/usr/lib的软链接
/lib/64位函数库保存位置。是/usr/lib的软链接
/lost+found当系统意外崩溃或者机器意外关机产生的文件碎片存放地址。在系统启动的时候fsck工具会检查这里修复已经损坏的文件系统。这个目录只在每个分区中出现,例如/boot/lost+found就是/boot分区的备份恢复目录
/media/挂载目录。系统建议用来挂载媒体设备,如软盘和光盘
/misc/挂载目录。系统建议用来挂载NFS服务的共享目录
/mnt/挂载目录。早期Linux只有这一个挂载目录。现系统建议用这个目录挂载额外设备,如U盘、移动硬盘和其他操作系统分区。但是常用/mnt/cdrom挂载光盘,/mnt/usb挂载U盘
/opt/第三方安装软件保存位置。这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录。不过还是习惯将软件放到/usr/local/目录中,也就是说,/usr/local/目录可以用来安装软件
/proc/虚拟文件系统。该目录中的数据不保存在硬盘而是内存,主要保存系统内核、进程、外部设备状态和网络状态等。如/proc/cpuinfo保存CPU信息的
/sys/虚拟文件系统。和/proc/目录相似,主要保存与内核相关的信息
/root/普通用户宿主目录在/home/下,root宿主目录直接在"/"下
/run/系统运行时产生的数据。/var/run/是次目录的软链接
/srv/服务器数据目录。一些服务启动后,可以在这个目录中保存所有需要的数据
/tmp/临时目录。系统存放临时文件的目录。所有用户都可以访问和写入。不建议存放重要数据,最好每次开机都将该目录清空
/usr/系统软件目录。“UNIX Software Resource” 缩写,存放系统软件资源的目录。系统中安装的软件大多数保存在这里
/usr/lib应用程序调用的函数库保存位置
/usr/local手工安装软件保存位置。一般建议源码包软件安装在这个位置
/usr/share应用程序资源文件保存位置,如帮助文档、说明文档和字体目录
/usr/src/源码包存放的位置。手工下载的源码包和内核源码包都可以保存在这里。不过更习惯吧手工下载的源码包保存到/usr/local/src/目录中,把内核源码保存到/usr/src/kernels/目录中
/usr/src/kernels/内核源码保存位置
/var/动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件
/var/www/html/RPM包安装的Apache的网页主目录
/var/lib程序运行中需要调用或改变的数据保存位置。如MySQL数据库保存在/var/lib/mysql.目录中
/var/log系统日志保存位置
/var/run一些服务和程序运行后,它们的PID(进程ID) 保存的位置。是/run/目录的软链接
/var/spool/放置队列数据的目录。就是排队等待其他程序使用的数据,比如邮件队列和打印队列
/var/spool/ mail/新收到的邮件队列保存位置
/var/spool/cron/系统定时任务队列保存位置

3.基本命令

命令提示符
在这里插入图片描述
命令的基本格式
在这里插入图片描述
目录操作命令
ls(list /bin/list 显示目录下内容) -a 显示隐藏文件 --color=always/auto/none 显示提示色 -d 显示目录信息 -h转化字节单位 -i显示文件i节点号 -l长格式显示
cd(change directory shell内置命令 切换所在目录) ~用户家目录 -上次所在目录 .当前目录 …上级目录
pwd(print name of working directory /bin/pwd 查询所在的工作目录)
mkdir(make directories /bin/mkdir 创建空目录) -p递归创建所需目录
: rmdir(remove empty directories /bin/rmdir 删除空目录) -p递归删除目录(一般不使用该命令)
文件操作命令
touch(change file timestamps /bin/touch 创建空文件或修改文件时间)
stat(display file or file system status /usr/bin/stat 显示文件或文件系统的详细信息)
cat(concatenate files and print on the standard output /bin/cat 合并文件并打印输出到标准输出) -A即-vET,列出所有隐藏符号 -n显示行号
more(file perusal filter for crt viewin /bin/more 分屏显示文件内容) 空格下翻 b上翻 回车键向下滚动一行 /字符串搜索指定字符串 q退出
less(opposite of more /usr/bin/less 分行显示)
tail(output the last part of files /usr/bin/tail 显示文件结尾内容) -n显示行数量 -f监听文件(同步显示)
ln(make links between file /bin/ln 在文件之间建立链接) -s建立软链接 -f强制。如果目标文件已存在则删除目标文件后再建立链接
硬链接:两文件inode相同;标记不清不建议使用;不能链接目录;不能跨分区
软链接:两文件inode不同,其inode保存的是源文件的inode节点号;作用相当于快捷方式;软链接一定要写绝对路径;软链接可以链接目录;软链接可以跨分区;软链接特征明显建议使用;
在这里插入图片描述
目录和文件都能操作的命令
rm(remove files or directories /bin/rm 删除文件或目录) -f(force)强制删除 -i交互删除 -r递归删除
cp (copy files and directories /bin/cp 复制文件和目录) -a相当于-dpr -d如果源文件为软链接(对硬链接无效),则复制出来的目标文件也为软链接 -i交互复制 -p目标文件保留源文件属性 -r递归复制(复制目录)
mv(move/rename files /bin/mv 移动文件或改名) -f强行覆盖 -i交互移动 -v显示详细信息
基本权限管理
chmod(change file mode bits /bin/chmod 修改文件权限模式) -R递归设置权限(给子目录中的所有文件设置权限)
chown(change file owner and group /bin/chown 修改文件所有者和所属组)-R递归设置权限(给子目录中所有文件设置权限)
普通用户不能修改文件的所有者,包括文件的所有者;普通用户可以修改自己文件的权限
chgrp(change group ownership /bin/chgrp 修改文件和目录的所属组)
umask(默认权限) -S用字母表示文件和目录的初始权限(文件最大权限为666,执行对文件来讲太危险只能手工赋予;目录最大权限为777)
在这里插入图片描述
用户身份赋值方式权限数字权限常用权限
u:代表所有者+:加入权限r:读取权限4代表读权限644代表所属者具有读写权限,组和其他只读权限
g:代表所属组-:减去权限w:写入权限2代表写权限755代表所属者具有读写执行权限,组和其他只有读和执行权限
o:代表其他人=:设置权限x:执行权限1代表执行权限
a:代表全部身份

在这里插入图片描述

符号第1位含义
-普通文件
b块设备文件。特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1
c字符设备文件。特殊设备文件,输入设备都是这种文件,如鼠标,键盘
d目录文件
l软链接文件
p管道符文件
s套接字文件
符号第2-4,5-7,8-10位含义
rred,读权限
wwrite,写权限
eexecute,执行权限
-没有权限
权限文件目录常用权限
r可使用文件查看命令(cat等)看到文件内容可以用目录查看命令(ls等)查看目录下有哪里子文件和子目录0:任何权限都不赋予
w可以使用文件编辑命令(echo等)修改文件内容可以用目录编辑命令(touch等)修改目录下的数据,也就是新建/删除/剪切/复制子文件或目录5:浏览和进入权限
x可以执行该文件代表可以用cd命令进入目录7:完全权限
帮助命令
man(format and display the on-line manual pages /usr/bin/man 显示联机帮助手册)常用
info(命令的帮助信息是一套完整的资料,每个命令帮助信息只是这套完整资料的某一小章节)
help只能获取Shell内置命令的帮助,可以使用type命令区分内置命令与外部命令
–help查看帮助,输出帮助信息基本上是man命令的信息简要版
搜索命令
whereis(/usr/bin/whereis 查找命令位置和帮助文档位置)
which(/usr/bin/which 查找命令位置和别名)
locate(/usr/bin/locate 按文件名搜索文件,搜素利用数据库速度快消耗资源少,数据库位置/var/lib/mlocate/mlocate.db,可使用updatedb强制更新数据库,可更改其配置文件得到相应功能/etc/updatedb.conf)
find(/bin/find 可按照文件名、文件大小和、权限、所有者和所属组、文件类型和修改时间搜索)-a逻辑与 -o逻辑或 -not 逻辑非 用于过滤查询结果 -exec 命令2 将find命令处理的结果交由命令2处理 -ok交互式的exec
grep(在文件中提取和匹配符合条件的字符串行) -i忽略大小写 -n输出行号 -v反向查找 --color=auto搜索出的关键字用颜色显示
命令1|命令2 命令1的正确输出(文件中的字符串)作为命令2的操作对象
alias(命令的别名) alias查询 alias 别名='原命令’设置命令别名 想要永久生效需写入环境配置文件~/.bashrc
通配符(用于匹配文件名,完全匹配,find命令采用)作用
?匹配一个任意字符
*匹配任意多个任意字符,也就是可以匹配任意内容
[]匹配括号中任意一个字符
[-]匹配一个任意字符,-代表一个范围
[^]匹配不是中括号内的一个字符
正则符(用于匹配字符串,模糊匹配,grep命令采用)作用
?匹配前一个字符重复0次或1次(?是扩展正则,需要使用egrep命令)
*匹配前一个字符重复0次或者任意多次
[]匹配中括号中任意一个字符
[-]匹配中括号中任意一个字符,-代表一个范围
[^]匹配不是中括号内的一个字符
^匹配行首
$匹配行尾
常用快捷键作用
Tab命令或文件补全
ctrl+A将光标移动到命令开头
ctrl+E将光标移动到命令结尾
ctrl+C强制终止当前命令
ctrl+L清屏
ctrl+U删除或剪切光标之前命令
ctrl+Y粘贴Ctrl+U剪切的内容
压缩和解压命令

zip(/usr/bin/zip 压缩文件或目录) 格式:zip 压缩包名 源文件或目录 -r递归

unzip(/usr/bin/zip 解压缩)格式:unzip -d (指定解压缩位置) ana.zip

gzip(/bin/gzip 压缩文件或目录).gz格式是linux中常用压缩格式 -c输出压缩二进制文件,主要用于在压缩同时不删除源文件 -d解压缩 -r压缩目录中的文件

gunzip(/bin/gunzip 解压缩)

bzip2(/usr/bin/bzip2 压缩文件,不能压缩目录).bz2格式也是linux中的压缩格式 -d:解压缩 -k:压缩时保留源文件 -v显示压缩详细信息

bunzip2(/usr/bin/bunzip2解压命令)

tar(/bin/tar 打包与解打包命令) -c打包 -f指定压缩包的名称 -v显示打包过程 -x解打包 -t测试,不解打包,只查看包中有哪些文件 -C指定解打包位置
使用tar命令直接打包压缩:tar -z压缩和解压缩.tar.gz格式 -j压缩和解压缩.tar.bz2格式
在这里插入图片描述
在这里插入图片描述

关机和重启命令

sync(/bin/sync) 刷新文件系统缓存区

shutdown(/sbin/shutdown) 关机和重启 -c取消已经执行的shutdown命令

reboot重启

halt和poweroff命令都是关机命令。但是不会完全关闭和保存系统服务,不建议使用

init是修改Linux运行级别的命令,也可以用于关机(init 0)和重启(init 6)。但是并不安全,不建议使用

常用网络命令

配置IP地址1)setup工具 2)vi /etc/sysconfig/network-scripts/ifcfg-eth0

重启网络服务 service network restart

ifconfig(configure a network interface /sbin/ifconfig 配置网络接口) 主要用来查看IP地址信息,直接输入ifconfig命令即可
在这里插入图片描述

ping(/bin/ping 向网络主机发送ICMP请求)是常用网络命令,主要通过ICMP协议进行网络探测,测试网络中主机的通信情况

netstat(/bin/netstat 网络状态查看命令,既可以看到本机开启的端口,也可以看到有哪些客户端连接)在CentOSetup7.x中netstat命令默认没有安装,需要安装net-snmp和net-tools软件包-tuln查看开启的端口 -tulnp查看本机有哪些程序开启端口 -an查看所有连接

write(/usr/bin/write 向其他指定用户发送消息)

wall给所有登录用户发送消息

mail(/bin/mail 发送和接收电子邮件)

系统痕迹命令

w命令(/usr/bin/w)是显示正在登录的用户信息命令,查看的痕迹日志是/var/run/utemp,who命令和w命令相似不过显示内容更加简单

lat命令查看系统所有登录过的用户信息,包括登录用户和之前登录用户,查看的是/var/log/wtmp
lastlog命令查看系统中所有用户最后一次登录时间的命令,查看的日志是/var/log/lastlog文件

lastb命令查看错误登录的信息,查看的是/var/log/btmp痕迹日志

挂载命令

mount(/bin/mount linux所有存储设备都必须挂载使用,包括硬盘)

直接回车:查询系统中已经有的挂载设备
umount 设备文件名/挂载点 :LInux中使用完设备之后一定要卸载

CentOS 5.x以前系统光盘设备文件名是/dev/hdc,CentOS6.x之后的系统光盘设备文件名是/dev/sr0,无论哪个系统都有软链接/dev/cdrom,与可以作为光盘的设备文件名

U盘会和硬盘共用设备文件名,所以U盘的设备文件名不是固定的,需要手工查询fdisk -l(查询硬盘) mount -t vfat进行挂载 mount -a根据配置文件/etc/fstab的内容自动挂载(""Linux中表示换行)

挂载NTFS分区

4.vim基本使用方法

  • vim工作模式:

vim工作模式图

  • 命令模式到输入模式的方法:
命令作用
a在光标所在字符后插入
A在光标所在行尾插入
i在光标所在字符前插入
I在光标所在行首插入
o在光标下插入新行
O在光标上插入新行
  • 末行模式:
命令作用
:w保存不退出
: w 新文件名把文件另存为新文件
:q不保存退出
:wq保存退出
: !强制
:q!强制不保存退出。用于修改文件后不保存数据退出
:wq!强制保存退出。当文件的所有者或者root用户,对文件没有写权限的时候,强制写入数据使用
  • 命令行模式操作:
效果操作
移动光标方向键或者h、j、k、l键 ;gg移动到文件头、G移动到文件尾 ;移动到行首,$移动到行尾 ;n移动到第n行
删除或剪切x删除单个字母 ;nx删除n个字母 ;dd删除单行 ;ndd删除n行 ;:n1,n2d删除指定范围的行 ;dG从光标所在行删除到文件尾
复制yy复制单行 ;nyy复制n行
粘贴p粘贴到光标后 ;P粘贴到光标前
撤销u撤销 ;ctrl+r反撤销
替换r替换光标所在处字符 ;R从光标所在处开始替换字符,按ESC结束;:1,10s/old/new/g 替换1到10行所有old为new;:%s/old/new/g 替换整个文件的old为new ;
查找/光标所在行之下查找; ?光标所在行之上查找 ;n下一个; N上一个
注释:1,10s/^ /#g "#“注释1到10行;:1,10s/^ #//g取消”#“注释;:1,10s/^ g”//“注释1到10行;1,10s/^g取消”//"注释
  • vim配置文件
设置参数含义
:set nu :set nonu显示与取消行号
:syntax on :syntax off是否依据语法显示相关颜色帮助
:set hlsearch :set nohlsearch设置是否将查找的字符串高亮显示。默认是高亮
:set ruler :set noruler设置是否显示右下角的状态栏。默认是设置
:set showmode :set noshowmode设置是否在左下角显示如"–INSERT–"之类的状态栏。默认是显示
:set list :set nolist设置是否显示隐藏字符,例如Tab键用"^I"表示等。默认是nolist显示。显示时使用"cat -A 文件名"
:set all支持更多设置参数

注意:这些设置都是临时生效,要想永久生效需要手工建立配置文件"~/.vimrc",将需要的参数写入配置文件就能永久生效。Windows下回车符在Linux中是用"^M " 显 示 而 不 是 " "显示而不是" """,会导致在Windoss下写的脚本无法在Linux中执行,这时可以通过命令"dos2unix"把windows格式转化为Linux格式,也可通过"unix2dos"把Linux格式转化为windows格式,当然这两个命令需要手工安装才行。

  • vim小技巧
命令作用
:r 文件名把文件内容导入到光标位置
:! 命令在vim中执行系统命令。只在vim中执行系统命令但并不把系统命令结果写入文件中。主要用于文件编辑中查看系统信息,如时间
:r !命令在vim中执行系统命令,并把命令结果导入光标所在行
:map 快捷键 快捷键执行的命令自定义快捷键。常用自定义快捷键有:map ^P I# 按"ctrl+p"时,在行首加入注解 ;:map ^B ^x 按"ctrl+b"时,删除行首第一个字母(删除注释)。注意: ^P快捷键不能手动输入,需要执行ctrl+V+P来定义,或ctrl+V,然后ctrl+P, ^B同
:ab 源字符 替换为字符字符替换。需要频繁输入某长字符串(比如邮箱,这时候使用字符替换能增加输入效率)
vim -o/-O 文件1 文件2可以上下/左右分屏打开两个文件,ctrl+w进行两屏的切换

5.软件包安装

  • 软件包分类:
源码包二进制包
开源,可修改源码分为DPKG包应用在Debian和unbuntu操作系统;RPM包应用在CentOS等操作系统。但是都是经过编译不可看见源码
软件是编译安装,所以更加适合自己系统,更加稳定效率也更高
卸载方便
安装过程步骤多包管理系统简单,几个简单命令即可实现包的安装、升级、查询和卸载
编译时间长,安装比二进制时间长安装速度比源码包安装块
编译安装,报错新手很难解决依赖性

查询函数库所在软件包

  • rpm包命名规则
    httpd-2.2.15-15.el6.centos.1.i686.rpm
    httpd软件包名 2.2.15软件版本 15软件发布次数 el软件发行商 i686适合的硬件平台 rpm包的扩展名(注意:如果操作系统是未安装软件包则使用包全名而且要注意绝对路径;如果操作的是已经安装的软件包,则使用包名即可,系统会产生RPM包的数据库(/var/lib/rpm/),而且可以在任意路径下操作)

  • rpm包默认安装位置

RPM包默认安装路径含义
/etc/配置文件安装目录
/usr/bin/可执行的命令安装目录
/usr/lib程序所使用的函数库保存位置
/usr/share/doc/基本的软件使用手册保存位置
/usr/share/man帮助文件保存位置

RPM包手工操作

  1. 安装。rpm -ivh 包全名 -i安装 -v显示详细信息 -h打印安装进度 --nodeps不检测依赖性安装(不推荐使用) --replacefiles替换文件安装 --replacepkgs替换软件包安装 --force强制安装(即replacefiles+replacepkgs) --test测试安装(不安装,只检测依赖性) --prefix(指定安装路径,会导致系统找不到安装软件需要手动配置,不推荐指定)
  2. 启动。service 服务名 start(启动服务)|stop(停止服务)|restart(重启服务)|status(查看服务状态)|
  3. 升级。rpm -Uvh 包全名 -U升级安装(没安装过则直接安装;安装过则升级版本);rpm -Fvh升级安装(如果没有安装过则不安装;必须有旧版本才能升级)
  4. 卸载。rpm -e 包名 --nodeps不检查依赖性 -e卸载
  5. 查询。rpm -q 包名 -q查询 -qa查询系统中所有安装软件包(当然可以用管道符来查看所需内容,如:rpm -qa | grep httpd,其中rpm -q 包名只能查看这个包是否安装,使用rpm -qa | grep 包名 会把包含名称的所有包都列出来) -qi查询已安装软件包信息 -qip查询还未安装软件包详细信息 -ql查询已安装软件包中文件列表和完整目录 -qlp查询还没有安装软件包中文件列表和打算安装的位置 -qf 查询系统文件属于哪个软件包 -qR查询软件包的依赖性 -qRp查看没有安装的软件包依赖性
  6. 验证(已安装)。rpm -Va 效验本机已经安装的所有软件包 -V效验已安装软件包 -Vf效验某个系统文件是否被修改
  7. 数字证书(未安装)。验证过程:安装原厂公钥文件->安装RPM包(提取证书信息然后对比)->验证通过则安装;否则不安装并警告
  8. 提取。(复制安装并不能覆盖修改文件内容) rpm2cpio 包全名 | cpio -idv . 文件绝对路径

RPM包在线操作(yum安装)

  1. yum源配置文件保存在/etc/yum.repos.d目录中。yum源配置文件只要扩展名是"*repo"就会生效
  2. 搭建本地光盘yum源 挂载命令->使yum源配置文件失效(除Media)->修改Media配置文件
  3. yum list 查询yum源服务器上所有可安装的软件包列表 yum list 包名 查询yum源服务器上是否包含某个软件包 yum search 关键字 搜索yum源服务器上所有和关键字相关软件包(用于确认某个软件在哪个相关包中,例如可以确定"ifconfig"命令需要安装"net-tools"包) yum info 软件包查询软件包信息
  4. yum -y install 包名 安装软件包 yum -y update 包名 升级软件包
  5. yum remove 包名 卸载指定软件包(初学阶段最好用rpm卸载)
  6. yum grouplist 列出所有可用的软件组列表 yum groupinfo软件组名 列出软件组中包含的软件 yum groupinfo "Web Server"查询软件组Web Server中包含的软件 yum groupinstall 软件组名 安装指定软件组,组名可以由grouplist查询出来 yum groupremove 卸载软件组

源码包操作

  1. 如果软件包是给大量客户访问建议使用源码包(如:LAMP环境搭建);如果软件包是给Linux底层使用或只有少量客户访问建议使用rpm包安装因为简单
  2. RPM包不建议指定安装位置,建议安装在默认位置(RPM包安装的服务有标准卸载命令,不怕文件到处安装)。源码包必须指定安装位置(源码包没有安装数据库,没有删除命令)。例如Apache包建议源码包安装
文件类型(apache包为例)RPM包源码包
配置文件/etc/httpd/conf/httpd.conf/usr/local/apache2/conf/httpd.conf
网页位置/var/www/html//usr/local/apache2/htdocs
日志位置/var/log/httpd//usr/local/apache2/logs
启动方法service httpd restart /etc/rc.d/init.d/httpd restart/usr/local/apache2/bin/apchect1 start
  1. 安装过程1)下载软件包 2)解压缩 3)进入解压目录 4)./configure编译前准备:检测安装环境->定义所需功能–help帮助 --prefix=安装路径->将环境检测结果和定义好的功能选项写入Makefile文件,后续编译和安装需要依赖这个文件内容
  2. make会调用gcc编译器进行编译/make clean清空编译内容/make install 编译安装
  3. 直接用rm删除

6.用户与权限管理

  • 用户文件
文件位置描述
/etc/passwd 用户信息文件root(用户名):x(密码位):0(用户ID):0(组ID):root(用户说明):/root(用户家目录):/bin/bash(登录shell)
/etc/shadow 影子文件bin(用户名): *(加密密码,密码前加"!"或者该符号使无法登录 伪用户密码都是!!或该符号,代表该用户没有密码):15980(密码更改时间):0(两次密码的修改间间隔时间):99999(密码有效期):7(密码到期警告天数):(密码过期后宽限天数):(密码失效时间):(保留)
/etc/group 组信息文件root(组名):x(组密码位):0(GID):(附加组)
/etc/gshadow 组密码文件
/etc/default/useradduseradd命令执行时参考默认文件
/etc/login.defsuseradd命令执行时参考默认文件
  • 用户管理命令
命令作用
useradd添加用户
passwd设定密码 --stdin通过管道符输出数据为用户密码,主要在批量添加用户时使用 直接回车表示修改当前用户密码 例如echo “123”
chage -d 0 user1通过命令把密码修改日期归零,这样用户一登录就 需要修改密码
usermod修改已经添加用户信息 不建议修改用户名
userdel在删除用户的同事修改用户的家目录
su切换成不同用户身份 -代表连带用户环境变量一起切换 -c 命令 仅执行一次命令不切换用户身份
groupadd添加组
groupdel删除组
gpasswd-a将用户加入组 -d把用户从组中删除 usermod也可以达到同样的效果
newgrp改变有效组

组权限实验上
组权限实验下

ACL权限
概述:解决用户对文件身份不足问题
开启:开启ACL->dumpe2fs(查询指定分区相信文件系统信息) -h /dev/sda3->Default mount options: user_xattr acl 如果没有开启手工开启->mount -o remount,acl / 永久开启->vim /etc/fstab->UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl->mount -o remount /(重启生效)
使用:getfacl 文件名 查询文件ACL权限
设置ACL权限用法
setfacl -m u:用户名:权限 文件名设置用户权限
setfacl -m g:组名:权限 文件名设置组权限
setfacl -x u:用户名 文件名删除用户权限
setfacl -b 文件名删除文件所有ACL权限
setfacl -m u:cc:rx -R(递归,不建议文件执行权限为可执行) 目录对已存在的文件生效
setfacl -m d:u:aa:rwx -R /test对以后新建的文件生效
setfacl -m m:rwx /testgetfacl中mask为指定最大有效权限,可以通过这种方式进行修改 mask::rwx
sudo授权
概述:给普通用户赋予部分管理员权限
visudo:回车进行配置,如user1用户授权重启服务器操作user1 ALL=/sbin/shutdown(关机) -r(智能使用重启这一个参数) now(只能在现在重启)
sudo -l查看可用授权
注意:授权命令要细化到选项和参数(提升到root的动作)
SUID
只有在用户具有执行该执行文件的情况下才能使用
由于该文件配置SetUID,用户在执行该文件的时候会获得该文件属主身份,例如用户修改密码的/usr/bin/passwd命令
SGID
在针对文件的时候雷同SetUID
在针对组权限的时候用户必须对目录有写权限,下次写入是所属组变为属主组(用途不大)
SBIT
Sticky BIT粘着位,SBIT仅针对目录有效果。要求普通用户拥有w和x权限;如果没有粘着为,普通用户可以删除目录下所有文件;一旦赋予粘着为,普通用户智能删除自己建立的文件,不能删除其他用户建立的文件
赋权规则
4代表SUID
2代表SGID
1代表SBIT
chattr权限
给指定文件或者目录加锁锁定
如果对文件设置i属性,那么不许对文件进行任何操作;如果对目录设置,那么不允许建立和删除文件,只能修改目录下文件的属性
如果对文件设置a属性,那么只允许用echo对文件进行增加数据,不能删除也不能修改数据;如果对目录设置a属性,那么只允许对目录中建立和修改文件,不允许删除
查看文件系统属性lsattr -a显示所有文件和目录 -d若目标是目录,仅列出目录本身属性而不是子文件的

7.文件系统管理

  • Linux文件系统特点:super block(超级块)记录整个文件系统信息;date
    block(数据块)用来实际保存数据,大小为(1KB、2KB、4KB);inode(i节点)用来保存文件的权限、所有者所属组、文件大小、文件状态、改变时间等信息;
  • Linux采用SATA接口;CentOS6.x默认采用ext4文件系统、CentOS7.x采用XFS文件系统;swap是Linux用于交换分区的文件系统,一般为内存2倍;
  • 常用硬盘管理命令:
命令作用
df-ahT 显示文件系统状况 用于统计空间大小(包括缓存)
du-ah -s统计总占用量 用于统计文件大小
fsck-y 文件系统修复命令
dumpe2fs查看磁盘状态
stat查看文件详细时间
file判断文件类型
type判断命令类型

手动分区实操
磁盘配额实操
LVM逻辑卷实操

8.Shell编程基础

#查看Linux支持的Shell
[root@localhost ~]# vi /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

############Shell常用命令###########
echo [选项 -e支持反斜杠控制的字符转换 -n取消输出后行末的换行符号] [输出内容]

history [选项 -c清空历史命令 -w把缓存中的历史命令写入历史命令保存文件。默认地址为~/.bash_history中] [历史命令保存文件]
vi /etc/profile HISTSIZE=1000 默认保存1000条
history命令查看缓存中的历史命令
~/.bash_history文件中当前用户登录操作命令没有写入,而是只保存在缓存中
在空白的命令符输入 !!重复执行上一条命令 !字串重复执行上一条以该字串开头的命令 !$重复上一条命令的最后一个参数


快捷键作用
ctrl+A把光标移动到命令开头
ctrl+E把光标移动到命令结尾
ctrl+C强制终止当前命令
ctrl+L清屏。相当于clear命令
ctrl+U删除或者剪切光标之前的命令
ctrl+K删除或剪切光标之后的内容
ctrl+Y粘贴ctrl+U或ctrl+K剪切的内容
ctrl+R在历史命令中搜索,按下ctrl+R后,就会出现搜索界面,输入搜索内容,就会从历史命令中搜索
ctrl+D退出当前终端
ctrl+Z暂停并放入后台
ctrl+S暂停屏幕输出
ctrl+Q恢复屏幕输出
符号作用
命令 > 文件以覆盖方式将命令正确输入到指定文件
命令>>文件以追加方式把正确命令输出到指定文件或设备中
错误命令 2> 文件以覆盖方式将命令错误输入到指定文件
错误命令2>>文件以追加方式把错误命令输出到指定文件或设备中
命令>文件 2>&1 / 命令 &>文件以覆盖模式把正确命令输出和错误输出保存到同一个文件中
命令>>文件 2>&1 / 命令 &>>文件以追加模式把正确命令输出和错误输出保存到同一个文件中
命令>>文件1 2>>文件2把正确文件追加到文件1中,把错误文件追加到文件2中
多命令执行符格式作用
;命令1;命令2多个命令顺序执行
&&命令1&&命令2命令1执行命令2才会执行
ΙΙ命令1ΙΙ命令2命令1执行不成功命令2才会执行
Bash中符号作用
‘’单引号中的特殊字符都无特殊含义
“”双引号中特殊符号没有含义,"$"、"`“和”"除外
··反引号。不推荐使用
$()用来引用系统命令
()用于一串命令执行时,()中命令会在子Shell中运行
{}用于一串命令执行时 ,{}中命令会在当前Shell中运行
[]用于变量测试
#注释
$用于调用变量的只
\转义符
控制字符作用
\a输出警告音
\b退格键,也就是向左删除键
\c取消输出行末的换行符。和"-n"选项一致
\eESCAPE键
\f换页符
\n换行符
\r回车符
\t制表符,也就是Tab键
\v垂直制表符
\0nnn按照八进制ASCII码输出字符。其中0是数字零,nnn是三位八进制数
\xhh按照八进制ASCII码输出字符。其中hh是l两位十六进制数
#第一个Shell脚本
[root@localhost ~]# vim hello.sh

#!/bin/Bash
#The first program
#Author: chang

echo -e "Hello World!"

#运行:第一种方式-赋予权限直接运行
[root@localhost ~]# chmod 755 hello.sh
[root@localhost ~]# ./hello.sh
Hello World! 
[root@localhost ~]# pwd
/root
[root@localhost ~]# /root/hello.sh
Hello World! 
#运行:第二种方式-通过Bash调用执行脚本
[root@localhost ~]# bash hello.sh
Hello World!

#变量的使用
[root@localhost ~]# name=chang      #给变量赋值
[root@localhost ~]# echo '$name'    #单引号直接输出
$name
[root@localhost ~]# echo "$name"    #双引号$拥有转义含义
chang
[root@localhost ~]# echo $name      #直接输出可以转义
chang
[root@localhost ~]# echo `date`     #··可以执行系统命令
2019年 09月 30日 星期一 23:51:22 CST
[root@localhost ~]# echo data        
data
[root@localhost ~]# echo $(date)
2019年 09月 30日 星期一 23:54:00 CST
变量分类描述
用户自定义变量有用户自由定义的变量名和变量的值
环境变量相当于windows中环境变量。其变量名可以自动定义,但一把对系统起作用的环境变量名是系统预先定义好的
位置参数变量用来向脚本中传递参数或数据
预定义变量Bash中 定义好的变量,变量名不能自定义,变量作用也是固定的
[root@localhost ~]# name="YF chang"
[root@localhost ~]# echo $name
YF chang

#set -u 如果设定此选项,调用未生命变量时回报错(默认无任何提示)
#set -x 如果设定此选项,在命令执行之前,会把命令先输出一次

[root@localhost ~]# unset name 删除变量

[root@localhost ~]# set 查看所有变量
[root@localhost ~]# env 查看环境变量

#PATH变量:系统查找命令路径
[root@localhost ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

#PS1变量:命令提示符设置
[root@localhost ~]# echo $PS1
[\u@\h \W]\$

#输入冲定向
[root@localhost ~]# wc[选项:-c统计字节数 -w统计单词数 -l统计行数] [文件名]

#LANG变量定义了Linux系统的主语系环境,这个环境的默认值是:
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
#当前系统语系
[root@localhost ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
#通过文件/etc/sysconfig/i18n定义系统默认预习
[root@localhost ~]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
#默认语系是下次重启之后系统所使用的语系,而当前系统预习是当前系统使用的语系
#如果系统重启,会从默认语系配置文件/etc/sysconfig/i18n中读出语系,然后赋予变量LANG让这个语系生效
#$n,n为数字,$n代表命令本身,$1-$9代表第一和第九个参数,10个以上的参数需要用大括号包含,如{10}
#!/bin/bash
num1=$1 #给num1变量赋值是第一个参数
num2=$2 #给num2变量赋值是第二个参数
sum=$(($num1+$num2)) 
echo $sum
[root@localhost ~]# 
[root@localhost ~]# chmod 755 count.sh
[root@localhost ~]# /root/count.sh 11 22
33

#$*这个变量代表命令行中所有参数,$*把所有的参数看成一个整体
#$@这个变量代表命令行中所有参数,不过$@把每个参数区分对待
#$#代表所有参数个数
#!/bin/bash
#Author: chang
#$#代表所有参数个数
echo "A total of $# parameters"
echo "The parameters is: $*"
echo "The parameters is: $@"
[root@localhost ~]# /root/count.sh 11 22
A total of 2 parameters
The parameters is: 11 22
The parameters is: 11 22

#$*与$@区别与应用
#!/bin/bash
#Author: chang

for i in "$*"
#定义for循环,in后面有几个值,for会循环多少次,注意$*要用双引号括起来
#每次循环会把in后面的值赋予变量i
#shell把$*中所有参数看成一个整体,所以这个for循环值要循环一次
        do
                #打印变量$i的值
                echo "The parameters is: $i"
        done

#定义变量
x=1
for y in "$@"
#同样in后面有几个值,for循环几次,每次都把值赋予变量y
#可是Shell中吧"$@"中每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几次
        do
                echo "The parameter$x is: $y"
                #输出变量y的值
                x=(($x+1))
                #让变量每次都循环加1,为了输出时看的更加清楚
        done
[root@localhost ~]# /root/count.sh 11 22
The parameters is: 11 22
The parameter1 is: 11
The parameter2 is: 22

###################################################################################
# $?最后一次执行命令的返回状态。只有这个变量的值为0才证明上一个命令正确执行
# 这个值还多少是在编写ls命令时定义好的,如果朋友文件不存在则返回2 
[root@localhost ~]# ls
anaconda-ks.cfg  CentOS-Base.repo  count.sh  install.log  install.log.syslog
[root@localhost ~]# $?
-bash: 0: command not found
[root@localhost ~]# labs
-bash: labs: command not found
[root@localhost ~]# $?
-bash: 127: command not found

# $$当前进程的进程号(PID)
# $!后台运行的最后一个进程的进程(PID)
[root@localhost ~]# /root/count.sh
The current process is 2084
The last one Deamon process is 2085

####################################接收键盘输入####################################
[root@localhost ~]# read [选项 -p:提示信息 -t:指定等待秒数 -n:指定接收字符数 -s:隐藏输入内容] [变量名:可以自定义,若不指定则保存进默认变量REPLY]
#!/bin/bash
#Author: chang

read -t 30 -p "Please input your name:" name
#提示"请输入姓名"并等待30秒,把用户输入保存在name中
echo "name is $name"

read -s -t 30 -p "Please enter your age: " age
#提示“请输入年龄”并等待30秒,把用户的输入保存入变量age中
#年龄是隐私,所以我们用"-s"选项隐藏输入
echo -e "\n"
#调整输出格式,如果不输出换行,一定的年龄速出不会换行
echo "Age is $age"

read -n 1 -t 30 -p "Please select you gender[M/F]: " gender
#提示"请选择性别"并等待30秒,把用户输入保存人变量gender
#使用"-n 1"选项只接收一个输入字符就会指定(都不用输入回车)
echo -e "\n"
echo "Sex is $gender"

[root@localhost ~]# /root/count.sh
Please input your name:chang
name is chang
Please enter your age: 

Age is 23
Please select you gender[M/F]: M

Sex is M

####################################Shell运算符####################################
[root@localhost ~]# declare [+/-][选项] 变量名

# -: 给变量设定类型属性
# +: 取消变量的类型属性
#-i: 将变量声明为整数型(integer)
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# declare -i cc=$aa+$bb
[root@localhost ~]# echo $cc
33

# 数组变量类型
[root@localhost ~]# name[0]="da tou"
[root@localhost ~]# name[1]="er pang"
[root@localhost ~]# name[2]="xiao fei zai"
[root@localhost ~]# echo ${name}
da tou
[root@localhost ~]# echo ${name[*]}
da tou er pang xiao fei zai

# -x: 将变量声明为环境变量
[root@localhost ~]# declare -x test=123

# -r: 只读属性,如果给变量设置了只读属性,那么这个变量既不能修改变量的值,也不能删除变量,甚至不能用"+r"选项取消只读属性
[root@localhost ~]# declare -x test=123
[root@localhost ~]# declare -r test
[root@localhost ~]# test=456
-bash: test: readonly variable
[root@localhost ~]# declare +r test
-bash: declare: test: readonly variable
[root@localhost ~]# unset test
-bash: unset: test: cannot unset: readonly variable
#不过还好这个变量知识命令声明,所以只要重新登录或者重启,这个变量就会消失

# -p可以查询变量属性
[root@localhost ~]# declare -i var=15
[root@localhost ~]# declare -p var
declare -i var="15"

# 使用expr或let数值运算工具,但是$((运算符))或者$[运算符]方式运算
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# dd=$(expr $aa + $bb)
# dd的值是aa和bb的和。注意"+"号左右必须有空格
[root@localhost ~]# echo $dd
33

[root@localhost ~]# bb=22
[root@localhost ~]# aa=11
[root@localhost ~]# let ee=$aa+$bb
[root@localhost ~]# echo $ee
33
[root@localhost ~]# n=20
[root@localhost ~]# let n+=1
[root@localhost ~]# echo $n
21

[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# ff=$(( $aa+$bb ))
[root@localhost ~]# echo $ff
33
[root@localhost ~]# gg=$[ $aa+$bb ]
[root@localhost ~]# echo $gg
33

####################################Shell运算符优先级####################################

四则运算练习题

####################################变量测试与内容置换####################################
# x=${y-新值}
[root@localhost ~]# unset y
[root@localhost ~]# x=${y-new}
[root@localhost ~]# echo $x
new
[root@localhost ~]# echo $y

[root@localhost ~]# y=""
[root@localhost ~]# x=${y-new}
[root@localhost ~]# echo $x

[root@localhost ~]# echo $y

[root@localhost ~]# y=old
[root@localhost ~]# x=${y-new}
[root@localhost ~]# echo $x
old
[root@localhost ~]# echo $y
old
[root@localhost ~]# 

# x=${y=新值}
[root@localhost ~]# unset y
[root@localhost ~]# x=${y:=new}
[root@localhost ~]# echo $x
new
[root@localhost ~]# echo $y
new
[root@localhost ~]# y=""
[root@localhost ~]# x=${y:=new}
[root@localhost ~]# echo $x
new
[root@localhost ~]# echo $y
new
[root@localhost ~]# y=old
[root@localhost ~]# x=${y:=new}
[root@localhost ~]# echo $x
old
[root@localhost ~]# echo $y
old

# x=${y?新值}
[root@localhost ~]# unset y
[root@localhost ~]# x=${y?new}
-bash: y: new
[root@localhost ~]# y=old
[root@localhost ~]# x=${y?new}
[root@localhost ~]# echo $x
old
[root@localhost ~]# echo $y
old
在Linux系统登录时主要生效的环境变量配置文件以及其调用过程
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
在这里插入图片描述
用户登录过程先调用/etc/profile文件(在这个环境变量配置文件中定义默认环境变量)
USER变量&LOGNAME变量:根据登录用户给这个变量赋值
MAIL变量:根据登录用户,定义用户的邮箱为/var/spool/mail/用户名
PATH变量:根据登录用户的UID是否为0,判断PATH变量是否包括/sbin、/usr/sbin和/usr/local/sbin这三个系统命令目录
HOSTNAME变量:更加主机名,给这个变量赋值
HISTSIZE变量:定义零食命令的保存条数
umask:定义umask默认权限。注意/etc/profile文件中的umask权限是在"有用户登录过程(也就是输入了用户名和密码)"时才会生效
调用/etc/profile.d/*.sh文件,也就是调用/etc/proflie.d/目录下所有以.sh结尾的文件
由/etc/profile文件调用/etc/profile.d/*.sh文件(例如lang.sh文件会被调用,而这个文件又会调用/etc/sysconfig/i18n文件,即之前的默认语系配置文件)

由/etc/profile文件调用~/.bash_profile文件,这个文件主要实现两个功能
调用~/.ashrc文件
在PATH变量后面加入":$HOME/bin"这个目录。也就是说如果我们在自己的家目录中建立bin目录,然后把自己的脚本放入"~/bin"目录,就可以直接执行脚本,而不用通过目录执行了。
由~/.bash_profile文件调用 ~/.bashrc文件,该文件主要实现两个功能
定义默认别名,
调用/etc/bashrc
由~/.bashrc调用了/etc/bashrc文件,其只要有以下功能
PS1变量: 也就是用户提示符
umask:定义umask默认权限。这个文件中定义的umask是真多没有登录过程(也就是不需要输入用户名和密码,比如总一个终端切换到另一个终端,或进入子Shell)时生效
PATH变量:给PATH变量追加值,当然也是在"没有登录过程"时才生效
调用/tec/profile.d/*.sh文件,这也就是"没有用户登录过程"才调用

自定义环境变量存放位置:如果是对所有用户生效则放入/etc/profile环境变量配置文件;如果修改只对自己有用则放入~/.bash_profile或 ~/.bashrc这两个配置文件中任意一个


用户推出登录时,只会调用一个环境配置文件,那就是~/.bash_logout。这个文件默认没有写入任何内容,如果用户希望在推出登录时指定一些操作,比如清除历史命令,备份某些数据就可以把命令写入这个文件

还有一些其他的变量配置文件,最常见的就是~/bash_history文件,也就是历史命令保存文件。还有shell登录信息(/etc/issue,登陆tty1-tty6这六个本地终端时欢迎界面;/etc/issue.net是在本地终端登录时显示欢迎信息的,如果是远程登录如SSH登录或telnet远程登录需要显示的欢迎信息,注意使用这个文件要注意首先/etc/issue.net文件中不能使用/etc/issue文件中支持的转义符,其次ssh远程登录是否显示/etc/issue.net文件中的欢迎信息由SSH配置文件决定的即在/etc/ssh/sshd_config Banner /etc/issue.net)。/etc/nod文件亦可显示欢迎信息,不过是在正确登录之后。

[root@localhost ~]# stty -a #查询所有快捷键
[root@localhost ~]# stty 关键字 快捷键 #可自定义快捷键

9.Shell编程进阶

正则表达式用来在文件中匹配符合条件的字符串,常用在grep、awk、sed文件等命令中
通配符用来匹配符合条件的文件名,常用在ls、find、cp等文件操作命令中

元字符作用
*前一个字符匹配0次或任意多次
.匹配除了换行符外任意一个字符
^匹配行首
$匹配行尾
[]匹配中括号中地址的任意一个字符,只匹配一个字符
[^]匹配出中括号中以外的任意一个字符
\转义符
{n}表示其前面的字符出现不小于n次
{n,}表示其前面的字符出现不少于n次
{n,m}表示其前面的字符至少出现n次,至多出现m次
扩展元字符作用
+前一个字符匹配1次或者任意多次
?前一个字符匹配0次或1次
l匹配两个或者多个分支选择
()匹配整体为一个字符

cut命令 字符截取和替换

#cut命令默认分隔符是制表符,也就是"tab"建,但是不能对空格符进行分割
[root@localhost ~]# vim student.txt

ID      Name    gender  Mark
1       ZS      M       89
2       LS      M       91
3       ZL      M       98
#cut -f 列号 文件名 提取第几列
#提取第二列
[root@localhost ~]# cut -f 2 student.txt
Name
ZS
LS
ZL
#提取第二,三行
[root@localhost ~]# cut -f 2,3 student.txt
Name	gender
ZS	M
LS	M
ZL	M

#cut -d 分隔符 文件名 按照指定分隔符分割列
#以":"作为分隔符,提取/etc/passwd文件的第一列和第三列
[root@localhost ~]# cut -d ":" -f 1,3 /etc/passwd

awk编程

[root@localhost ~]#printf '输出类型输出格式' 输出内容
#输出类型:	%ns-输出字符串,n是数字带边输出几个字符
#			%ni-输出整数,n是数字代表输出几个数字
#           %m,nf-输出浮点数,m和n是数字,指整数和小数位
#输出格式:  \a-输出警告声音
#           \b-输出退格键,也就是Backsapce键
#			\f-清除屏幕
#			\n-换行
#			\r-回车
#			\t-水平输出退格键,也就是Tab键
#			\v-垂直输出退格键,也就是Tab键

[root@localhost ~]# printf '%s' $(cat student.txt)
IDNamegenderMark1ZSM892LSM913ZLM98[root@localhost ~]# 
#这就是printf命令,如果不指定输出格式则会把所有输出内容连在一起
#cat等文件输出命令之所以能够按照格式输出是应为cat命令已经设定了输出格式
#为了使用printf输出合理的格式,应该这样
[root@localhost ~]# printf '%s' $(cat student.txt)
IDNamegenderMark1ZSM892LSM913ZLM98[root@localhost ~]# 
[root@localhost ~]# printf '%s\t %s\t %s\t %s\t\n' $(cat student.txt)
ID	 Name	 gender	 Mark	
1	 ZS	 M	 89	
2	 LS	 M	 91	
3	 ZL	 M	 98	

#awk基本使用规则
[root@localhost ~]# awk '条件1{动作1}条件2{动作2}...' 文件名
#条件 x>10 判断变量x是否大于10
#     x==y 判断x是否等于变量y
#     A~B 判断字符串A中是否包含能匹配B表达式的子字符串
#     A!~B 判断字符串A中是否不包含能匹配B表达式的子字符串
#动作  格式化输出/流程控制语句
#例如输出第二列和第六列
[root@localhost ~]# awk '{printf $1 "\t" $2 "\n"}' student.txt
ID	Name
1	ZS
2	LS
3	ZL
条件类型条件说明
awk保留字BEGINawk程序一开始时,尚未读取任何数据之前执行。BEGIN后的动作只在程序开始时执行一次
awk保留字ENDawk程序处理完所有数据,即将结束时执行。END后的动作只在程序结束时执行一次
关系运算符>大于
关系运算符<小于
关系运算符>=大于等于
关系运算符<=小于等于
关系运算符==等于
关系运算符!=不等于
关系运算符A~B判断A中是否包含能匹配B表达式的子字符串
关系运算符A!~B判断字符串A中是否不包含能匹配B表达式的子字符串
关系运算符/正则/如果在"//"中可以写入字符,也可以支持正则表达式
# 查看ZL用户的成绩
# 在awk中,使用"//"包含的字符串,awk命令才会找到。也就是说字符串必须用"//"包含
[root@localhost ~]# awk '$2 ~ /ZL/ {printf $4 "\n"}' student.txt
98

10.启动引导与修复

11.服务器管理

12.系统管理

13.日志管理

14.测试题

链接提取码dl22

错误描述现象解决方法
#!/bin/Bash-bash: ./hello.sh: /bin/Bash: bad interpreter: 没有那个文件或目录#!/bin/bash
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值