Linux操作系统学习经验

Linux

各位读者朋友你好,我是你们的好朋友IT黑铁,经过一段时间的学习,初步收集了linux系统的基础用法,高级的操作系统调用及操作系统内部原理还未涉及。如下内容如有问题,请多指教+v+

学习途径:B站前锋云计算Linux视频

概念

Linux操作系统是一款开源、适合服务器和网络的操作系统。

Linux系统管理

目录结构:

      以单根的方式组织文件/(对比Windows的多根方式组织文件C:\D:\)

     

   bin:存放执行命令

      boot:操作系统启动目录

      dev:驱动设备

      etc:系统配置文件

      home:用户家目录,存放各个用户创建的文件。

      root:root超级管理员的家目录。

      run:运行目录。

      sbin:存放超管的命令

      tmp:系统和用户都可用的临时目录

      usr:存放用户应用程序

      var:可变目录多用来存放资源或日志。

      proc:存放采集服务器自身硬件、内核、进程运行的状态。

      mnt:挂载目录。

注意:~代表家目录,/代表根目录。

    文件系统(ext4):

           索引inode:大小为128字节,在inode满员时不能再创建文件。

           软连接:可以对目录和文件做软连接,记录的只是目标文件的绝对路径。

           硬连接:通过inode进行连接,允许文件有多个有效路径名,只能针对文件做硬连接,只能在同磁盘分区内做硬连接。

           相关命令:

ln创建连接(语法:ln目标文件 连接文件,选项:不加选项是硬连接,加了-s选项是软连接)

    用户和组:

/etc/passwd 存放用户信息(用户名:密码占位:uid:gid:描述:家目录:shell)

/etc/shadow 存放密码信息(用户名:密码加密值:用户从1970/1/1的最后登录或修改天数:密码修改最小间隔:密码有效最大间隔:警告提醒时间:用户最大不活动时间:用户失效时间:保留位)

           /etc/group 存放组信息(组名:组密码占位:组ID:组成员)

           基本组和附加组:相对概念,只是为了方便系统管理,无深刻意义。

    权限管理:

           相关命令:

chomd给用户、组、其他或所有对象授权(语法:chomd 对象加减权限 文件或目录(若对目录下所有文件授权加-R选项))

                  chown改变文件属主(语法:chown 用户名.组名 文件)

                  chgrp改变文件属组(语法:chgrp 组名 文件)

                  chattr设置文件属性(语法:chattr 选项 文件)

                  lsattr(展开文件特别位)

                  umask查看或设置当前用户的umask权限

           ACL(访问控制列表,对ugoa的扩展)

相关命令:setfacl(语法:setfacl 设置(-m) 用户或组:用户名:权限 文件,另外选项还有-x删除指定用户acl权限,-b删除所有acl权限)

                                      getfacl(语法:getfacl 文件)

注意:当设置了ACL后,在ls命令长格式显示后中第一部分的最后一个点变为+表示有acl,并且acl中设置的权限会和普通权限叠加。

           特殊权限:

临时提权:使用chomd命令为属组授s权限,其他用户将具备属主的权限,另外若有执行权,则ll命令查看 在末尾是小s,否则则是大s。注意数字权限的四位中第一位就是指该特殊位。

                  拒绝改动:使用+i选项。

                  系统默认授权:根据umask值和0777相减,得到文件夹755,再减        111得到644。可以使用umask改动umask值。

进程

    信号:

kill向进程发送信号(选项:-l列出所有支持信号。不加信号时只指定pid则是杀死该进程,若是指定%作业序号则是表示杀死后台对应序号的作业)

       常用信号:SIGHUP重新加载配置(1) SIGINT键盘终止Ctrl+C(2) SIGQUIT键盘退出Ctrl+/(3) SIGKILL无条件强制终止(9) SIGTEAM正常结束程序(15) SIGCONT继续(18) SIGSTOP暂停(19) SIGTSTP键盘暂停Ctrl+Z(20)

    优先级:

nice值:系统提供的可调优先级范围-20~19,系统会将此值+20,值越小,优先级越高。

命令:nice(选项:-n设置nice值)

         renice修改进程的nice值

    相关命令:

  ps -aux静态查看系统进程(可以使用--sort,指定排序参数(参数前加-表示降序),a表示所有进程,x表示不以终端区分,u表示以用户常用格式显示,o表示自定义显示后面加上参数多个参数以逗号分隔)

           ps -ef   静态查看进程的父子关系

       top 动态查看系统进程(选项:-d设置刷新周期,-p查看指定进程动态信息,常用内部命令,h显示帮助,M按内存的使用排序,P按CPU使用排序,<向前翻,>向后翻。)

           jobs 查看后台进程

           fg 将后台作业调到前台

      &将占领前台的程序丢到后台(需与其他单词分开,例:sleep 60 &)

           bg 将后台停止的程序运行起来

磁盘管理

磁盘文件:sda(s表示SATA串口(除此之外还有老的并口IDE),d表示disk磁盘,a表示第一块磁盘)

磁盘分区

MBR(不放弃主分区,只支持分4个主分区,小于2T的磁盘;若放弃一个主分区,可将其改为扩展分区,扩展分区再分区则分逻辑分区)

GPT(支持>2T的硬盘,支持128个分区)

MBR分区实现:磁盘分区->创建文件系统->挂载。

SWAP交换分区(对应Windows中的虚拟内存)

       解决问题:通过专门的磁盘分区存放热点数据来尽量地平衡内存小的问题。

       具体操作:设置分区类型为82(Linux交换)->创建文件系统->挂载

LVM逻辑卷

       解决问题:磁盘扩容,逻辑管理磁盘使磁盘不受物理特点的限制,如:磁盘的拷贝、删除、授权。

       术语:PV物理卷,VG卷组,LV逻辑卷

       具体操作:物理磁盘转换为PV->创建VG->创建LV->创建文件系统->挂载

       扩容:若要对卷组扩容使用vgextend命令;若要对逻辑卷扩容则使用lvextend命令并且resize2fs重置文件系统。

RAID磁盘冗余阵列

       解决问题:解决企业中信息安全和读写磁盘速率问题。

       RAID类型:RAID1(两块磁盘每一份信息都备份在两个磁盘中)、RAID5(至少三块硬盘,两块数据盘一块校验盘,另外可能有一块热备盘,当一块坏了接上去)、RAID(两块磁盘分担读写压力,无备份)

       术语:硬RAID(硬件实现)、软RAID(操作系统实现)

       具体操作:创建RAID->创建文件系统->挂载

相关命令:

       lsblk 列表系统磁盘信息

       fdisk 启动MBR分区工具(选项:-l查看指定磁盘的信息,不加选项则开始分区。内部命令,t设置分区类型,n划分区,p分主分区,e分扩展分区,w将分区列表写到磁盘里,另外回车代表使用默认值)

       mkfs创建文件系统(第一种方式:mkfs.ext4 磁盘分区。第二种方式:mkfs -t ext4 磁盘分区)

       mkswap 创建swap文件系统

       mount 分区挂载(临时的,重启后挂载失效,持久化在配置文件中设置,使用:mount -t 文件系统类型 磁盘分区 挂载目录)

       swapon 临时swap挂载(临时的,重启后挂载失效,持久化在配置文件中设置)

       umount 取消挂载

       swapoff swap取消挂载

      df -hT 人性化显示磁盘分区系统类型

      df -i 显示磁盘的inode信息

      partprobe 刷新磁盘

      free -m 查看当前交换分区

      pvcreate 转换物理磁盘为物理卷

      vgcreate 创建卷组(语法:vgcreate 自定义卷组名 已有物理卷)

      lvcreate 创建逻辑卷(语法:lvcreate -L 200M -n 卷组名 自定义卷名,选项:-L表示大小,-n表示卷名)

      vgextend 扩展卷组容量(语法:vgextend 卷组名 已有物理卷)

      lvextend 扩展逻辑卷的大小

      resize2fs 重置文件系统大小

      pvs 列表PV信息

      vgs 列表VG信息
              mdadm -C 自定义RAID设备名(如/dev/md0) -l5(表示RAID5)-n(指定RAID成员数量) -x(指定热备磁盘的数量) 已有磁盘

      mdadm -D RAID名 查看RAID详细信息

      mdadm RAID名 -f 磁盘名 -r 磁盘名 移除RAID中的一个磁盘(-f表示强制,-r表示移除)

小知识:/dev/null是系统的垃圾桶,不需要的输出都可重定向到那。

Vim文本编辑器

insert模式:

y 复制(yy复制一行,可以如3yy即复制3行,)

p 粘贴

    d 删除

    u 撤销

extended command模式:

    q 退出(如有修改,系统会阻止退出,q!表示加强语气,不保存就退出)

    wq 保存并退出

    set nu 设置显示行号

    set list 显示控制字符

    set nonu 取消设置行号

    查找替换(语法:范围 s/原内容/新内容/全局,例1,5 s/111/333/g)

visual模式:

    键盘上下左右键或hjkl   (可选中内容)

command模式:

    /?(查找指定内容,使用n查找下一个,N查找上一个)

光标定位:

    0或$(行首或行尾)

    gg或G(页首或页尾)

    nG(光标指到第n行,例3G)

注意:insert模式切换到command模式使用Esc,command模式切换到insert模式使用i、a、o,command模式切换到extended command模式使用:,command模式切换到visual模式使用v。

重定向和管道

重定向:将输出或输入改变目的或源。

FD文件描述符:0(stdin)1(stdout)2(stderr)其文件在进程的fd文件夹中。

重定向符:>(等价于1>,覆盖)   >>(等价于1>>,追加)

                 <(等价0<)     <<(等价0<<)

管道:将多条命令组织起来,一次性完成复杂的处理任务。

       tee管道:前一条语句的输出作为管道后的输入。

       Xargs:特殊命令处理,如cp、rm,只需在管道后加上xargs。

软件安装

RPM(Red Hat Package Manager)

是什么:二进制bin包,无需编译,但是固定配置。

RPM工具:linux内置的工具。

YUM工具:

       解决问题:从源自动下载,自动解决依赖问题。

       具体操作:配置源(第一种方式:本地源,删除官方yum库,自定义/etc/yum.repos.d里的以repo后缀的配置文件,语法为:第一行为[库名称],例[dvd],余下行name=描述(必须),baseurl=file://路径,gpgcheck=0关闭校验。若是使用光盘等外部设备,则还需挂载。第二种方式:删除官方yum库,使用阿里巴巴开源镜像站,下载其提供的yum源)

源码包

是什么:源代码src包,需要编译工具编译程序,可以通过设置代码参数改变配置。

具体操作:安装软件源码编译环境->使用make编译代码->使用make install安装软件包(若要配置则在第二步前,在软件包安装目录的configure目录下配置相关参数)

    相关命令:

           yum install 安装(选项:-y表示自动确认。)

           yum reinstall 重写安装

           yum update 更新(如果不指定软件,则是升级操作系统)

           yum list 查询软件是否安装

           yum remove 卸载

           yum repolist 查看yum库信息

           yum makecache 刷新yum仓库

       rpm(选项:-i表示安装,-v表示可视,-h表示百分比,-q表示查询,-e表示卸载。安装的时候使用安装包全名,卸载或查询时使用软件名)

       make 编译命令

       make install 安装安装包命令

常用软件

    wget:一款根据下载链接下载的软件。

    crond:计划任务执行的根本,系统软件。

    rsyslogd:系统日志管理程序,系统软件。

    vsftpd:ftp的文件服务端软件。

    lftp:ftp的文件客户端软件。

    nfs-utils:nfs的文件服务端软件。

    openssh-server:ssh远程控制主机的程序。

       bash-completion:table补全工具。

       screen:对终端功能进行增强,通过Screen可以在多个会话之间进行自由切换,能够恢复会话,多窗口功能。

    注意:大多程序名称后会多一个d,表示其有一个守护进程。

任务计划

解决问题:预定任务自动进行。

一次性调度执行

      语法:at 时间表达式(回车后设置任务内容,结束设置使用Ctrl+D)

循环调度执行

      语法:使用cron打头的命令

相关命令:

      crontab -e 创建计划(无参,针对当前用户,编辑内容语法:分 时 日       月 周 命令或脚本程序)

日志管理

解决问题:管理系统日志和第三方软件日志。

基本配置:在rsyslog程序的主配置文件/etc/rsyslog.conf中可配置其日志的输出级别和日志的输出位置,其中需要注意的是设备种类是一类软件的划分。

日志轮转配置:可以通过主配置文件/etc/logrotate.conf也可以通过其子配置文件夹/etc/logrotate.d/*配置日志的持久化策略,由此可以看到以d后缀的文件夹一般都是子配置。除了程序自动轮转,可以使用/usr/sbin/logrotate /etc/logrotate.conf手动轮转。

网络管理

解决问题:与外部网络通信。

具体操作:第一种:使用图形界面操作。第二种:使用图形命令。第三种:修改网卡配置文件/etc/sysconfig/network-scripts/ifconfig-ens33,其中BOOTPROTO设置手动(none或static)或自动(dhcp),DNS1域名系统必须带数字可以配多个。

相关命令:

      nm-connection-editor 图形界面

      nmtui 简易界面

      hostname 查看主机名

      hostnamectl set -hostname 主机名(修改主机名,也可以  通过修改/etc/hostname文件修改主机名)

      ip a 查看所有IP

      ip route 查看路由和网关

      ip neiph 查看能和另一个能ping通的邻居信息

      ping 因特网包探索器

      ss -tnl 查看TCP端口连接状态(ss表示网络连接状态,-t表示tcp,n表示数字,l表示列出)

      systemctl stop firewalld 停止防火墙(暂时的,开机会自启)

      systemctl disable firewalld 阻止自启防火墙

    systemctl status firewalld 查看防火墙状态

    setenforce 0 关闭系统的另一道防火墙selinux(暂时关闭,阻止自启在/etc/sysconfig/selinux中配置)

  firewall-cmd --state 查看防火墙状态

  firewall-cmd --zone=public --add-port=8080/tcp --permanent 开发指定端口

  firewall-cmd --zone=public --remove-port=8080/tcp --permanent 关闭指定端口

  firewall-cmd --reload 立即生效

  firewall-cmd --zone=public --list-ports 查看开发的端口

  netstat ---查看端口监听状态(通常加参数-anp)

文件服务

FTP

      解决问题:基于FTP文件传送协议的文件服务。

      具体操作:安装vsftpd->在固定文件夹/var/ftp/下准备分发文件->启动服务->关闭防火墙。

      访问:第一种方式:使用浏览器访问。第二种方式:使用lftp客户端访问。

    NFS

解决问题:以NFS服务器为处理服务器提供资源,使得资源统一管理,提供文件分享服务,是NAS(网络附属存储)的一种实现。

具体操作:NFS服务器:安装nfs-utils->在家目录下创建一个存储网站代码的目录->通过etc/exports配置NFS服务器(内部语法:文件或目录名 客户访问网段(权限,如rw)) 处理服务器:安装nfs-utils->挂载NFS服务器。

相关命令:

      具体操作:nfs服务器上:

      lftp 服务器IP地址(登录lftp)

      ls 列出ftp服务器上的文件(lftp内部命令)

      get 文件名(下载文件,lftp内部命令)

      mirror 目录名(下载目录,lftp内部命令)

      put 文件名(上传文件,但要服务端启动上传服务,通过配置其 /etc/vsftpd/vsftpd.conf文件,其中需要打开对应功能并且创建一个上传目录固定名为根下upload)

      mirror -R 目录名(上传目录,lftp内部命令)

exportfs -v 显示NFS开放的文件或目录信息

showmount -e NFS服务器地址 处理服务器查询NFS服务器可用目录

mount -t nfs NFS服务器网络地址:文件或目录 本机文件目录

关于Shell

概念:命令解释器,翻译命令。

bash是什么:Shell有许多产品,ashell、bshell、csh、tcsh、xshell等,bash即是综合了ashell和bshell的bashell。

Shell各种程序的执行顺序:系统别名->函数->系统命令->可执行文件等

Shell常用命令

命令 –help(可查看该命令参数信息)

man 命令(查看指定命令的使用手册)

shutdown -h now(关机)等同 init 0  halt  poweroff

shutdown -r now (重启)等同 init 1 

nohup 程序运行命令(不挂断的执行应用程序,终端关闭依然运行)

cd 切换目录

pwd 显示当前目录

ls (语法:ls 选项 参数)(选项:-l 显示具体信息 -a查看所有包括隐藏文件,-h人性化显示文件大小等)

ll 显示文件、目录等具体信息(等同于ls加上-l选项)

touch 创建文件

mkdir创建目录(选项:-p 自动创建不存在的父系文件夹 -v显示创建过程)

cp 复制(语法:cp 源 目)(选项:-r 递归拷贝文件夹内容)

mv 剪切(语法:mv 源 目)()

rm 删除(选项:-rf r表示递归删除f代表强制删除  -i表示显示删除过程)

cat 查看文件全部内容

more 翻页(回车换一行,空格翻一页)

head 头部(使用-?指定某行)

tail 尾部(使用-?指定某行,使用-f动态滚动最新内容(等同于tailf),)

grep 搜索(其家族还有egrep、fgrep、rgrep等,分别支持功能强度不同,语法:grep 选项 PATTERN 文件名,默认的PATTERN是一个基本正则表达式,另外可以指定多个文件名,选项:-f从指定文件中读取正则,-i忽略大小写。

wc统计文件的字节数、单词数、行数(选项:-w统计单词数,-c统计字节数,-l统计行数,-m统计字符数,-L显示最长行的长度。)

systemctl(管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作)

useradd 添加用户(选项:-d指定家目录 -u指定用户id)

passwd 修改密码

id 查询用户(语法:id 用户名或用户id)

userdel 删除用户(选项:-r连同删除该用户家目录(不加该选项只会删除配置文件中的用户信息))

whoami 查看当前用户名

usermod 修改用户属性(选项:-s指定用户的Shell(注意只要指定该Shell非/bin/bash就可以封禁该用户,但最好设为其内置命令/sbin/nologin),-g指定用户的基本组,-G指定用户的附加组)

groupadd 创建组(选项:-g指定组的ID)

groupdel 删除组

groupmod 修改组属性(选项:-g修改组的ID)

gpasswd 将用户从组中移除(选项:-d指定用户)

su 切换用户(su – root,su root大体相同些许不同,推荐第一个)

sudo 临时提权(通常用于一些短时间命令提权,根据/etc/sudoers文件中107行标注的组权限进行提权)

watch 定时执行指定命令(用法:watch -n1 ‘ls file.txt’,每隔一秒执行该命令)

ehco在标准输出或者文件中显示一行文本或者字符串配合某些需要输出的命令使用,也可以在脚本函数中作为返回值的命令。

tty 查看终端类型

reboot&init 6重启系统

which 查找命令

whereis 与which命令相同

find 文件查找(语法:find 路径 选项 动作,选项:-name 指定名字,-iname不区分大小写,-size 指定大小范围+表示大于-表示小于,-maxdepth指定文件度数,-user指定属主,-group指定属组,-type指定文件类型。动作:-ls表示找到文件后执行ls,-print输出到终端,-delete删除, -ok cp -rvf {} 目标文件 \;复制。)

locate 文件查找,依赖数据库

updatedb 更新数据库

alias 取命令别名

tar压缩解压命令(语法:tar 选项 压缩包名称 源文件,选项:-c表示进行打包,-f表示指定包文件名-z表示使用gzip压缩,-x解压缩,-j表示使用bzip,-J表示xzip,-C表示指定解压路径。)

read 从终端输入读取变量值(语法:read 变量名,选项:-p设置双引的提示信息,-t设置超时时间,-n读取字符数量)

history命令历史记忆功能(history:查看之前使用的所有命令,history n显示最近n个命令,history -d n删除相应的第n个命令,history -c删除所有历史命令,!n执行历史第n条命令,!-n执行倒数历史第n条命令,!!执行历史最后一条命令,![String]执行命令历史中最近一条以[String]开头的语句,!$引用上一个命令中的最后一个参数(也可以通过快捷键,先输入命令后,按下ESC松开按点或者同时按下Alt和点),其命令历史文件为家目录下的.bash_history)

screen用于管理会话(语法:screen 选项,选项:-S指定screen作业名称,-r恢复指定screen作业,-x恢复之前离线的screen作业,-d将指定screen作业离线,-ls显示目前所有的screen作业,-wipe检查所有screen作业并删除无法使用的screen作业)

seq 起始数 终止数 (产生起始数到终止数之间的所有整数)

注意:在能运行多个参数的时候用空格隔开,也可以使用{arg1,arg2}表示一个域包括这俩参数。

常见符号

&(用法一:将前台进程丢到后台。用法二:&>将标准输出和标准错误重定向)

&& 逻辑判断,若前一式子为真才会执行后面的式子,否则不执行。

|| 逻辑判断,若前一式子为假才会执行后面的式子,否则不执行。

;分号,不具备逻辑判断,执行分隔开的命令。

“”双引号,弱引用,会解析内部的变量

‘’单引号,强引用,不会解析,直接原样解释

``反引号,命令替换,先执行其内部的命令

$()等价于反引号

${}Shell种变量的原型,用于限定变量名称的范围,并且支持通配符

()当作语句块,将命令组合起来,用分号分隔,最后一个命令可以不用分号,子Shell中执行

{}当作语句块,将命令组合起来,用分号分隔,最后一个命令必须要分号,当前shell中执行

{1..10}表示1到10的整数集合

 

变量

自定义变量

      语法:变量名=变量值

      删除变量:unset 变量名

      作用范围:仅在当前Shell有效

环境变量

      第一种:export 变量名=变量值

      第二种:export 自定义变量名(将自定义变量转换成环境变量)

      作用范围:在当前Shell和子Shell中有效

位置变量

      $1(表示输入参数中的第一个)、$2(表示输入参数中的第二个)

预定义变量

      $0脚本名(自己本身)

      $#参数的个数

      $$当前进程的PID

      $?上一个命令的返回值0表示成功

数组变量

      第一种:变量名=(成员,成员)

      第二种:变量名=([0]=? [1]=? [2]=?)

      第三种:分别定义数组成员,变量名[0]=?,变量名[1]=?

      扩展:关联数组:通过declare -A 生命关联数组,关联数组可以用字符串作为数组索引,类似map。

      相关引用:${#变量名[@]}数组元素个数等同于${#变量名[*]}

${变量名[*]}引用所有元素等同于${变量名[@]}

变量运算

      整数运算:

             第一种:expr 式子(运算符:+、-、\*、/、%)

             第二种:$((式子)) (需要配合echo打印其运算值,否则语法错误)

             第三种:$[式子] (同样需要配合echo)

             第四种:let 式子

           小数运算:

使用管道将该过程交给第三方程序运算,如echo ”scale=2;2*4”|bc,echo “print 5.0/2”|python。也可以使用awk。

    注意:local 声明的变量范围仅在函数中,直接定义的变量时全局范围。decalre也可以声明变量,可以为其设置选项从而提供比直接定义变量更精确的变量。

       其他用法:

              ${#变量名}  获得变量的字符长度

              ${变量名} 获得变量值,在获得数组变量值时${变量名[INDEX]}

              ${变量名##*分隔符} 贪婪匹配,从前往后匹配到最长后删掉

              ${变量名#*分隔符}从前往后匹配最短后删掉

              ${变量名%分隔符*}从后往前匹配并删去,最短匹配

              ${变量名%%分隔符*}从后往前最长匹配到删掉,贪婪匹配

${变量名:起始索引:终止索引}取区间内容,截取数组时需要将变量名换成变量名[@]

${变量名/原内容/替换内容}替换变量字符内容,替换数组时需要将变量名换成变量名[@]

 

              ${变量名//原内容/替换内容}贪婪匹配,替换最多

              ${变量名-值}为变量赋初始值,不能为有值变量赋值,也有:-的用法

              ${变量名+值}为有值变量赋值,也有:+的用法

              ${变量名=值}为变量赋值,也有:=的用法

Shell环境变量文件

1./etc/profile:全局公有配置,不管哪个用户登录时都会读取到该文件。

2./etc/bashrc:在bash执行时读取该文件。

3.~/.profile:

4.~/.bash_login

5.~/.bash_profile

6.~/.bashrc

7.~/.bash_logout

登录图形界面时读取顺序:1 3

图形界面登录后打开终端时读取顺序:2 6

文本界面时:2 1 5

su:2 1 5 (不加参数时:2 5)

函数

第一种语法:function 函数名{

      命令

      [返回值]

}

    第二种语法:函数名{

命令

      [返回值]

    }

注意:如果将函数单独存放为一个文件,在加载时需要使用source或.进行加载。

快捷键

 

 

Shell脚本

语法:第一行:#! 命令解释器。(shebang,指明了当没有指定解释器时默认的解释器)

调试脚本:sh 脚本名(选项:-n不执行脚本,仅查询语法问题;-v执行脚本之前先将脚本全部内容输出到屏幕;-x将执行过程中使用到的脚本内容输出到屏幕)

执行脚本:第一种:命令解释器名(如bash)脚本名(不需要执行权限,在子Shell中执行)第二种:./脚本名(需要执行权限,在子Shell中执行)第三种:. 脚本名(不需要执行权限,在当前Shell中执行)第四种:source 脚本名(不需要执行权限,在当前Shell中执行)注意:第三种和第四种通常修改系统配置文件/etc/profile的PATH等变量,使之在当前Shell生效。

并发控制:脚本中的语句执行次序一般是串行执行,而要想互相无影响的语句能够并发执行,则可以通过&使其进入后台并发,但是必须控制进程的数量不然大批量容易死机,使用管道控制。另外如果要隔开不能被影响的语句执行,使用wait。

sed流编辑器:

解决问题:批处理方式编辑文件,快速完成对数据的编辑修改。

语法:sed 选项 命令 文件(支持正则表达式,选项:-n使用安静模式只有经过sed特殊处理的一行才被列出来,-e允许多点编辑,-i直接修改读取的档案内容,而不是由屏幕输出。命令:a\新增,c\取代,d删除,i\插入,p打印,s取代搭配正则,h拷贝pattern space的内容到hodling buffer。替换标志:g在行内进行全局替换,w将行写入文件,x交换暂存缓冲区与模式空间的内容,y将字符转换为另一字符。)

AWK流编辑器:

解决问题:对文本和数据进行匹配并处理,支持用户自定义函数和动态正则表达式等先进功能。

语法:awk -F域分隔符 选项 ‘AWK命令’ 待处理文件(域分隔符可选,选项:-f加载指定awk脚本,-v赋值一个用户自定义变量。AWK命令语法:第一个部分,读输入文件之前执行的代码段(BEGIN{});第二个部分,处理每一行要执行的语句(/pattern/{})。读输入文件之后的代码段(END{})。如果没有指定处理指令,则把匹配到的行标准输出到屏幕;如果没有指定模式,则所有被操作所指定的行都被处理。)

内置变量:$0完整的输入记录,$n当前记录的第n个字段,ARGC命令行参数的数目。

数组:其不需指定大小,直接赋值并创建,awk数组引用与C、JAVA一样,同时支持关联数组。

函数:内置库函数:rand()、int()取整、sub(r,s,[t])替换、split(s,array,[r])切割字符串,systime()取当前系统时间的时间戳,system()调用shell中命令。自定义函数:function 函数名(参数列表){}

函数:

注意:单独将awk代码放到一个文件时,以awk为后缀,并且指定命令解释器,如#!/bin/awk -f。另外其条件、循环等语句语法与C、JAVA一样。

代码语法:

      for语法:

             第一种:for 变量 in 值集合

                            do

                                  执行逻辑

                            done

             第二种:for((i=0;i<?;i++)

                            do

                                  执行逻辑

                           done

      while语法:

             while 条件测试

             do

                    执行逻辑

             done

      util语法:

             until 条件测试

             do

                   执行逻辑

             done

      条件测试语法:

             第一种:test 测试表达式

             第二种:[ 测试表达式 ],注意空格

             第三种:[[ 测试表达式 ]],注意空格,支持正则表达式

             第四种:((测试表达式))

             测试表达式语法:

                    文件:

                    -d 文件(表示文件存在且为目录则为真)

                    -f 文件(表示文件存在且为普通文件则为真)

                    -e 文件(表示文件存在则为真,无论目录还是文件)

-r 文件(文件存在且可读则为真,与执行脚本的用户权限也有关)

字符串:

-z 参数(如果字符串的长度为0,则为真)

-n 参数(如果字符串的长度大于0,则测试条件为真)

整数:

 

逻辑操作:

 

           IF语法:if [ 条件判断式 ];then        (then可以换行,分号就可以不要)

                                执行逻辑

                          fi

                          if [ 条件判断式 ];then

                                执行逻辑

                          else

                                执行逻辑

                          fi

           case语法:case 变量名 in

                                       值1)

                                              执行指令

                                              ;;

                                       值2)

                                              执行指令

                                              ;;

                                       *)

                                              默认指令

                                esac

温馨提示:

 

其他知识

Expect

解决问题:是一个免费的编程工具语言,提供在需要交互式时提供的控制流,来实现无需人工干预,自动进行工作。

posted @ 2022-08-29 17:13  炸天帮达令  阅读(138)  评论(0编辑  收藏  举报