Linux初解

请添加图片描述

  • /root[常用]该目录为系统管理员,也称作超级权限者的用户主目录
  • /bin(/usr/bin、/usr/local/bin)是Binary的缩写,这个目录存放着最经常使用的命令
  • /sbin(/usr/sbin、/usr/local/sbin)s就是SuperUser的意思,这里存放的是系统管理员使用的系统管理程序。
  • /home存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名
  • /lib系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库
  • /lost+found这个目录一般情况下是空的,当系统非法关机后,会将一些遗失的片段放置于此目录
  • /etc[常用]所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库my.conf
  • /usr[常用]这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的programfiles目录。
  • /boot[常用]存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件
  • /proc[不能动]这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息
  • /srv[不能动]service缩写,该目录存放一些服务启动之后需要提取的数据
  • /sys[不能动]这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs=》【别动】
  • /tmp这个目录是用来存放一些临时文件的
  • /dev类似于windows的设备管理器,把所有的硬件用文件的形式存储
  • /media[常用]linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下
  • /mnt[常用]系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。d:/myshare
  • /opt这是给主机额外安装软件所存放的目录。如安装ORACLE数据库就可放到该目录下。默认为空
  • /usr/local[常用]这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
  • /var[常用]这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
  • /selinux[security-enhancedlinux]SELinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置.

一、vi/vim的用法

1.正常模式
以vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右」按键来移动光标,可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、粘贴』来处理你的文件数据。
2.插入模式
按下i,I, o, O, a,A, r,R等任何一个字母之后才会进入编辑模式,一般来说按i即可.
3.命令行模式
输入 esc再输入:在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim 、显示行号等的动作则是在此模式中达成的!

请添加图片描述

常用操作:

1)拷贝当前行yy,拷贝当前行向下的5行5yy,并粘贴(输入p):5yy+p
2)删除当前行 dd,删除当前行向下的5行 : 5dd
3)在文件中查找某个单词[命令行下/关键字,回车查找,输入 n就是查找下一个] :/fs
4)设置文件的行号,取消文件的行号.[命令行下: set nu和 :set nonu]
5)在一般模式下,使用快捷键到该文档的最末行[G]和最首行[gg]
6)在一般模式下,撤销这个动作 : u
7) 在一般模式下,并将光标移动到,输入20,再输入shift+g 20
8)更多的看整理的文档
9)快捷键的键盘对应图

目录对应文件

文件的颜色含义
蓝色目录
绿色可执行文件
红色压缩文件
浅蓝色链接文件
灰色其他文件

二、用户管理

关机&重启命令

  • shutdown -h now 立该进行关机
  • shudown -h 1 1分钟后会关机
  • shutdown r now 重新启动计算机
  • halt 关机,作用和上面一样.
  • reboot 现在重新启动计算机
  • sync 把内存的数据同步到磁盘.

添加用户

useradd 用户名

默认用户目录在 /home/用户名

指定或修改密码

password 用户名

删除用户

userdel 用户名 保留家目录

userdel -r 用户名 不保留家目录

查询用户指令

id 用户名

切换用户

su - 用户名

2)用户组管理

新增组指令:

groupadd 组名

删除组
groupdel 组名

分组:

1)增加用户时直接加上组 :

useradd -g 用户组 用户名

2)增加一个用户zwj,直接将他指定到abc

groupadd abc
useradd -g li abc

修改用户组:

usermod -g 用户组 用户名

usermod -g li abc

三、查看帮助文档

help
linux命令自带的帮助信息

ls --help

man
man是linux提供的一个手册,包含了绝大部分的命令、函数使用说明

该手册分成很多章节(section),使用man时可以指定不同的章节来浏览。

man ls ; man printf

man中各个section意义如下:

Standard commands(标准命令)
System calls(系统调用,如open,write)
Library functions(库函数,如printf,fopen)
Special devices(设备文件的说明,/dev下各种设备)
File formats(文件格式,如passwd)
Games and toys(游戏和娱乐)
Miscellaneous(杂项、惯例与协定等,例如Linux档案系统、网络协定、ASCII 码;environ全局变量)
Administrative Commands(管理员命令,如ifconfig)

四、组管理和权限管理

在linux中的每个用户必须属于一个组,不能独立于组外。

在linux中每个文件有

所有者

所在组

其它组的概念。

查看文件的所有者指令:

ls–ahl

修改文件所有者指令:

chown 用户名 文件名

组的创建

groupadd 组名

创建一个组 abc
groupadd  abc
创建一个用户 m并放入到abc组中
useradd -g abc m

查看文件/目录所在组

ls –ahl

修改文件/目录所在组

chgrp 组名 文件名

权限的基本介绍

ls -l 中显示的内容如下

请添加图片描述
请添加图片描述

#菜鸟教程

0-9位说明第0位确定文件类型(d,-,l,c,b)

l 是链接,相当于windows的快捷方式

d 是目录,相当于windows的文件夹

c 是字符设备文件,鼠标,键盘

b 是块设备(装置文件里面的可供储存的接口设备),比如硬盘

- 则是文件

第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User

第4-6位确定所属组(同用户组的)拥有该文件的权限,—Group

第7-9位确定其他用户拥有该文件的权限—Other

rwx作用到文件

1)[r]代表可读(read):可以读取,查看

2)[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件.

3)[x]代表可执行(execute):可以被执行

rwx作用到目录

1)[r]代表可读(read):可以读取,ls查看目录内容

2)[w]代表可写(write):可以修改,对目录内创建+删除+重命名目录

3)[x]代表可执行(execute):可以进入该目录

例子:

-rwxrw-r-- 1 root root 1213 12月 12 10:54 abc

10个字符确定不同用户能对文件干什么

第一个字符代表文件类型:-l d c b

其余字符每3个一组(rwx)读®写(w)执行(x)

第一组rwx:文件拥有者的权限是读、写和执行

第二组rw-:与文件拥有者同一组的用户的权限是读、写但不能执行

第三组r–:不与文件拥有者同组的其他用户的权限是读不能写和执行

1 文件:硬连接数或目录:子目录数

root 用户

root 组

1213 文件大小(字节),如果是文件夹,显示4096字节

12月 12 10:54 最后修改日期

abc 文件名

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。

同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限

修改权限-chmod

通过chmod指令,可以修改文件或者目录的权限。

第一种方式:+、-、=变更权限

u : 所有者 g : 所有组 o: 其他人 a: 所有人(u、g、o的总和)

1)chmod u=rwx, g=rx, o=x文件/目录名

2)chmod o+w文件/目录名

3)chmod a-x文件/目录名

例如:

1)给abc文件的所有者读写执行的权限,给所在组读执行权限,给其它组读执行权限。chmodu=rwx,g=rx,o=rxabc

2)给abc文件的所有者除去执行的权限,增加组写的权限

chmodu-x,g+wabc

3)给abc文件的所有用户添加读的权限

chmoda+rabc

第二种方式:通过数字变更权限

r=4 w=2 x=1 rwx=4+2+1=7

chmodu=rwx, g=rx, o=x 文件目录名相当于chmod751文件/目录名

crond任务调度

crontab

-e编辑crontab任务
-l查询crontab任务
-r删除当前用户所有crontab任务

任务调度:是指系统在某个时间执行的特定的命令或程序。

任务调度分类:

1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等

2.个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份。

设置任务调度文件:

/etc/crontab设置个人任务调度。

执行 crontab–e 命令。

接着输入任务到调度文件如:*/1 * * * * ls–l /etc/ > /tmp/to.txt

意思说每小时的每分钟执行 ls –l /etc/ > /tmp/to.txt命令

请添加图片描述

特殊符号的说明

请添加图片描述

特殊时间执行案例

请添加图片描述

at定时任务

1)at命令是一次性定时计划任务

2)默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。

3)at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了

4)在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看 ps -ef | grep atd //可以检测atd是否在运行

at命令格式

at [选项] [时间]

按两次 Ctrl+D 结束 at 命令的输入,输出两次

atq命令来查看系统中没有执行的工作任务

atrm 2 //表示编号为2的任务删除

请添加图片描述

五、Linux 磁盘管理

查看所有设备挂载情况

lsblk 或者 lsblk-f

磁盘管理常用三个命令为 df、du和fdisk。

  • df:列出文件系统的整体磁盘使用量
  • du:检查磁盘空间使用量
  • fdisk:用于磁盘分区

df -h

获取硬盘所被占用的空间,目前还剩下多少空间等信息

-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示

du -h

查询指定目录的磁盘占用情况,默认为当前目录-秒指定目录占用大小汇总

-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;

fdisk

fdisk 是 Linux 的磁盘分区表操作工具。

磁盘格式化

mkfs [-t 文件系统格式] 装置文件名

mkfs -t ext4 /dev/sdb1

  • -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

磁盘挂载与卸除

挂载:将一个分区与一个目录联系起来,安装设备名称挂载目录

例如:mount /dev/sdb1 /newdisk

卸除:

umount 设备名称或者挂载目录

例如:umount /dev/sdb1 或者 umount/newdisk

永久挂载:

通过修改/etc/fstab实现挂载添加完成后执行安装–一即刻生效

磁盘情况

1)统计/opt文件夹下文件的个数

ls -l /opt | grep"^-"| wc -l

2)统计/opt文件夹下目录的个数

ls -l /opt | grep "^d" | wc -l

3)统计/opt文件夹下文件的个数,包括子文件夹里的

ls -lR /opt | grep "^-" | wc -l

4)统计/opt文件夹下目录的个数,包括子文件夹里的

ls -lR /opt | grep "^d" | wc -l

5)以树状显示目录结构

tree 目录

注意,如果没有tree,则使用yum install tree安装

六、Linux网络配置原理图

linux网络环境配置

第一种方法(自动获取):说明:登陆后,通过界面的来设置自动获取ip

特点:linux启动后会自动获取IP,缺点是每次自动获取的ip地址可能不一样

第二种方法(指定ip):

直接修改配置文件来指定IP,并可以连接到外网

方法: vi /etc/sysconfig/network-scripts/ifcfg-ens33

要求:将ip地址配置的静态的,比如:ip地址为192.168.200.130

ifcfg-ens33文件说明

DEVICE=eth0#接口名(设备,网卡)

HWADDR=00:0C:2x:6x:0x:xx#MAC地址

TYPE=Ethernet#网络类型(通常是Ethemet)

UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44#随机id

#系统启动的时候网络接口是否有效(yes/no)

ONBOOT=yes

#IP的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)

BOOTPROTO=static
#IP 地址
IPADDR=192.168.200.130
#网关
GATEWAY=192.168.200.2
#域名解析器
DNS1=192.168.200.2

最后重启网络服务或者重启系统生效 service network restart、reboot

设置主机名和hosts映射

修改主机名:

1)查看主机名:hostname

2)修改文件在/etc/hostname指定

3)修改后,重启生效

设置hosts映射:

windows

在C:\Windows\System32\drivers\etc\hosts文件指定即可

案例:192.168.96.128 zzz001

linux

在/etc/hosts文件指定

案例:192.168.200.1 主机名

进程管理

显示系统执行的进程ps

-a显示终端上的所有进程,包括其他用户的进程
-u显示进程的详细状态
-x显示没有控制终端的进程
-w显示加宽,以便显示更多的信息
-r只显示正在运行的进程

应用实例:

以全格式显示当前所有的进程,查看进程的父进程。查看sshd的父进程信息

ps -ef 是以全格式显示当前所有的进程

-e显示所有进程

-f全格式

ps -ef | grep sshd

终止进程 kill 和 killall

kill:进程号(通过进程号杀死/终止进程)

killall:进程名称(通过进程名称杀死进程,也支持通配符)

-9:表示强迫进程立即停止

查看进程树 pstree

-p:显示进程的PID

-u:显示进程的所属用户

firewall指令

1)打开端口:firewall -cmd --permanent --add-port=端口号/协议

2)关闭端口:firewall -cmd --permanent --remove-port=端口号/协议

3)重新载入,才能生效:firewall -cmd --reload

4)查询端口是否开放:firewall -cmd --query-port=端口/协议

七、RPM与YUM

rpm包的管理

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。

rpm包的简单查询指令

查询已安装的rpm列表

rpm –qa | grep xx

看看当前系统,是否安装了firefox
rpm	-qa	| grep firefox

rpm包名基本格式

一个rpm包名:firefox-60.2.2-1.el7.centos.x86_64

名称:firefox

版本号:60.2.2-1

适用操作系统:el7.centos.x86_64

表示centos7.x的64位系统如果是i686、i386表示32位系统,noarch表示通用

rpm包的其它查询指令:

rpm -qa : 查询所安装的所有 rpm 软件包
rpm	-qa | more
rpm	-qa	| grepX[rpm-qa|grepfirefox]
rpm	-q	软件包名 :查询软件包是否安装
rpm	-qi	软件包名 :查询软件包信息
rpm	-ql	软件包名 :查询软件包中的文件
rpm	-qf	文件全路径名	:查询文件所属的软件包
rpm	-e	包的名称 :卸载rpm包
安装rpm包

rpm -ivh RPM包全路径名称

参数说明:

i=install安装

v=verbose提示

h=hash进度条

卸载和安装firefox浏览器
rpm -e firefox
rpm -ivh firefox
YUM

Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

基本指令

查询yum服务器是否有需要安装的软件

yum list | grep xx软件列表

安装指定的yum包

yum install xxx下载安装

八、搭建JavaEE环境

安装JDK
安装步骤:
1.mkdir /opt/jd
2.把压缩包放到/opt/jdk
3.解压tar -zxvf jdk-8u261-linux-x64.tar.gz
4.mkdir /usr/local/java
5.mv /opt/jdk/jdk1.8.0_261 /usr/local/java
6.配置环境变量的配置文件vim /etc/profile
7.export JAVA_HOME=/usr/local/java/jdk1.8.0_261
8.export PATH=$JAVA_HOME/bin:$PATH
9.source /etc/profile [让新的环境变量生效]

九、Shell编程

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

脚本格式要求

1)脚本以 #/bin/bash开头

2)脚本需要有可执行权限

vim hello.sh
#!/bin/bash
echo "love is responsibility!!!"
脚本的常用执行方式

方式1(输入脚本的绝对路径或相对路径)

说明:首先要赋予hello.sh脚本的+x权限,再执行脚本

比如./hello.sh或者使用绝对路径 /root/shcode/hello.sh

方式2(sh+脚本)

说明:不用赋予脚本+x权限,直接执行即可。

比如sh hello.sh,也可以使用绝对路径

[root@soldier01 shcode]# ./hello.sh
-bash: ./hello.sh: Permission denied
[root@soldier01 shcode]# sh hello.sh
love is responsibility!!!
[root@soldier01 shcode]# ll
total 4
-rw-r--r-- 1 root root 48 Dec 26 11:08 hello.sh
[root@soldier01 shcode]# chmod u+x hello.sh
[root@soldier01 shcode]# ll
total 4
-rwxr--r-- 1 root root 48 Dec 26 11:08 hello.sh
[root@soldier01 shcode]# ./hello.sh
love is responsibility!!!
Shell的变量

1)LinuxShell中的变量分为,系统变量和用户自定义变量。

2)系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER等等,比如:echo$HOME等等…

3)显示当前shell中所有变量:set

shell变量的定义

基本语法1)定义变量:变量名=值

2)撤销变量:unset变量

3)声明静态变量:readonly变量,注意:不能unset

1)案例1:定义变量A

2)案例2:撤销变量A

3)案例3:声明静态的变量B=2,不能unset

A=100
B=200
echo A=$A
echo "B=$B"
unset A
echo A=$A
echo "B=$B"
-------------
A=100
B=200
A=
B=200

定义变量的规则:

1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)

2)等号两侧不能有空格

3)变量名称一般习惯为大写,这是一个规范,我们遵守即可

Shell 字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

双引号

A="power"
str="With great $A comes great responsibility "
echo $str
----------
With great power comes great responsibility

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

获取字符串长度

str="abcd"
echo ${#str} #4

shell脚本的多行注释

:<<! 内容 !

read命令

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

#!/bin/sh
read aaa 
echo "$aaa it is great"
----------
love #输入love
love it is great #输出
位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量

比如:./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息

参数说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。 如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@ ∗ 相同,但是使用时加引号,并在引号中返回每个参数。如 " *相同,但是使用时加引号,并在引号中返回每个参数。 如" 相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
---------
$ ./hello.sh 1 2 3
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3
数组

定义格式:

array=(value1 value2 ... valuen)

读取格式:

${array_name[index]}

实例

#定义:
array01=(A B C D)
#读取数组:
echo "第一个元素为: ${array01[0]}"
echo "第二个元素为: ${array01[1]}"
echo "第三个元素为: ${array01[2]}"
echo "第四个元素为: ${array01[3]}"
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D

获取数组中的所有元素

使用@ 或 * 可以获取数组中的所有元素,例如:

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
--------------
数组的元素为: A B C D
数组的元素为: A B C D
Shell 基本运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr。

基本语法

( ( 运算式 ) ) " 或 " ((运算式))"或" ((运算式))""[运算式]”

Tag1=$((2+3))
Tag2=$[4+5]
echo "Tag1=$Tag1"
echo "Tag2=$Tag2"
-------------------
Tag1=5
Tag2=9

expr

使用的是反引号 `

val=`expr 2 + 3`
echo  $val
------------
5

注意:

  • 表达式和运算符之间要有空格,例如 2+3 是不对的,必须写成 2 + 3,这与我们熟悉的大多数编程语言不一样。
算术运算符

a 为 10,变量 b 为 20:

运算符说明举例
+加法expr $a + $b 结果为 30。
-减法expr $a - $b 结果为 -10。
*乘法expr $a \* $b 结果为 200。
/除法expr $b / $a 结果为 2。
%取余expr $b % $a 结果为 0。
=赋值a=$b 把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

注意:

  • 条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]
  • 乘号(*)前边必须加反斜杠 \ 才能实现乘法运算;
关系运算符

常用判断条件

  1. =字符串比较

2)两个整数的比较

假定变量 a 为 10,变量 b 为 20:

运算符说明举例
-eq相等=,返回 true。[ $a -eq $b ] 返回 false。
-ne不相等返回 true。[ $a -ne $b ] 返回 true。
-gt大于>,则返回 true。[ $a -gt $b ] 返回 false。
-lt小于<,则返回 true。[ $a -lt $b ] 返回 true。
-ge大于等于>=,则返回 true。[ $a -ge $b ] 返回 false。
-le小于等于<=,则返回 true。[ $a -le $b ] 返回 true。

3)按照文件权限进行判断

-r有读的权限

-w有写的权限

-x有执行的权限

4)按照文件类型进行判断

-f文件存在并且是一个常规的文件

-e文件存在

-d文件存在并是一个目录

test 命令

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

num1="abc"
num2="efg"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi
----------
两个字符串不相等
function fun(){
        echo "fsd"
}
fun
--------
fsd
布尔运算符
运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。
逻辑运算符
运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串运算符

a 为 “abc”,变量 b 为 “efg”:

运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否不相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否不为 0,不为 0 返回 true。[ -n “$a” ] 返回 true。
$检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。
printf 命令

默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n

printf 命令的语法:

printf  format-string  [arguments...]

参数说明:

  • format-string: 为格式控制字符串
  • arguments: 为参数列表。
printf "%-10s %-8s %-4s\n"  姓名 性别  体重kg  
printf "%-10s %-8s %-4.2f\n" ab  man  55.5555
printf "%-10s %-8s %-4.2f\n" cd  man  66.6666
printf "%-10s %-8s %-4.2f\n" df  woman 77.7777
姓名     性别   体重kg
ab       man    55.56
cd       man    66.67
df       woman  77.78

%s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。

%-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中 .2 指保留2位小数。

流程控制

if判断

基本语法

if
[
条件判断式
]
then
代码
fi
或者
,
多分支
if
[
条件判断式
]
then
代码
elif
[
条件判断式
]
then
代码
fi

实例

if [ $1 -ge 60 ]
then
        echo "great"
elif [ $1 -lt 60 ]
then
        echo "bad"
fi
------------
./hello.sh 54
bad
./hello.sh 65
great

for 循环

基本语法

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

实例:

for val in 3 4 5 6
do
        echo "val=$val"
done
-----------
val=3
val=4
val=5
val=6

while 语句

基本语法

while condition
do
    command
done

实例:

a=1
while (( $a <= 5 ))
do
    echo $a
    let "a++"
done

case … esac

基本语法

case 值 in
条件1)
    command1
    ;;
条件2)
    command2
    ;;
esac

实例:

case $1 in
"1")
        echo “yi”;;
"2")
        echo "er";;
esac
-----------
./hello.sh 2
函数

系统函数

basename

功能:返回完整路径最后/的部分,常用于获取文件名

dirname

基本语法功能:返回完整路径最后/的前面的部分,常用于返回路径部分

自定义函数

[function] funname[()]
{
	Action;
	[return int;]
}

调用直接写函数名:funname[值]

function fun(){
        echo "fsd"
}
fun
-----------
fsd

十、日志管理

日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。

可以这样理解日志是用来记录重大事件的工具

系统常用的日志

请添加图片描述

rsyslogd

查询Linux中的rsyslogd服务是否启动

ps aux|grep "rsyslog"|grep -v "grep"

查询rsyslogd服务的自启动状态

systemctl list-unit-files|grep rsyslog

[root@soldier01 ~]# ps aux|grep "rsyslog"|grep -v "grep"
root      1086  0.0  0.6 226720 11364 ?        Ssl  Dec28   0:07 /usr/sbin/rsyslogd -n
[root@soldier01 ~]# systemctl list-unit-files|grep rsyslog
rsyslog.service                               enabled

配置文件:/etc/rsyslog.conf

编辑文件时的格式为:

*.*存放日志文件其中第一个*代表日志类型,第二个*代表日志级别

实例:

日志管理服务应用实例在/etc/rsyslog.conf中添加一个日志文件/var/log/zzz.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存
日志轮替

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除

日志轮替文件命名

1)centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中"日期ext"参数:

2)如果配置文件中有"日期ext"参数,那么日志会用日期来作为日志文件的后缀,例如"安全-20201010"。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。

3)如果配置文件中没有"日期ext"参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的"安全"日志会自动改名为"安全。",然后新建"安全"日志,用来保存新的日志。当第二次进行日志轮替时,“安全。“会自动改名为"安全。”,当前的"安全"日志会自动改名为"安全。”,然后也会新建"安全"日志,用来保存新的日志,以此类推。

logrotate配置文件

/etc/logrotate.conf为logrotate的全局配置文件

#旋转日志文件周刊每周对日志文件进行一次轮替

weekly

#keep4weeksworthofbacklogs,共保存4份日志文件,当建立新的日志文件时,旧的将会被删除

rotate4

#create new(empty) log files after rotating old ones,创建新的空的日志文件,在日志轮替后

create

#use date as a suffix of the rotated file,使用日期作为日志轮替文件的后缀dateext

#uncomment this if you want your log files compressed,日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩#compress

#RPM packages drop log rotation information into this directory include/etc/logrotate.d

#包含/etc/logrotate.d/目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来,

#下面是单独设置,优先级更高。

#no packages own wtmp and btmp–we’ll rotate them here

/var/log/wtmp{

​ monthly #每月对日志文件进行一次轮替

​ create 0664 root utmp #建立的新日志文件,权限是0664,所有者是root,所属组是utmp组

​ minsize1M#日志文件最小轮替大小是1MB。也就是日志一定要超过1MB才会轮替,否则就算时间达到一个月,也不进行日志转储

​ rotate1 #仅保留一个日志备份。也就是只有wtmp和wtmp.1日志保留而已

}

/var/log/btmp{

​ missingok#如果日志不存在,则忽略该日志的警告信息

​ monthly

​ create 0600 root utmp

​ rotate1

}

参数说明:

参数 参数说明

daily 日志的轮替周期是每天

weekly 日志的轮替周期是每周

monthly 日志的轮替周期是每月

rotate 数字保留的日志文件的个数。0指没有备份

compress 日志轮替时,旧的日志进行压缩

create mode owner group建立新日志,同时指定新日志的权限与所有者和所属组。

mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。

missingok 如果日志不存在,则忽略该日志的警告信息

notifempty 如果日志为空文件,则不进行日志轮替

minsize大小 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替

size大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。

dateext 使用日期作为日志轮替文件的后缀。

sharedscripts 在此关键字之后的脚本只执行一次。

prerotate/endscript 在日志轮替之前执行脚本命令。

postrotate/endscript 在日志轮替之后执行脚本命令。

十一、安装webmin和bt运维工具

webmin安装

1)下载地址: http://download.webmin.com/download/yum/

或命令

下载:wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm

2)安装:rpm-ivhwebmin-1.700-1.noarch.rpm

3)重置密码:/usr/libexec/webmin/changepass.pl /etc/webmin root test

root是webmin的用户名,不是OS的,这里就是把webmin的root用户密码改成了test

4)修改webmin服务的端口号(默认是10000出于安全目的)vim/etc/webmin/miniserv.conf #修改端口

5)将port=10000修改为其他端口号,如port=8448

6)重启webmin

/etc/webmin/restart#重启

/etc/webmin/start#启动

/etc/webmin/stop#停止

7)防火墙放开8448端口

firewall-cmd–zone=public–add-port=8448/tcp–permanent#配置防火墙开放8448端口

firewall-cmd–reload#更新防火墙配置

firewall-cmd–zone=public–list-ports#查看已经开放的端口号

8)登录webmin http://ip:8448可以访问了用root账号和重置的新密码test

bt(宝塔)安装

1)安装

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

2)如果bt的用户名,密码忘记了,使用bt default可以查看

Linux命令集

关机/重启/注销

常用命令作用
shutdown -h now即刻关机
shutdown -h 1010分钟后关机
shutdown -h 11:0011:00关机
shutdown -h +10预定时间关机(10分钟后)
shutdown -c取消指定时间关机
shutdown -r now重启
shutdown -r 1010分钟之后重启
shutdown -r 11:00定时重启
reboot重启
init 6重启
init 0⽴刻关机
telinit 0关机
poweroff⽴刻关机
halt关机
syncbuff数据同步到磁盘
logout退出登录Shell

系统信息和性能查看

常用命令作用
uname -a查看内核/OS/CPU信息
uname -r查看内核版本
uname -m查看处理器架构
arch查看处理器架构
hostname查看计算机名
who显示当前登录系统的⽤户
who am i显示登录时的⽤户名
whoami显示当前⽤户名
cat /proc/version查看linux版本信息
cat /proc/cpuinfo查看CPU信息
cat /proc/interrupts查看中断
cat /proc/loadavg查看系统负载
uptime查看系统运⾏时间、⽤户数、负载
env查看系统的环境变量
lsusb -tv查看系统USB设备信息
lspci -tv查看系统PCI设备信息
lsmod查看已加载的系统模块
grep name用于查找内容包含指定的范本样式的文件
grep MemTotal /proc/meminfo查看内存总量
grep MemFree /proc/meminfo查看空闲内存量
free -m查看内存⽤量和交换区⽤量
date显示系统⽇期时间 date"+%Y-%m-%d%H:%M:%S"
cal 2021显示2021⽇历表
top动态显示cpu/内存/进程等情况
vmstat 1 20每1秒采⼀次系统状态,采20次
iostat查看io读写/cpu使⽤情况
查看io读写/cpu使⽤情况查询cpu使⽤情况(1秒⼀次,共10次)
sar -d 1 10查询磁盘性能

磁盘和分区

常用命令作用
fdisk -l查看所有磁盘分区
swapon -s查看所有交换分区
df -h查看磁盘使⽤情况及挂载点
df -hl同上
du -sh /dir查看指定某个⽬录的⼤⼩
du -sk * | sort -rn从⾼到低依次显示⽂件和⽬录⼤⼩
mount /dev/hda2 /mnt/hda2挂载hda2盘
mount -t ntfs /dev/sdc1 /mnt/usbhd1指定⽂件系统类型挂载(如ntfs)
mount -o loop xxx.iso /mnt/cdrom挂 载 iso ⽂ 件
umount -v /dev/sda1通过设备名卸载
umount -v /mnt/mymnt通过挂载点卸载
fuser -km /mnt/hda1强制卸载(慎⽤)

⽤户和⽤户组

常用命令作用
useradd codesheep创建⽤户
userdel -r codesheep删除⽤户
usermod -g group_name user_name修改⽤户的组
usermod -aG group_name user_name将⽤户添加到组
usermod -s /bin/ksh -d /home/codepig –g dev codesheep修改⽤户codesheep的登录Shell、主⽬录以及⽤户组
groups test查看test⽤户所在的组
groupadd group_name创建⽤户组
groupdel group_name删除⽤户组
groupmod -n new_name old_name重命名⽤户组
su - user_namesu - user_name
passwd修改⼝令
passwd codesheep修改某⽤户的⼝令
w查看活动⽤户
id codesheep查看指定⽤户codesheep信息
last查看⽤户登录⽇志
crontab -l查看当前⽤户的计划任务
cut -d: -f1 /etc/passwd查看系统所有⽤户
cut -d: -f1 /etc/group查看系统所有组

⽹络和进程管理

常用命令作用
ifconfig查看⽹络接⼝属性
ifconfig eth0查看某⽹卡的配置
route -n查看路由表
netstat -lntp查看所有监听端⼝
netstat -antp查看已经建⽴的TCP连接
netstat -lutp查看TCP/UDP的状态信息
ifup eth0启⽤eth0⽹络设备
ifdown eth0禁⽤eth0⽹络设备
iptables -L查看iptables规则
ifconfig eth0 192.168.1.1 netmask 255.255.255.0配置ip地址
dhclient eth0以dhcp模式启⽤eth0
route add -net 0/0 gw Gateway_IP配置默认⽹关
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1配置静态路由到达⽹络’192.168.0.0/16’
route del 0/0 gw Gateway_IP删除静态路由
hostname查看主机名
host www.baidu.com解析主机名
nslookup www.baidu.com查询DNS记录,查看域名解析是否正常
ps -ef查看所有进程
ps -ef | grep codesheep过滤出你需要的进程
kill -s namekill指定名称的进程
kill -s pidkill指定pid的进程
top实时显示进程状态
vmstat 1 20每1秒采⼀次系统状态,采20次
iostatiostat
sar -u 1 10查询cpu使⽤情况(1秒⼀次,共10次)
sar -d 1 10查询磁盘性能

常⻅系统服务命令

常用命令作用
chkconfig --list列出系统服务
service <服务名> status查看某个服务
service <服务名> start启动某个服务
service <服务名> stop终⽌某个服务
service <服务名> restart重启某个服务
systemctl status <服务名>查看某个服务
systemctl start <服务名>启动某个服务
systemctl stop <服务名>终⽌某个服务
systemctl restart <服务名>重启某个服务
systemctl enable <服务名>关闭⾃启动
systemctl disable <服务名>关闭⾃启动

⽂件和⽬录操作

常用命令作用
cd <⽬录名>进⼊某个⽬录
cd …回上级⽬录
cd …/…回上两级⽬录
cd进个⼈主⽬录
cd -回上⼀步所在⽬录
pwd显示当前路径
ls查看⽂件⽬录列表
ls -F查看⽬录中内容(显示是⽂件还是⽬录)
ls -l查看⽂件和⽬录的详情列表
ls -a查看隐藏⽂件
ls -lh查看⽂件和⽬录的详情列表(增强⽂件⼤⼩易读性)
ls -lSr查看⽂件和⽬录列表(以⽂件⼤⼩升序查看)
tree查看⽂件和⽬录的树形结构
mkdir <⽬录名>创建⽬录
mkdir dir1 dir2同时创建两个⽬录
mkdir -p /tmp/dir1/dir2创建⽬录树
rm -f file1删除’file1’⽂件
rmdir dir1删除’dir1’⽬录
rm -rf dir1删除’dir1’⽬录和其内容
rm -rf dir1 dir2同时删除两个⽬录及其内容
mv old_dir new_dir重命名/移动⽬录
cp file1 file2复制⽂件
cp dir/* .复制某⽬录下的所有⽂件⾄当前⽬录
cp -a dir1 dir2复制⽬录
cp -a /tmp /dir1 .复制⼀个⽬录⾄当前⽬录
cp file /*复制⼀个⽂件⾄指定⽬录
ln -s file1 link1创建指向⽂件/⽬录的软链接
ln file1 lnk1创建指向⽂件/⽬录的物理链接
find / -name file1从跟⽬录开始搜索⽂件/⽬录
find / -user user1搜索⽤户user1的⽂件/⽬录
find /dir -name *.bin在⽬录/dir中搜带有.bin后缀的⽂件
find / -size num(单位)根据文件大小查找文件(+n 大于 -n小于 n等于)
locate <关键词>快速定位⽂件
locate *.mp4寻找.mp4结尾的⽂件
whereis <关键词>显示某⼆进制⽂件/可执⾏⽂件的路径
which <关键词>查找系统⽬录下某的⼆进制⽂件
chmod ugo+rwx dir1设置⽬录所有者(u)、群组(g)及其他⼈(o)的读(r)写(w)执⾏(x)权限
chmod go-rwx dir1移除群组(g)与其他⼈(o)对⽬录的读写执⾏权限
chown user1 file1改变⽂件的所有者属性
chown -R user1 dir1改变⽬录的所有者属性,该目录下的所有文件的属组都会更改
chgrp group1 file1改变⽂件群组
chown user1:group1 file1改变⽂件的所有⼈和群组
echo输出内容到控制台 类似printf

⽂件查看和处理

常用命令作用
cat file1查看⽂件内容
cat -n file1查看内容并标示⾏数
tac file1从最后⼀⾏开始反看⽂件内容
more file1more file1 空白键–翻下一页 q–离开more
less file1类似more命令,但允许反向操作,效率高
head -2 file1查看⽂件前两⾏ 不写-n默认显示10行
tail -2 file1查看⽂件后两⾏ 类似head
tail -f /log/msg实时查看添加到⽂件中的内容 退出ctrl+c
grep "关键词"hello.txt在⽂件hello.txt中查找关键词 -n显示行号
grep ^sheep hello.txt在⽂件hello.txt中查找以sheep开头的内容
grep [0-9] hello.txt选择hello.txt⽂件中所有包含数字的⾏
sed ‘s/s1/s2/g’ hello.txt将hello.txt⽂件中的s1替换成s2
sed ‘/^$/d’ hello.txt从hello.txt⽂件中删除所有空⽩⾏
sed ‘/ *#/d; /^$/d’ hello.txt从hello.txt⽂件中删除所有注释和空⽩⾏
sed -e ‘1d’ hello.txt从⽂件hello.txt 中排除第⼀⾏
sed -n ‘/s1/p’ hello.txt查看只包含关键词"s1"的⾏
sed -e ‘s/ *$//’ hello.txt删除每⼀⾏最后的空⽩字符
sed -e ‘s/s1//g’ hello.txt从⽂档中只删除词汇s1并保留剩余全部
sed -n ‘1,5p;5q’ hello.txt查看从第⼀⾏到第5⾏内容
sed -n ‘5p;5q’ hello.txt查看第5⾏
paste file1 file2合并两个⽂件或两栏的内容
paste -d ‘+’ file1 file2合并两个⽂件或两栏的内容,中间⽤"+"区分
sort file1 file2排序两个⽂件的内容
comm -1 file1 file2⽐较两个⽂件的内容(去除’file1’所含内容)
comm -2 file1 file2⽐较两个⽂件的内容(去除’file2’所含内容
comm -3 file1 file2⽐较两个⽂件的内容(去除两⽂件共有部分)
> 重定向—覆盖原文件内容 : > 覆盖文件 被覆盖文件
>> 追加内容在原文件基础上追加内容

打包和解压

常用命令作用
zip xxx.zip file压缩⾄zip包
zip -r xxx.zip file1 file2 dir1将多个⽂件+⽬录压成zip包
unzip xxx.zip解压zip包
tar -cvf xxx.tar file创建⾮压缩tar包
tar -cvf xxx.tar file1 file2 dir1将多个⽂件+⽬录打tar包
tar -tf xxx.tar查看tar包的内容
tar -xvf xxx.tar解压tar包
tar -xvf xxx.tar -C /dir将tar包解压⾄指定⽬录
tar -cvfj xxx.tar.bz2 dir创建bz2压缩包
tar -jxvf xxx.tar.bz2解压bz2压缩包
tar -cvfz xxx.tar.gz dir创建gzip压缩包
tar -zxvf xxx.tar.gz解压gzip压缩包
bunzip2 xxx.bz2解压bz2压缩包
bzip2 filename压缩⽂件
gunzip xxx.gz解压gzip压缩包
gzip filename压缩⽂件
gzip -9 filename最⼤程度压缩

RPM包管理命令

常用命令作用
rpm -qa查看已安装的rpm包
rpm -q pkg_name查询某个rpm包
rpm -q --whatprovides xxx显示xxx功能是由哪个包提供的
rpm -q --whatrequires xxx显示xxx功能被哪个程序包依赖的
rpm -q --changelog xxx显示xxx包的更改记录
rpm -qi pkg_name查看⼀个包的详细信息
rpm -qd pkg_name查询⼀个包所提供的⽂档
rpm -qc pkg_name查看已安装rpm包提供的配置⽂件
rpm -ql pkg_name查看⼀个包安装了哪些⽂件
rpm -qf filename查看某个⽂件属于哪个包
rpm -qR pkg_name查询包的依赖关系
rpm -ivh xxx.rpm安装rpm包
rpm -ivh --test xxx.rpm测试安装rpm包
rpm -ivh --nodeps xxx.rpm安装rpm包时忽略依赖关系
rpm -e xxx卸载程序包
rpm -Fvh pkg_name升级确定已安装的rpm包
rpm -Uvh pkg_name升级rpm包(若未安装则会安装)
rpm -V pkg_nameRPM包详细信息校验

YUM包管理命令

常用命令作用
yum repolist enabled显示可⽤的源仓库
yum search pkg_name搜索软件包
yum install pkg_name下载并安装软件包
yum install --downloadonly pkg_name只 下 载 不 安 装
yum list显示所有程序包
yum list installed查看当前系统已安装包
yum list updates查看可以更新的包列表
yum check-update查看可升级的软件包
yum update更新所有软件包
yum update pkg_name升级指定软件包
yum deplist pkg_name列出软件包依赖关系
yum remove pkg_name删除软件包
yum clean all清除缓存
yum clean packages清除缓存的软件包
yum clean headers清除缓存的header

DPKG包管理命令

常用命令作用
dpkg -c xxx.deb列出deb包的内容
dpkg -i xxx.deb安装/更新deb包
dpkg -r pkg_name移除deb包
dpkg -P pkg_name移除deb包(不保留配置)
dpkg -l查看系统中已安装deb包
dpkg -l pkg_name显示包的⼤致信息
dpkg -L pkg_name查看deb包安装的⽂件
dpkg -s pkg_name查看包的详细信息
dpkg –unpack xxx.deb解开deb包的内容

APT软件⼯具

常用命令作用
apt-cache search pkg_name搜索程序包
apt-cache show pkg_name获取包的概览信息
apt-get install pkg_name安装/升级软件包
apt-get purge pkg_name卸载软件(包括配置)
apt-get remove pkg_name卸载软件(不包括配置)
apt-get update更新包索引信息
apt-get upgrade更新已安装软件包
apt-get clean清理缓存

apt 常用命令

功能命令
列出所有可更新的软件清单命令sudo apt update
升级软件包sudo apt upgrade
列出可更新的软件包及版本信息apt list --upgradeable
升级软件包,升级前先删除需要更新软件包sudo apt full-upgrade
安装指定的软件命令sudo apt install <package_name>
安装多个软件包sudo apt install <package_1> <package_2> <package_3>
更新指定的软件命令sudo apt update <package_name>
删除软件包命令sudo apt remove <package_name>
Logo

更多推荐