Welcome!😎Swaynie's Blog|

Swaynie

园龄:4年10个月粉丝:1关注:3

2023-02-22 11:10阅读: 33评论: 0推荐: 0

Linux&Shell基础入门笔记

 

Linux&Shell基础入门笔记

linux------目录文件

/bin:binary,存放常用命令

/sbin:存放系统管理员使用的系统管理程序

/home:存放普通用户的主目录

/root:系统管理员主目录

/lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一一些文件。

/etc:所有的系统管理所需要的配置文件和子目录。

/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

/boot:这里存放的是启动Linux时使用的一 些核心文件,包括-些连接文件以及镜像文件,自己的安装别放这里。

/proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

/srv:service缩写, 该目录存放一 些服务启动之后需要提取的数据。

/sys:这是inux2 .6内核的-个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。

/tmp:这个目录是用来存放一 些临时文件的。

/dev:类似于windows的设备管理器,把所有的硬件用文件的形式存储。

/media(CentOS6):linux系统会自动识别一 些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。CentOS7迁移到 /run/media

/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。

/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个mysq|数据库则就可以放到这个目录下。默认是空的。

/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

网络配置

三种连接模式

  1. 桥接模式

    虚拟机直接连接外部物理网络的模式,主机起到了网桥的作用。这种模式下,
    虚拟机可以直接访问外部网络,并且对外部网络是可见的。
    

在这里插入图片描述

  1. NAT模式(NetWork Address Transition)

    虚拟机和主机构建一个专用网络,并通过虚拟网络地址转换(NAT) 设备对IP进行转换。
    虚拟机通过共享主机IP可以访问外部网络,但外部网络无法访问虚拟机。
    

在这里插入图片描述

  1. 仅主机模式
虚拟机只与主机共享一个专用网络,与外部网络无法通信。

在这里插入图片描述

配置网络ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改下面加粗部分,地址根据自身情况替换
service network restart

TYPE=“Ethernet” #网络类型(通常是 Ethemet)
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“static” #IP 的配置方法[none|static|bootp|dhcp](引导
时不 使用协议|静态分配 IP|BOOTP 协议|DHCP 协议)
DEFROUTE=“yes”
IPV4_FAILURE_FATAL=“no”
IPV6INIT=“yes”
IPV6_AUTOCONF=“yes”
IPV6_DEFROUTE=“yes”
IPV6_FAILURE_FATAL=“no”
IPV6_ADDR_GEN_MODE=“stable-privacy”
NAME=“ens33”
UUID=“e83804c1-3257-4584-81bb-660665ac22f6” #随机 id
DEVICE=“ens33” #接口名(设备,网卡)
ONBOOT=“yes” #系统启动的时候网络接口是否有效(yes/no)
#IP 地址
IPADDR=192.168.111.100
#网关
GATEWAY=192.168.111.2
#域名解析器
DNS1=192.168.111.2

1)物理机能 ping 通虚拟机,但是虚拟机 ping 不通物理机,一般都是因为物理机的
防火墙问题,把防火墙关闭就行
(2)虚拟机能 Ping 通物理机,但是虚拟机 Ping 不通外网,一般都是因为 DNS 的设置有
问题
(3)虚拟机 Ping www.baidu.com 显示域名未知等信息,一般查看 GATEWAY 和 DNS 设
置是否正确
(4)如果以上全部设置完还是不行,需要关闭 NetworkManager 服务
systemctl stop NetworkManager 关闭
systemctl disable NetworkManager 禁用
(5)如果检查发现 systemctl status network 有问题 需要检查 ifcfg-ens33

配置主机名

vim /etc/hostname
或者
hostnamectl set-hostname 名字
hostnamectl或者hostname查看

域名解析,修改hosts映射文件

vim /etc/hosts
ip              主机名
-------------------------
192.168.111.100 hadoop100
-------------------------
远程连接:ssh root@hadoop100

linux系统管理

进程&服务

  • 计算机中,一个正在执行的程序或命令,被叫做“进程“( process )
  • 启动之后一只存在、常驻内存的进程,一般被称作“服务”( service )。

service(centos 6)

  • 基本语法

    service 服务名 start|stop|restart|status
    ----------------------------------------
    /etc/init.d
    

systemctl(cenos 7)

  • 基本语法

    systemctl start|stop|restart|status 服务名
    ------------------------------------------
    usr/lib/systemd/system
    

系统运行级别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aduiXvRQ-1677034570742)(null)]

  1. 查看默认级别:vi /etc/inittab
  2. Linux系统有7种运行级别:常用 35
  3. 运行级别
  • 运行级别0:系统停机状态,系统默认运行级别不能设为,否则不能正常启动
  • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
  • 运行级别2:多用户状态(没有NFS),不支持网络
  • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
  • 运行级别4:系统未使用,保留
  • 运行级别5: X11控制台,登陆后进入图形GUI模式
  • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

​ 4.centos7的运行级别简化为:

  • multi-user.target(等价于3)
  • graphical.target(等价于5)

​ 5.查看当前运行级别

systemctl get-default

​ 6.切换运行级别

init 3

基本命令

ln软链接

ln -s /root/info myInfo
------------------------
ln -s  目标文件 重命名文件

useradd

  • 基本语法

    useradd 用户名
    useradd -g 组名 用户名 
    cat /etc/passwd
    

为用户获取sudo权限

vim /etc/sudoers
------------------
用户名 ALL=(ALL)   ALL

%用户组名 ALL=(ALL)   ALL      #为整个用户组添加权限

用户组 操作

添加用户组
groupadd 用户组名

将用户添加到用户组
usermod -g 用户组 用户名

修改用户组名字
groupmod -n 新用户名 旧用户名

删除用户组
groupdel 用户组名

文件属性

如果没有权限,就会出现减号[ - ]。从左至右用0-9这些数字来表示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tqg5Z0RR-1677034574203)(null)]

(1)0 首位表示类型
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等

- 代表文件
d 代表目录
l 链接文档(link file)

(2)第1-3位确定属主(该文件的所有者)拥有该文件的权限。—User
(3)第4-6位确定属组(所有者的同组用户)拥有该文件的权限,—Group
(4)第7-9位确定其他用户拥有该文件的权限 —Other

rwx 作用文件和目录的不同解释

- 作用到文件:

[ r ]代表可读(read): 可以读取,查看
[ w ]代表可写(write): 可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
[ x ]代表可执行(execute):可以被系统执行
- 作用到目录:

[ r ]代表可读(read): 可以读取,ls查看目录内容
[ w ]代表可写(write): 可以修改,目录内创建+删除+重命名目录
[ x ]代表可执行(execute):可以进入该目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D12yd6Ov-1677034574120)(null)]

(1)如果查看到是文件:链接数指的是硬链接个数。
(2)如果查看的是文件夹:链接数指的是子文件夹个数。

更改文件权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cnzBa40u-1677034574758)(null)]

- 第一种方式变更权限
chmod [{ugoa}{+-=}{rwx}] 文件或目录
如:chmod u=rw 文件名
   chmod g+r 文件名
-------------------------------------
- 第二种方式变更权限
chmod [mode=421] [文件或目录]
如:chmod 777

修改整个文件夹里面所有文件的权限
chmod -R 777 文件夹名/

更改文件所有者

chown [选项] [最终用户] [文件或目录]

更改文件所属组

chgrp [最终用户组] [文件或目录]

文件查找

find

1)按文件名:根据名称查找/目录下的.txt文件。
[root@hadoop101 ~]# find -name "*.txt" 
--------------------------------------------------------------2)按拥有者:查找/opt目录下,用户名称为tony的文件
[root@hadoop101 ~]# find /opt -user tony 
---------------------------------------------------------------3)按文件大小:在/home目录下查找大于200m的文件(+n 大于 -n小于 n等于)
[root@hadoop101 ~]find /home -size +204800 

locat

updatedb
locadte tmp

文件压缩

zip:
zip -r 压缩后的名称(my.zip) 文件地址
unzip -d 指定目录 压缩文件

tar:
tar [选项] XXX.tar.gz 文件
------------------------------------
-c 产生.tar 打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解包.tar 文件
-C 解压到指定目录
-------------------------------------
打包:tar -zcvf xxx.tar.gz 文件
解包:tar -zxvf xxx.tar.gz 文件

磁盘查看和分区类

du

du 目录/文件
----------------------------------------------------
-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-a 不仅查看子目录大小,还要包括文件
-c 显示所有的文件和子目录大小后,显示总和
-s 只显示总和
--max-depth=n 指定统计子目录的深度为第 n 层

df查看磁盘空间使用情况

df -h 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hUbxhhbm-1677034574373)(null)]

lsblk查看设备挂载情况

mount/umount挂载/卸载

mount [-t vfstype] [-o options] device dir (功能描述:挂载设备)
umount 设备文件名或挂载点 (功能描述:卸载设备)
--------------------------------------------------------------
-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:
                光盘或光盘镜像:iso9660
                DOS fat16 文件系统:msdos
                Windows 9x fat32 文件系统:vfat
                Windows NT ntfs 文件系统:ntfs
                Mount Windows 文件网络共享:smbfs
                UNIX(LINUX) 文件网络共享:nfs
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
                loop:用来把一个文件当成硬盘分区挂接上系统
                ro:采用只读方式挂接设备
                rw:采用读写方式挂接设备
                iocharset:指定访问文件系统所用字符集
                device 要挂接(mount)的设备
                dir 设备在系统上的挂接点(mount point)
----------------------------------------------------------------
vim /etc/fstab
查看设备所有挂载信息

fdisk分区

fdisk -l (功能描述:查看磁盘分区详情)
fdisk 硬盘设备名 (功能描述:对新增硬盘进行分区操作)
--------------------------------------------------
(1)Linux 分区
Device:分区序列
Boot:引导
Start:从X磁柱开始
End:到Y磁柱结束
Blocks:容量
Id:分区类型ID
System:分区类型

(2)分区操作按键说明
m:显示命令列表
p:显示当前磁盘分区
n:新增分区
w:写入分区信息并退出
q:不保存分区信息直接退出
---------------------------------------------------
创建sdb1分区,并将/home/atguigu挂载到该分区
p主分区e扩展分区,最多有4个主分区,一共最多16个
mkfs格式化 创建文件系统:mkfs -t xfs /dev/sdb1
mount /dev/sdb1 /home/atguigu

ps查看当前系统进程

ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)
----------------------------------------------------
a    列出带有终端的所有用户的进程
x    列出当前用户的所有进程,包括没有终端的进程
u    面向用户友好的显示风格
-e   列出所有进程
-u   列出某个用户关联的所有进程
-f   显示完整格式的进程列表
--------------------------------------------------------
USER:该进程是由哪个用户产生的
UID:用户 ID
PID:进程的 ID 号
C:CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算,执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高
STIME:进程启动的时间
%CPU:该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ:该进程占用虚拟内存的大小,单位 KB;
RSS:该进程占用实际物理内存的大小,单位 KB;
TTY:该进程是在哪个终端中运行的。对于 CentOS 来说,tty1 是图形化终端,tty2-tty6 是本地的字符界面终端。pts/0-255 代表虚拟终端。
STAT:进程状态。常见的状态有:R:运行状态、S:睡眠状态、T:暂停状态、
Z:僵尸状态、s:包含子进程、l:多线程、+:前台显示
START:该进程的启动时间
TIME:该进程占用 CPU 的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名
CMD:启动进程所用的命令和参数

pstree进程树

-p 显示进程的 PID
-u 显示进程的所属用户

netstat显示网络状态和端口占用信息

netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)
netstat –nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
------------------------------------------------------
-a 显示所有正在监听(listen)和未监听的套接字(socket)
-n 拒绝显示别名,能显示数字的全部转化成数字
-l 仅列出在监听的服务状态
-p 表示显示哪个进程在调用

crontab计划任务

-e 编辑 crontab 定时任务
-l 查询 crontab 任务
-r 删除当前用户所有的 crontab 任务
---------------------------------
第一个“*” 一小时当中的第几分钟  0-59
第二个“*” 一天当中的第几小时    0-23
第三个“*” 一个月当中的第几天    1-31
第四个“*” 一年当中的第几月      1-12
第五个“*” 一周当中的星期几      0-7 ( 0 和 7 都 代 表 星 期 日)
----------------------------------------------------------
* 		代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
, 	   代表不连续的时间。比如“0 8,12,16 * * * 命令”,就代表在每天的 8 点 0 分,12 点 0 分,16 点 0       分都执行一次命令
- 		代表连续的时间范围。比如“0 5 * * 1-6 命令”,代表在周一到周六的凌晨 5 点 0 分执行命令
*/n 	代表每隔多久执行一次。比如“*/10 * * * * 命令”,代表每隔 10 分钟就执行一遍命令
-------------------------------------------------------------
45 22 * * * 		命令 每天 22 点 45 分执行命令
0 17 * * 1 			命令 每周 1 的 17 点 0 分执行命令
0 5 1,15 * * 		命令 每月 1 号和 15 号的凌晨 5 点 0 分执行命令
40 4 * * 1-5 		命令 每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 * * * 		命令 每天的凌晨 4 点,每隔 10 分钟执行一次命令
0 0 1,15 * 1 		命令 每月 1 号和 15 号,每周 1 的 0 点 0 分都会执行命令。注意:星期几和几号最好不					 要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

RPM软件包管理

查询:
rpm -qa (功能描述:查询所安装的所有 rpm 软件包)
rpm -qi 包名
---------------
卸载:
rpm -e RPM软件包
rpm -e --nodeps 软件包(卸载软件时,不检查依赖)
---------------
安装:
rpm -ivh RPM 包全名
---------------
-e 			卸载软件包
-i 			安装
-v 			显示详细信息
-h 			进度条
--nodeps    不检查依赖

yum安装

-y 			对所有提问都回答“yes”
install 	安装 rpm 软件包
update 		更新 rpm 软件包
check-update 检查是否有可用的更新 rpm 软件包
remove 		删除指定的 rpm 软件包
list 		显示软件包信息
clean 		清理 yum 过期的缓存
deplist 	显示 yum 软件包的所有依赖关系
----------------------------------------
                  修改源
----------------------------------------
默认的系统 YUM 源,需要连接国外 apache 网站,网速比较慢,可以修改关联的网络
YUM 源为国内镜像的网站,比如网易 163,aliyun 等
1.安装 wget, wget 用来从指定的 URL 下载文件
[root@hadoop101 ~] yum install wget

2.在/etc/yum.repos.d/目录下,备份默认的 repos 文件, 
[root@hadoop101 yum.repos.d] pwd
[root@hadoop101 yum.repos.d] cp CentOS-Base.repo CentOS-Base.repo.backup

3.下载网易 163 或者是 aliyun 的 repos 文件,任选其一,如图 8-2
[root@hadoop101 yum.repos.d] wget
http://mirrors.aliyun.com/repo/Centos-7.repo //阿里云
[root@hadoop101 yum.repos.d] wget
http://mirrors.163.com/.help/CentOS7-Base-163.repo //网易 163

4.使用下载好的 repos 文件替换默认的 repos 文件
例如:用 CentOS7-Base-163.repo 替换 CentOS-Base.repo
[root@hadoop101 yum.repos.d]# mv CentOS7-Base-163.repo CentOS-Base.repo

5.清理旧缓存数据,缓存新数据
[root@hadoop101 yum.repos.d]#yum clean all
[root@hadoop101 yum.repos.d]#yum makecache
yum makecache 就是把服务器的包信息下载到本地电脑缓存起来

6.测试
[root@hadoop101 yum.repos.d]# yum list | grep firefox
[root@hadoop101 ~]#yum -y install firefox

Shell

Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3JPFnth-1677034574909)(null)]

Linux 提供的 Shell 解析器有

cat /etc/shells
---------------
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

变量范围更改

首先自定义一个局部变量:
my_var="Hello,world"
提升为全局变量
export my_var
(只在子shell里面有效)

$符号的使用

$n位置参数

$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
--------------------------------------------
#!bin/bash
echo script name: $0    当前文件名
echo 1st paramater: $1  输出第一个参数
echo 2nd paramater: $2  输出第二个参数

$#获取输入参数个数

$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)
---------------------------------------------
echo paramater numbers: $# 

∗ 、 *、 @

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
---------------------------------------------------------------

$?

$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一
个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明
上一个命令执行不正确了。)
---------------------------------------------------------------------
[11@hadoop101 shells]$ ./helloworld.sh
hello world
[11@hadoop101 shells]$ echo $?
0

运算符

expr 1+2
expr 1 + 2
expr 5 - 3
expr 5 \* 2
--------------------------------
“$((运算式))” 或 “$[运算式]”
a=$(expr 5\*2)
a=`expr 5\*4`
echo $[5*2]
echo S((5*2))
--------------------------------
计算(2+3)* 4 的值
[atguigu@hadoop101 shells]# S=$[(2+3)*4]
[atguigu@hadoop101 shells]# echo $S

条件判断

基本语法
(1test condition
(2)[ condition ](注意 condition 前后要有空格)
注意:条件非空即为 true,[ atguigu ]返回 true,[ ] 返回 false
---------------------------------------------------------
常用判断条件
(1)两个整数之间比较
		-eq 等于(equal)         -ne 不等于(not equal)
		-lt 小于(less than)     -le 小于等于(less equal)
		-gt 大于(greater than)  -ge 大于等于(greater equal)
注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。
注:当两个判断条件在一个方括号内时,使用-a表达&&,使用-o表达||
----------------------------------------------------------
(2)按照文件权限进行判断
		-r 有读的权限(read)
		-w 有写的权限(write)
		-x 有执行的权限(execute)
如:[ -r hello.sh ]
----------------------------------------------------------
(3)按照文件类型进行判断
		-e 文件存在(existence)
		-f 文件存在并且是一个常规的文件(file)
		-d 文件存在并且是一个目录(directory)
-----------------------------------------------------------
多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
a=15
[ $a -lt 20 ] && echo "$a < 20" || echo "$a > 20"

流程控制

if分支

(1)单分支

if [ 条件判断式 ];then
	程序
fi
if [ 条件判断式 ]
then
	程序
fi

(2)多分支

if [ 条件判断式 ]
then
	程序
elif [ 条件判断式 ]
then
	程序
else
	程序
fi

①[ 条件判断式 ],中括号和条件判断式之间必须有空格

②if 后要有空格

注意在判断等式时,可能出现期待一元表达式

#!/bin/bash

if [ $1 = atguigu ]
then
		echo "welcome"
fi
------------当没有输入时报错"期待一元表达式",正确如下---------------
#!/bin/bash

if [ "$1"x = "atguigu"x ]
then
		echo "welcome"
fi

case语句

case $变量名 in
"值 1")
如果变量的值等于值 1,则执行程序 1
;;
"值 2")
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号 )结束。
(2)双分号“;;”表示命令序列结束,相当于 java 中的 break。
(3)最后的“*)”表示默认模式,相当于 java 中的 default。

#!/bin/bash

case $1 in
1)
	echo "one"
;;
2)
	echo "two"
;;
3)
	echo "three"
;;
*)
	echo "number else"
;;
esac

for循环

for (( 初始值;循环控制条件;变量变化 ))
do
	程序
done
for 变量 in 值 1 值 2 值 3…
do
	程序
done
1+2+3+.....+i
-----------------------------------
#!/bin/bash
sum=0
for (( i=1;i<=$1;i++ ))
do
	sum=$[ $sum + $i ]
done
echo $sum
------------------------------------
for os in linux windows macos; do echo $os; done
------------------------------------
for i in {1..100}
do
	sum=$[$sum+$i]
done
echo $sum

{}序列

从1-100的序列
{1..100}

while循环

while [ 条件判断式 ]
do
	程序
done
#!/bin/bash
a=1
while [ $a -le $1 ]
do
	sum=$[$sum+$a]
	a=$[$a+1]
done
echo $sum
-----------另一种写法---------------
#!/bin/bash
a=1
while [ $a -le $1 ]
do
	let sum+=a
	let a++
done
echo $sum

read读取控制台输入

read (选项) (参数)
①选项:
	-p:指定读取值时的提示符;
	-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
②参数:
	变量:指定读取值的变量名
---------------------------------------------------
#!/bin/bash

read -t 10 -p "请输入学号:" number
echo "welcome $number"

系统函数

#!/bin/bash

filename="$1"_log_$(date +%s)
echo $filename
------------------
date +%s(时间戳)

basename

basename [string / pathname] [suffix] 
(功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
basename 可以理解为取路径里的文件名称
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
截取该/home/atguigu/banzhang.txt 路径的文件名称。
basename /home/atguigu/banzhang.txt

basename /home/atguigu/banzhang.txt .txt

dirname

dirname 可以理解为取文件路径的绝对路径名称

[atguigu@hadoop101 ~]$ dirname /home/atguigu/banzhang.txt
/home/atguigu

自定义函数

[ function ] funname[()]
{
	Action;
	[return int;]
}
-------------------------------------------
函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,
将以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255)
实现文件的归档
--------------------------------------------------
#!/bin/bash
#首先判断输入参数个数是否为1,输入的是一个路径名
if [ $# -ne 1 ]
then
	echo "参数个数错误!应该输入一个参数,作为归档目录名"
	exit
fi

# 从参数中获取目录名称
if [ -d $1 ]
then
	echo
else
	echo "目录不存在"
	echo
	exit
fi

DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1);pwd)

# 获取当前日期
DATE=$(date +%y%m%d)

# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE

# 开始归档文件
echo "开始归档..."
echo

tar -czf $DEST $DIR_PATH/$DIR_NAME
if [$? -eq 0]
then
	echo
	echo "归档成功"
	echo "归档文件为: $DEST"
	echo
else
	echo "归档出现问题!"
	echo
fi

exit

正则表达式

1.常规匹配

| grep

2.常用特殊字符

(1)^ 匹配一行的开头

cat /etc/passwd | grep ^a
-----------------------------
以a开头的行

(2)$ 匹配一行的结束

cat /etc/passwd | grep t$
-----------------------------
匹配所有以t结尾的行

(3). 匹配一个任意的字符

cat /etc/passwd | grep r..t
-----------------------------
r和t中间有两个字符的行

(4)* 某一字符出现任意次

cat /etc/passwd | grep ro*t  
------------------------------
可以匹配到root和rot
------------------------------
.*
表示任意字符出现任意次数

(5)[] 字符的区间

[6,8]--------匹配68
[0-9]--------匹配一个0-9的数字
[0-9]*-------匹配任意长度的数字字符串
[a-z]--------匹配一个a-z之间的字符
[a-z]*-------匹配任意长度的
[a-c,e-f]----匹配a-ce-f之间的任意字符
-----------------------------------
cat /etc/passwd | grep r[a,b]t
-----------------------------------
匹配rat或者rbt

(6)\ 转义

cat /etc/passwd | grep '\$'
手机号匹配
| grep ^1[345678][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$
| grep -E ^1[345678][0-9]{9}$

文本处理工具

cut

cut [选项参数] filename

-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c 按字符进行切割 后加加 n 表示取第几列 比如 -c 1

awk

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开

的部分再进行分析处理

awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename
pattern:表示 awk 在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令

-F 指定输入文件分隔符
-v 赋值一个用户定义变量
------------------------------------------
cat /etc/passwd | grep ^root | cut -d ":" -f 1,7
cat /etc/passwd | awk -F ":" '/^root/{print $1","$7}'
只显示/etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列名 user,shell 在最后一行添加"dahaige,/bin/zuishuai"
-----------------------------------------------------------------------
cat /etc/passwd | awk -F ":" 'BEGIN{print "user,shell"}{print $1","$7} END{print "end of file"}'
cat /etc/passwd | awk -v i=1 -F ":" '{print $3+i}'

awk内置变量

FILENAME 文件名
NR 		 已读的记录数(行号)
NF 		 浏览记录的域的个数(切割后,列的个数)

综合案例

我们可以利用 Linux 自带的 mesg 和 write 工具,向其它用户发送消息。


需求:实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直

接跟要发送的消息。脚本需要检测用户是否登录在系统中、是否打开消息功能,以及当前发

送消息是否为空。

#!/bin/bash

# 查看用户是否登录
login_user=$(who | grep -i -m 1 $1 | awk '{print $1}')
if [ -z $login_user ]
then
	echo "$1 不在线!"
	echo "脚本退出.."
	exit
fi

# 查看用户是否开启消息功能
is_allowed=$(who -T | grep -i -m 1 $1 | awk '{print $2}')
if [ $is_allowed != "+" ]
then
	echo "$1 没有开启消息功能"
	echo "脚本退出.."
	exit
fi

# 确认是否有消息发送
if [ -z $2 ]
then
	echo "没有消息发出"
	echo "脚本退出.."
	exit
fi

# 从参数中获取要发送的信息
whole_msg=$(echo $* | cut -d " " -f 2- )

#获取用户登录的终端
user_terminal=$(who | grep -i -m 1 $1 | awk '{print $2}')

# 写入要发送的消息
echo $whole_msg | write $login_user $user_terminal


if [ $? != 0 ]
then
	echo "发送失败!"
else
	echo "发送成功!"
fi
exit

本文作者:Swaynie

本文链接:https://www.cnblogs.com/swaynie/p/17170671.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Swaynie  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 爵士梦 尚先生
爵士梦 - 尚先生
00:00 / 00:00
An audio error has occurred.

爵士梦 (尚先生Remix) - 尚先生/chill boy

词:Chill boy

曲:Chill boy

编曲:尚先生

刚刚那个兄弟说的话

真的让我心痛

游园惊梦

被吓的瞬间没了听众

口感不同 请你放松

别太在意音乐形式

需要来点慢的生物钟

你看他遨游在音乐里头多酷

白日梦飞驰在一望无际的公路

放点Swing Bop

Lucy变身摇摆公主

这时候大脑里的词汇立刻涌出

这年头唱爵士饶舌真不容易

不是说你太软

就是永远爱情主题

又或者

只要你开口就是说你抄袭

留言板里经常

出现蛋堡或是Lu1

我还是喜欢这样唱

脑袋跟着晃

不会失望

不喜欢的同学千万不要勉强

看我演讲 我最擅长

运用幻想文字给你补个妆

摘点菠萝 揉搓 卷成光束

然后点燃 减缓 空气速度

挑来一些Sample

巧妙点缀辞赋

加上底鼓吹起爵士那团雾

摘点菠萝 揉搓 卷成光束

然后点燃 减缓 空气速度

挑来一些Sample

巧妙点缀辞赋

加上底鼓吹起爵士那团雾

摘点菠萝 揉搓 卷成光束

然后点燃 减缓 空气速度

挑来一些Sample

(挑来一些Sample)

加上底鼓

(加上底鼓)

摘点菠萝 揉搓 卷成光束

然后点燃 减缓 空气速度

挑来一些Sample

巧妙点缀辞赋

加上底鼓

吹起爵士那团雾

能让你点头

也能让你搭配牛奶入眠

吹出形状吹出三月春艳

吹出巡礼之年巧遇

南方细雨绵绵

又吹过来的风

拂过波西米亚平原

吹出Lucy

吹出搭船来的嬉皮

吹出你的幻想

介绍全新黏稠主义

吹散困惑

吹出带色彩的多崎作

又吹走了孤单

让你变得不寂寞

吹出苏格兰斯凯岛

世界最边缘的灯塔

吹出奥利诺科平原

一起抽点柯合巴

Just chill 一下

多么美的海霞

所以不用惊讶

坐久等落花

吹出来的Soul

加点文字试着描述一场梦

楚灵王章华宫的美女

给我点着Bong

摇曳的心被荡漾

心花怒放

吹出来的爵士梦

一直摇摇晃晃

(我看着夏天的风景)

(耳边是夏天的风铃)

(你在哪里)