最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

【无标题】

旗下网站admin30浏览0评论

【无标题】

【无标题】

中級學習: 一、linux下目錄結構:

1.1 目錄功能介紹: bin :普通用戶使用的命令 /bin/ls , /bin/datesbin : 管理員使用的命令 /sbin/servicedev :設備文件 /dev/sda,/dev/sda1root root用戶的Homehome 存儲普通用戶家目錄tmp :臨時文件(全局可寫:進程產生的臨時文件)var :存放的是一些變化文件,比如:數據庫,日誌,郵件…

=設備(主要指存儲設備)掛載目錄=

media:移動設備默認掛載點mnt :手工掛載設備的掛載點etc :配置文件(系統相關如網絡 /etc/sysconfig/network)proc :虛擬的文件系統,反映出來的是內核,進程信息或實時狀態,硬件的狀態。usr :系統文件,相當於C:\windows/usr/local :軟件安裝的目錄,相當於C:\programboot 存放的系統啟動相關的文件,例如kernel,grub(引導裝載程序)lib 庫文件Gliblib4 庫文件Glibclost+found fsck修復時,存儲沒有連接的文件或目錄 1.2 文件管理 1.2.1文件管理相關命令 1.創建一個文件: touch 文件名2.創建目錄:mkdir 路徑和目錄名 【mkdir -p 文件名 #父系,当创建目录没有上一级时,自动创建】3.創建多個:mkdir /home/a{1,2,3}4.複製: cp 源文件路径 目标文件夹 # 复制文件 - cp -r 源目录 目标目录 # recursion 递归复制整个目录5.移動: mv 源文件路徑 目標文件路徑6.強制刪除:rm -rf 文件或目錄的路徑7.查看文件內容:cat-查看全部;more-翻頁;head-頭部;tail-尾部;grep過濾關鍵字8.修改文件內容,使用文本編輯器vim,按i編輯,wq保存退出。相關內容:VISUAL 可视模式,按V进入,小v光标自己选取,大V直接选取一行,Y复制 p粘贴即可,不要按两次y,可视模式按一次y。按d是删除选中的ctrl+V,上下选择,然后可以shift+> 进行整体缩进。命令模式:hjkL:上下左右0 $:行首行尾gg G:頁首頁尾3G:進入第三行,或:3/string 查找string (n上一個,N下一個)文本編輯:yy 複製dd 刪除p 粘貼u 撤銷進入其他編輯模式: a i o A擴展命令模式:查找替換::範圍 s/原內容/新內容/全局:1,5 s/root/qianfeng/g #从1-5行的root 替换为qianfeng s:switch 交换 g:global全局另存为:w file9.txt #另存为 file9.txt:set nu # 设置行号 :set nonu # 取消设置行号 :set list # 显示控制字符重定向ls -a > list.txt # 覆盖文件内容ls -a >> list.txt # 追加到原文后临时文件:vim未正常关闭,产生的临时文件。如源文件是1.txt,临时文件就是.1.txt.swap,在同一目录内,删除该文件即可 1.3用戶管理 1.3.1 用戶/組基本概念

(1)用戶相關代碼:

查看當前登錄的用戶信息: id查看文件的owner:ll 文件路徑查看運行進程的username:ps aux 查看某個進程:ps aux | grep cpu

(2)用戶組信息存儲的文件

用戶基本信息文件**/etc/passwd文件** /etc/passwd(冒号分割为7列字段) root:x:0:0:root:/root:/bin/bash 用户名:x:uid:gid:描述:HOME:shell - root:用户名:登录系统的名字 - X:密码占位符:,具体内容不在这里 - 0:UID: 用户的身份证号 - 系统约定: RHEL7 uid: 0 特权用户 uid: 1~999 系统用户 uid: 1000+ 普通用户The root user. uid is 0. all power. This user has the power to override normal privileges on the file system. installing or removing software and to manage system files and directorie. Most devices can only be controlled by root- 0:GID:GROUP 组号- 每创建一个用户,系统会自动创建同名的组- root:描述:比如经理 manager- 默认是用户名- /root:家目录:登录系统时,所在目录- /bin/bash:登录shell:命令解释器,当今用的组多的 - 不能用vim的方式改这个文件,主要是来观察 用戶密碼信息文件 /etc/shadow /etc/shadow/etc/shadow(9列)root:$1$MYG2N:15636:0:99999:7: : :- 加密算法$id$salt$encrypted$1: MD5$5: SHA-256$6: SHA-512root:$1$MYG2NDG6$a1wtyr5GDM2esAPjug0YP0:15636:0:99999:7:: :1)“登录名”是与/etc/passwd文件中的登录名相一致的用户账号2)“口令”字段存放的是加密后的用户口令字,如果为空,则对应用户没有口令,登录时不需要口令; 星号*代表帐号被锁定;双叹号!!表示这个密码已经过期了。$6$开头的,表明是用SHA-512加密的,$1$ 表明是用MD5加密的$2$ 是用Blowfish加密的$5$ 是用 SHA-256加密的。 3)“最后一次修改时间”表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCOLinux中,这个时间起点是1970年1月1日。4)“最小时间间隔”指的是两次修改口令之间所需的最小天数。0表示随时可改密码,如果是5表示5天才能修改一次密码5)“最大时间间隔”指的是口令保持有效的最大天数。99999表示永不过期6)“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。假如设置7,表示还有7天到期时会警告是否要修改。软限制。7)“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。(软限制。到期后多少天就不能用账号了。)可不写。如写28表示代表用户不登录系统,会保留28天,过了28天禁用该用户。只要活跃,就不会禁用8)“失效时间”字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。(硬限制。)9) 保留 組信息處理 /etc/grouproot:x:0:組名:組密碼:組id:組成員组成员默认为空

1.3.2 用戶/組管理 用戶相關操作

創建用戶【未指定選項】:useradd user01查看用戶信息:grep user01 /etc/passwd 或者 cat /etc/passwd | grep user01創建用戶,指定uid :useradd user02 -u 1503創建用戶,指定家目錄:useradd user03 -d /user03删除用户:userdel -r user02 # -r 表示删除该用户的家目录,即/home/user02修改用戶密碼:passwd 用戶名 ,回車輸入新密碼 或者 當前用戶登錄,直接passwd其他選項管理: usermod -s /sbin/nologin user02 # 修改用户信息,此处是指定user02的shell禁止登录,执行完毕/etc/passwd中会做修改組成員管理:将用户追加到hr组(即用户有多个附加组) 语法 usermod -aG 组名 用户名 注:当不带选项 a 时,会修改附加组而非追加,无论原来有几个附加组,都会被重置为此时指定的唯一附加组

用户组操作:

创建一个hr组 - [root@localhost ~]# groupadd hr - 查看- [root@localhost ~]# tail -3 /etc/group- user03:x:1003:- user04:x:1004:- hr:x:1005:- 说明该组已经 创建,但和任何用户都没有关系。 - 组名不能只有数字,最好只有字母 创建组net01,并指定gid 1007 [root@localhost ~]# groupadd net01 -g 1007查看 [root@localhost ~]# grep 'net01' /etc/group //查看/etc/group中组net01信息 删除组: - [root@localhost ~]# groupdel net01 - 查看- [root@localhost ~]# tail -3 /etc/group- user03:x:1003:- user04:x:1004:- hr:x:1005:

基本组

随用户创建,自动创建的同名组,只有一个。从/etc/passwd查看最直接useradd -g 指定基本组usermod -g 修改用户基本组基本组可以改变,多个用户的基本组可以相同

附加组

- 用户加入的其他组。可以有多个useradd -G 指定附加组 1.3.3 提權

切换用户,切换对方身份时需要对方密码

[user01@localhost ~]$ id user01uid=1003(user01) gid=1003(user01) 组=1003(user01)[user01@localhost ~]$ whoamiuser01[alice@localhost ~]$ useradd u1bash: /usr/sbin/useradd: 权限不够[alice@localhost ~]$ su - rootpassword:[root@localhost ~]# useradd u1- 号的作用:带和不带 结果一致。最好带上 ,带 - 会切换环境变量,不带则不会切换环境变量 二、linux軟件安裝方式

Linux下主要有两种方式,主要分在线安装和线下安装。

2.1 在線安裝

1.軟件管理中心暗賬(Ubuntu)

更新源sudo apt-get update打开软件中心,搜索你要安装的软件,双击安装即可

2.命令行安装方式 1)更新,命令:apt-get update 2)查找你要安装的软件,apt-cache search “软件名” 3)apt-get install 软件名 apt-get相关的有两个重要文件:【需要下載依賴包】 1、是/etc/sources.list, 2、是/var/lib/apt/lists/目录. 当我们执行apt-get update程序分析sources.list看这个文件里是否有对应的Packages/Sources/Release列表文件,如果有更新则下载之,存入/var/lib/apt/lists/目录(其实就是保持与当前系统版本软件源表最新);apt-get install 安装相应的包 ,下载并安装。

注意:这种方式的好处在于:如果你想要加载的应用需要依赖另一个应用程序才能正常工作,apt-get会帮你找到并加载所需的程序库或应用代码,这种方式是比较常用的的。比如我们执行apt-get install mysql-server,可以看到相关的依赖包

2.2線下安裝包

線下安裝言外之意:你要把软件下载到本地去安装。一般我们下载的文件后缀名都是zip、tar.gz等压缩包,解压后会看到rpm、bin、deb、run之类扩展名文件。很多軟件都會提供不同的linux版本的安裝格式。

2.2.1 rpm安裝

常用linux版本:opensuler/turbo/redhat版本。 安裝方法:rpm -ivh 軟件名.rpm

2.2.2 deb安裝包

DEB是Debian軟件包格式的文件擴展名,常用在centos/ubuntu,在蘋果系統裡常用的安裝方式。 安裝方法:dpkg -i 軟件包名.deb

2.2.3 run 安裝包

以QT(一種變成工具)安裝文件為例, (1)授權: chmod x qt-unified-linux-x64-2.0.2-online.run (2)執行:./qt-unified-linux-x64-2.0.2-2-online.run即可安装。

2.2.4 bin安裝包

bin包是一个自解压格式的安装包,要想执行它,需要先赋予它可执行的权限 (以安装jdk为例) #chmod x jdk-6u21-linux-i586.bin #./jdk-6u21-linux-i586.bin

2.2.5 編譯後安裝方式

举例安装nagios插件(nagios是一种开源的监控软件,需要多种插件支持监控模块) 1)cd /tmp/nagios-plugins-* //先进入目录 2)./configure --with-nagios-user=nagios --with-nagios-group=nagios // 配置,即安装的用户安装的路径都可在此设置,这一步一般用来生成 Makefile,为下一步的编译做准备 3)make //编译过程如果 在 make 过程中出现 error ,你就要记下错误代码,缺少什么包就按照什么包。 4) make install //如果make无问题就可以直接安装了。

三、linux 網絡管理

了解网络的配置,以及IP,学习如何配置一个网络,并且了解怎么访问同网络地址的ip,最终初始化一个服务器。

3.1 查看網卡及其狀態

網卡存儲位置:/etc/sysconfig/network-scripts/,可以去具體某個網卡下面去配置網絡,IP

3.2 NetworkManager服務

1.網絡管理器(NetworkManager)是一個動態網絡的控制器與配置系统,它用于当网络设备可用时保持设备和链接开启并激活。 默认情况下,CentOS/RHEL 7已安装网络管理器,并处于启用状态。 查看网络管理程序状态:systemctl status NetworkManager。 查看网络子管理程序的状态:systemctl status network。 查看網絡連接狀態: 命令:nmcli device //查看網絡連接狀態 如果沒有這個命令,可以執行安裝:yum -y install NetWorkManager

3.3 編輯網卡配置文件 cp /etc/sysconfig/network-scripts/ifcfg-ens33 /tmp //将网卡配置文件备份到tmp目录下[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=dhcp/none/static //获取地址的方法手动(none)/静态(static)/自动(DHCP)以后实验都用自动获取。IPADDR=192.168.10.10NETMASK=255.255.255.0DNS=192.168.10.1DEFROUTE=yesIPV4_FAILURE_FATAL=noNAME=ens33UUID=dabfc269-89d8-4332-8615-564735eb90bdDEVICE=ens33ONBOOT=no

重啟網絡服務:systemctl restart network 查看ip: ip a 啟動/關閉網卡:ifup ens33 ifdown ens33

測試兩台計算機的寫連通性:ping 對方ip

防火墻相關: systemctl stop firewalld //臨時關閉防火墻😊 systemctl disable firewalld //關閉防火墻開機自啟

3.3.1 網絡測試工具 #ip a //查看所有IP(ipconfig)#ip route(r) //查看路由,查看网关#ip neigh (n) //另一台计算机ping通,查看邻居#ping //测试连接 3.3.2 ports和services端口服務

安裝httpd: yum -y install httpd 启动httpd服务前,先查看端口:ss -tnl 启动httpd服务(在启动之前一定要确定关闭防火墙) systemctl status firewalld //查看防火墙状态 systemctl start httpd //启动httpd systemctl status httpd //查看httpd状态

注意:nginx和httpd可能会冲突,当时关闭了httpd服务,当然在这里如果不关掉nginx进行是无法启动httpd的。 首先使用ps aux | grep nginx 查看nginx的进程号 再使用 kill 进程号 关掉进程 关掉后就可以启动httpd服务了。

初始化服務器操作

1.為服務器配置root密碼

passwd root密碼

2.配置ip地址 centos系統: 配置文件:vim /etc/sysconfig-scripts/network-ifcfg-ens33

unbutu系統:

3.配置yum源

4.關閉防火墻

systemctl stop firewalld //临时关闭systemctl disable firewalld //取消开机自启systemctl status firewalld //查看防火墙状态

5.selinux,關閉linux自帶的防護

setenforce 0 //临时关闭vim /etc/sysconfig/selinux //永久关闭SELINUX=disabled

6.安裝常用的程序

yum -y install lrzsz sysstat elinks wget net-tools bash-completion

7.開啟xshell,ssh連接 SSH(Secure Shell) 是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能;

7.1SSH开启、端口号、配置文件

客戶端: Linux Client: ssh, scp, sftp,slogin Windows Client: xshell, MobaXterm,putty, securecrt, sshsecureshellclient

服務端: OpenSSh :是實現SSH協議的開源軟件項目,適用與各种UNIX、 Linux 操作系统。 centos 7 系統默認已安裝openssh相關軟件包,並將sshd服務添加為開機自啟(systemctl start sshd)

SSH服務的開啟 systemctl start sshd 啟動服務

SSH服務的端口號 sshd服務使用的端口號默認是22

SSH服務的配置文件 sshd服務的默認配置文件是 /etc/ssh/sshd_config

ssh_config(客戶端)和sshd_config(服務端)都是ssh服務器的配置文件

服務器名稱:sshd服務端主程序:/usr/sbin/sshd服務端配置文件:/etc/ssh/sshd_config客戶端配置文件:/etc/ssh/ssg_config 7.2配置OpenSSH服務端

1.配置文件中的參數

[root@Kiro .ssh]# vim /etc/ssh/sshd_config ##进入服务端配置文件MaxAuthTries 6 ##输入密码次数限制 6代表输错六次就退出PasswordAuthentication yes ##打开密钥PubkeyAuthentication yes ##开启密码认证

2.登錄 方法一 ssh [遠程主機用戶名]@[遠程服務器主機名或IP 地址] -p port

方法二 ssh -l [遠程主機用戶名]@[遠程服務器主機名或IP地址] -p port 3.秘鑰的配置 做了密钥设置之后,服务端远程控制客户端就需要密钥了: (1)生成秘鑰文件: [root@Kiro ~]# ssh-keygen -t ecdsa ##需要自定义设置密码,如果不想设置密码就一直回车 (2)將公鑰文件導入對方的用戶 [root@Kiro ~]# cd /root/.ssh [root@Kiro .ssh]# ls id_ecdsa id_ecdsa.pub known_hosts : [root@Kiro .ssh]# ssh-copy-id -i /root/.ssh/id_ecdsa.pub root@192.168.61.110 ##这一步需要输入对方的密码 (3)再次遠程登錄客戶機 [root@Kiro .ssh]# ssh root@192.168.61.110 Enter passphrase for key ‘/root/.ssh/id_ecdsa’: ##这个时候就需要输入密钥而不是密码了

7.3 使用SSH客戶端程序

命令程序ssh、scp、sftp (1)ssh程序登錄

[root@pxw /]# ssh kiro@192.168.61.100kiro@192.168.61.100's password: Last login: Fri Apr 15 16:43:30 2022 from 192.168.61.110

##第一次登陆时需要接收来自服务端的密钥 博主的客户端不是第一次登陆了所以不需要 (2)SCP遠程複製 通过scp命令可以利用SSH安全连接与远程主机相互复制文件;接下来我为大家做两个演示,分别是把远程主机的文件复制给本机,还有把本机的文件复制给远程主机:

--------远程主机 >>> 本机-------[root@Kiro /]# scp root@192.168.61.110:/etc/passwd /opt/kiro ##将远程主机/etc/passwd 下的文件内容复制到本机/opt/kiro 文件下Enter passphrase for key '/root/.ssh/id_ecdsa': ##需要输入密钥 passwd 100% 2349 1.0MB/s 00:00 ##复制的文件名以及进度条 ---------本机 >>> 远程主机-------[root@Kiro /]# scp /etc/passwd root@192.168.61.110:/opt/pxw##将本机的/etc/passwd 文件内容复制到远程主机/ opt/pxw文件之下Enter passphrase for key '/root/.ssh/id_ecdsa': ##需要输入密钥passwd 100% 2399 614.2KB/s 00:00 ##复制文件名 和进度条

(3)sftp安全FTP 通过sftp命令可以利用 SSH安全连接与远程主机上传、下载文件,采用了与FTP类似的登陆过程和交互式环境,便于目录资源管理接下来博主为大家演示一下登录、浏览、上传文件等过程:

[root@Kiro /]# sftp root@192.168.61.110 ##登录Enter passphrase for key '/root/.ssh/id_ecdsa': ##因为设置了密钥 ,这里输入密码而不是密钥Connected to 192.168.61.110.sftp> ls ##查看一下当前目录下有什么anaconda-ks.cfg initial-setup-ks.cfg sftp> put /boot/config-3.10.0-957.el7.x86_64 ##上传config安装包Uploading /boot/config-3.10.0-957.el7.x86_64 to /root/config-3.10.0-957.el7.x86_64/boot/config-3.10.0-957.el7.x86_64 100% 148KB 1.5MB/s 00:00 sftp> ls ##再次查看 config安装包上传成功anaconda-ks.cfg config-3.10.0-957.el7.x86_64 initial-setup-ks.cfg sftp> bye ##退出登录[root@Kiro /]# 四、linux系統維護 4.1 查看內存情況

1.查看整體內存使用情況:free -m 2.查看整體各個進程內存使用情況:top 3.查看某個端口佔用內存 (1)查看某個端口的PID進程:sudo netstat -anp | grep 8001 運行結果如下: tcp6 0 0 :::8001 ::😗 LISTEN 49850/java

(2)查看佔用內存情況 top -p 49850

4.2 添加yum軟件源

1.添加Docker穩定版本的yum軟件源:

sudo yum-config-manager \ --add-repo \ /linux/centos/docker-ce.repo

2.查看磁盤情況

df -h

3.查看程序對應的進程號

ps -ef | grep 进程名字

4.查看進程所佔用的端口號

netstat -ntlp | grep 進程號

5.查看端口號所使用的進程號

lsof -i:端口號netstat -lnp | grep 端口號

6.查看進程詳情,進程運行路徑

cd /proc/進程號ll

7.關鍵字搜索文件

cat 文件名 | grep xxx

8.查看文件

find 路徑 -name 文件名 五、shell編程

Shell 是一个命令行解释器,为用户提供了一个向 Linux 内核发送请求以便于运行程序的界面系统升级程序。

5.1 Shell腳本創建於執行

1.Shell 脚本在执行时有两个格式上的要求:以 #!/bin/bash 开头、必须有可执行权限 (1)創建新目錄shell用於存放shell腳本

mkdir /root/shellcd /root/shellvi shell.sh //編輯腳本#!/bin/bashecho "heloo wordl!"chmod +x shell.sh //添加可執行權限 5.2 shell變量 5.2.1 系統變量和自定義變量

基本語法:

定義變量:變量名稱=值;撤銷變量:unset 變量名;定義靜態變量:readonly 變量名稱=值(靜態變量不能撤銷);輸出變量:$變量 5.2.2 變量的基本規則

在定义变量时变量名称可以由字母、数字和下划线组成,但不能以数字开头;等号的两侧不能有空格;变量名称一般为大写。

5.2.3 設置環境變量

配置文件: /etc/profile

export 變量名=變量值 //將shell變量輸出為環境變量/全局變量source 配置文件 //讓修改後的配置信息立即生效echo $變量名 //查詢環境變量的值 5.2.4 位置參數變量

获取到命令行的参数信息,就需要使用到位置参数变量

$n //n 为数字,$0 代表命令本身,$1-9 代表第 1 到第 9 个参数,10 以上的参数需要用大括号包含如 ${10}$* //代表命令行中的所有参数,$* 将所有参数看成一个整体$@ //这个变量也可以代表命令行中的所有参数,不过 $@ 把每个参数区分对待$# //代表命令行中所有参数的个数 5.2.5 預定義變量

预定义变量就是 Shell 的设计者事先定义好的变量,可以直接在 Shell 脚本中使用。

$$ //当前进程的进程号码(PID)$! //后台运行的最后一个进程的进程号$? //最后一次执行命令的返回状态,如果这个变量的值为0证明上一个命令正确执行,如果不是 0 上一个命令没有正确执行 5.2.6 運算符

(1)“ ( ( 運算符 ) ) ”或“ ((運算符))”或“ ((運算符))”或“[運算式]”或者 expr m + n //expression 表达式 (2)注意expr 運算符間要有空格,如果希望將 expr 的結果賦給某個變量,使用 (3)expr m - n (4) expr *, /, % 乘,除,取余

5.2.7 条件判断 5.2.7.1 condition

判斷語句: [ condition ] (注意condition前後有空格) 非空返回true,可使用 $?驗證。(0為true,>1為false) 常用判斷條件 (1)= 字符串比較 (2)兩個整數的比較 -lt 小於 -le 小於等於 -eq 等於 -gt 大於 -ge 大於等於 -ne 不等於 (3)按照文件權限進行判斷 -r 有讀的權限 -w 有寫的權限 -x 有執行的權限 (4)按照文件類型進行判斷 -f 文件存在並且是一個常規的文件 -e 文件存在 -d 文件存在並是一個目錄

5.2.7.2 流程控制

(1)if 判斷【单分支】

if 條件代碼1else代碼2

if判斷【多分支】

if [ 條件判斷式1 ]then代碼1elif [ 條件判斷式2 ]then代碼2fi

!!!注意:[ 条件判断式 ],中括号和条件判断式之间必须有空格

(2) case語句

case $變量名 in "值 1") 如果变量的值等于值 1,则执行程序 1 ;; 表示结束第一个语句 "值 2") 如果变量的值等于值 2,则执行程序 2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac 表示结束整个程序[把case反着写]

(3)for循環

for 變量 in 值1 值2 值3..do程序/代碼done for (( 初始值;循環控制條件;變量變化))do程序/代碼done

(4)while循環

while [ 條件判斷式 ]do程序/代碼done

注意:while 和 [有空格,条件判断式和 [也有空格 (5)read讀取控制台輸入 read (選項) (參數) 選項: -p :指定讀取值時的提示符 -t : 指定讀取值時等待的時間(秒),如果沒有在指定的時間內輸入,就不再等待啦。

比如:1.读取控制台输入一个 NUM1 值 read -p "请输入一个数 NUM1=" NUM1 echo "你输入的 NUM1=$NUM1" [如果一直不输值,程序就会一直卡在那里]2:读取控制台输入一个 NUM2 值,在 10 秒内输入。 read -t 10 -p "请输入一个数 NUM2=" NUM2 echo "你输入的 NUM2=$NUM2" 5.2.8 函數 5.2.8.1 系統函數

(1)basename :用於返回完整路徑最後 / 的部分,常用于獲取文件名。 代碼: basename [ pathname ] [ suffix ] basename [ string ] [ suffix ] 【basename 命令會刪掉所有的前綴包括最後一個(‘/’)字符,然後將字符串顯示出來。】 選項:suffix為後綴,如果suffix被指定,basename會將pathname或者string中的suffix去掉。 例如:

請返回 /home/aaa/test.txt 的 “test.txt”部分,basename /home/aaa/test.txt如果輸 basename /home/aaa/test.txt .txt ,就返回test

(2)dirname [和basename正好相反] 用於返回完整路勁最後 / 的前面的部分,常用于返回路徑部分。 dirname 文件绝对路径 (从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

比如: 请返回 /home/aaa/test.txt 的 /home/aaa dirname /home/aaa/test.txt 5.2.8.2 自定義函數 [ function ] funname[()] { Action; [return int;] } 调用直接写函数名: funname [值] 比如:1:计算输入两个参数的和(动态的获取), 函数名: getSum function getSum() { SUM=$[$n1+$n2] #n1和n2是手动输入的数 echo "和是=$SUM" } read -p "请输入一个数 n1=" n1 #输入两个值 read -p "请输入一个数 n2=" n2 getSum $n1 $n2 #调用自定义函数

總結: shell編程綜合案例 (1)每天凌晨2:30備份數據庫 hspedu 到 /home/date(crond) (2)備份開始個備份結束能夠給出相應的提示信息 (3)備份後的文件要求以備份時間為文件名,並打包成 .tar.gz的形式。比如:2023-02-22_102703.tar.gz (4)在備份的同時,檢查對否有10天前備份的數據庫文件,如果有就將其刪除。 (5)畫一個思路分析圖 代碼如下:

/usr/sbin/mysql1_db.backup.sh#備份目錄BACKUP= /data/backup/db#當前時間DATETIME=$(date +%Y-%m-%d_%H%M%S)echo $DATETIME#數據庫地址HOST=localhost#數據庫用戶名DB_USER=ROOT#數據庫密碼DB_PW=123456#備份的數據庫名DATABASE=hspedu#創建備份目錄,如果不存在,就創建[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"#備份數據庫mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz#將文件處理成 tar.gzcd ${BACKUP}tar -zcvf $DATETIME.tar.gz ${DATETIME}#刪除對應的備份目錄rm -rf ${BACKUP}/${DATETIME}#刪除10天前的備份文件find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} echo "備份數據庫${DATEBASE} 成功~" 6.shell編程三劍客

基礎元字符:

\:轉義字符,用於取消特殊符號的含義,如:\! , \$^:匹配字符串開始的位置,如: ^root匹配以root開頭的行$:匹配字符串結束的位置,如:world$ 匹配以world結尾的行.:匹配除\n外的任何一個字符*:匹配前面的子表達式0次貨多次[ ] :匹配[ ]中的一個字符,如:[0-9]匹配任何一個數字[ ^ ]:匹配不在[ ]中任意一個字符,如:[ ^0-9] 匹配任意一個非數字字符\{n\ }:匹配前面子表達式n次,如:[0-9]\{2\}匹配兩位數字\{n,m\}:匹配前面表達式n到m次,如:[a-z]\{2,3\}表示匹配兩位到三位小寫字母\{n,\}:匹配前面的子表達式不少於n次,如:[0-9]\{2,\}表示兩位及兩位以上數字\<:匹配以......開頭的行\>:匹配以.......結尾的行\<......\>:匹配某一個單詞的行

拓展元字符

+:匹配前一個字符一個或多個,如:go+d,將匹配至少一個o?:匹配0個或1個字符,如:go?d,將匹配到gd或god|:或():將括號中的字符串作為一個整體{n}:前一個字符重複n次{n,}:前一個字符至少重複n次{n,m}:前一個字符出現n-m次

grep+egrep

grep是一種強大的文本搜索工具,他能使用特定模式匹配(包括正則表達式)搜索文本,並默認輸出匹配行。grep -v "text":過濾掉包括text的內容查看剩下的文件內容grep "text":查看文件中包含text的行grep "^q":查看文件中以q開頭的內容grep "g$":查看文件中以g結束的內容grep "q*":*代表前面一個字母出現0次或多次grep -v "^$":過濾掉文件裡的空行grep "[rR]oot":查找包含root或Root的文件內容grep -E "^root|Root$":查找以root開頭或Root結尾的文件內容grep -E:相當於egrepgrep -c:顯示有幾行grep -w "text":只找text這個單詞的文件內容grep -i:忽略大小寫查看文件內容grep -o "text":只以行顯示text這個字符 6.1 grep

功能:過濾查找內容 分類:grep egrep:擴展支持正則,fgrep:不支持正則 返回值出現: 0------表示成功【找到了】 1-------表示在所提供的文件無法找到匹配的pattern【沒有】 2-------找到地兒不對

6.1.2 參數: grep -q 靜默grep -v 去反grep -R 查看目錄下面的文件```swiftgrep -R /home/匹配到二进制文件 .cache/mozilla/firefox/ro8zkjdr.default-default/cache2/entries/5773F8741C801CA8FA6328E33D4912694A3E2A8A

grep -o 只找到關鍵字就可以

[root@localhost ~]# grep -o "o" 1.txtooo

grep -B2 前兩行 grep -A2 後兩行 grep -C2 上下兩行

egrep -l 只要文件名```swift[root@localhost ~]# egrep -l 'root' /etc/passwd/etc/passwd

egrep -n 帶行號

[root@localhost ~]# egrep -n 'root' /etc/passwd1:root:x:0:0:root:/root:/bin/bash10:operator:x:11:0:operator:/root:/sbin/nologin 6.2 sed 6.2.1 基礎

1.概念 sed是一種在線的、非交互式的編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱為“模式空間”,接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。

sed的工作流程主要包括讀取、執行和顯示三個過程。 讀取:sed從輸入流(文件、管道、標準輸入)中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間,pattern space) 執行:默認情況下,所有的sed命令都在模式空間中順序地執行,除非指定類行的地址,否則sed命令將會在所有的行上執行。 顯示:發送修改後的內容到輸出流。在發送數據後,模式空間將被清空。

常用選項:-e 進行多次編輯-n 取消默認輸出-f 指定 sed文件名-i 直接在源文件中修改-r 使用擴展正則表達式常用操作:p 打印輸出d 刪除指定行c 替換指定行所有內容s 搜索替換g 表示只要符合條件,全部進行處理r 可以將另一個文件內容讀取到文件中w 可以將另一個 文件內容覆蓋到文件中i 插入,在當前行上面插入一行或多行a 插入,在當前行侯建插入一行或多行y 字符轉換語法格式:sed命令+選項 ‘定位+動作+內容’ 文件名

2.格式 sed 選項 命令 文件 ----------sed [options] ‘command’ file(s) sed 選項 -f 腳本 文件--------sed [options] -f scripfile file(s)

3.返回值 (1)都是0,對錯不管 (2)只有當命令存在語法錯誤時,sed的退出狀態才是非0 (3)sed和正則表達式 查找和替換 基本元字符集:^ $ * [] [^] > < () {} 擴展元字符集:? + | () 使用擴展元字符的方式:+ 轉義 ; sed -r 加r

實例 刪除命令:d 刪除一行中的內容

sed -r '/root/d' passwd 删除带有root的行sed -r '3d' passwd 刪除第3行sed -r '3{d}' passwd 刪除第3行sed -r ‘3{d;}’ passwd {存放sed的多個命令}3{h,d}},jh暫存空間sed -r '3,$d' passwd 刪除3到最後一行sed -r '$d' passwd 刪除最後一行

替換命令: sed -r ‘s/被替換/替換/’

sed -r 's/root/aofo/' passwd #把root替換成aofosed -r 's/^root/aofo/' passwd #把以root開頭的行root替換成aofosed -r '/root/aofo/g' passwd #全部把root替換成aofosed -r 's/[0-9][0-9]$/&.5' passwd #查找雙數,結尾的詞組&,替換成.5;&有查詢結果的含義sed -r 's/(mail)/E\1/g' passwd #把全部的詞mail換成Eail;( )括號組合字符,\1調用括號

讀取文件命令:r 在當前文件中,讀取其他文件“部分”內容

sed -r '$r 1.txt' passwd #讀取1.txt文件的內容sed -r '/root/r 1.txt' passwd #正則搜尋root,在root後面讀取新文件

寫入文件命令:w

sed -r 'w 111.txt' 1.txt #把1.txt全部內容寫入111.txtsed -r '1,5w 123.txt' passwd #把passwd的1,5行寫入123.txt文件

追加命令:a

[root@localhost ~]# sed -r 'a123' 1.txt 在文件1.txt内容中每行后面+123##abc123##adc123 # sed -r '2a123' 1.txt 第二行后面,加上123行##abc##adc123

插入命令:i

[root@localhost ~]# sed -r '2iaaaaaaaaaaaaaaa' 1.txt##abcaaaaaaaaaaaaaaa 在第二行插入aaaaaaaaaaaaa

替換整行命令:c

sed -r '2c3333' 1.txt 把文件1.txt中第二行替換成3333##abc3333

獲取下一行命令:n 反向選擇:! 多重編輯:e

sed -e '1,3d' -e 's/123/1111111111111111111111111/g' 1.txt 删除1-3行,把1.txt中的123 替换成1111111111111

常用命令: 刪除配置文件中#號注釋行:sed -r ‘/^#/d’ /etc/vsftpd/vsftp.conf

7.awk 7.1 awk概念

awk用於在linux/unix下對文本繪本和數據進行處理。它逐行掃描文件,從第一行到最後一行,寸照匹配的特定模式的行,並在這些行上進行你想要的顯得操作。

7.2 工作原理

#awk -F:‘{print $1,$3}’ /etc/passwd

7.3 語法

命令格式: awk 選項 ‘模式或條件{操作}’ 文件1 文件2… awk -f 腳本文件 文件1 文件2 awk [ options] ‘commands’ filename(推薦)

| options | -F定義輸入字段分隔符,默認的分隔符是空格或製表符(tab) | |command|BEGIN{ }:begin發生在行處理前(注意大寫) | { } :行處理時,讀一次執行一次 END{ }:行處理後 AWK常見的內鍵變量(可直接用): FS:列分隔符。指定每行文本的字段分隔符,默認為空格或製表位。與-F作用相同。 NF:當前處理的行的字段個數。 NR:當前處理的行的行號(序號) $0:當前處理的行的整行內容。 $n:當前處理行的第n個字段(第n列) FILENAME:被處理的文件名 RS:行分隔符

7.4格式化輸出print函數 [root@mycat ~]# awk -F: '{print "username is:" $1 "\t uid is:" $3 }' /etc/passwd |head -1****打印 文件/etc/passwd第一行,第一列用户名 第三列UID*****username is:root uid is:0 7.5 模式(正則表達式)和動作

概念:任何awk語句都由模式和動作組成。模式部分決定動作語句何時觸發及觸發事件。 模式:可以是條件測試,正則,復合語句 動作:可以是打印,計算等

7.5.1字符串比較

查找字符串 awk ‘/^root/’ /etc/passwd //查找以root開頭的 awk ‘$0 ~/^root/’ /etc/paswd

$0:計算行數 ~:模糊查找; ^root:以root開頭 !:取反,反向

7.5.2 數值比較

比較表達式採用文本進行比較,只有當條件為真,財執行指定的動作。比較表達式使用關係運算符,用於比較數字與字符串。 關係運算符:< <= == != > >= 算術運算符:+ - * / ^

7.5.3 多條件

邏輯操作符和復合模式語法: &&邏輯與,|| 或 !非 實例: #awk -F: ‘$1~/root/ && $3<=15’ /etc/passwd #awk -F: ‘$1~/root/ || $3<=15’ /etc/passwd 範圍模式語法: awk -F: ‘/adm/,/lpd/’ /etc/passwd //從adm到ldp,顯示出來避免匹配重付的字段

7.5.3.1條件&判斷

if 語句 格式:{if (表達式) {語句;語句…}} 實例: 需求:如果$3是0,就說他是管理員 awk -F: ‘{if ($3==0) {print $1 “is administartor.”}}’ /etc/passwd

if…else 語句 格式:{if() {} else{}} {if (表達式) {語句;語句;…} else {語句;語句;…} } 實例: 需求:統計管理員和系統用戶數量 實例: awk -F: ‘{if($3==0){count++}else{i++}} END {print “管理員個數:” count; print "系統用戶數:"i}’ /etc/passwd

if…else if …else語句 格式:{if (表達式1) {語句;語句;…} else if (表達式2){語句;語句;…} else (表達式3) {語句1;語句2;…}} 實例: 顯示三種用戶的信息,管理員:管理員ID為0,內置用戶:用戶ID<1000,普通用戶:

7.5.3.2 循環

while循環 格式:while (條件) 語法 實例: 每行打印10次 awk ‘{i=1; while(i<=10) {print $0;i++}}’ passwd

for循環 格式:for (語法1;條件;語法2) 內容

數組 定義數組 awk -F: ‘{username[++i]=$1} END{print username[1]}’ /etc/passwd

【无标题】

发布评论

评论列表(0)

  1. 暂无评论