shell编程
一、基础指令
1.ls指令
../ 上级目录
./ 当前目录
ls -al
-l 表示list,一详细列表的形式显示
-a 表示显示所有目录和文件
2.pwd指令
3.cd指令
cd~ 回到家目录
4.midir指令
mkdir 路径
mkdir -p 路径 创建多层目录
5.touch指令
创建文件
6.mv指令
剪切命令
mv 需要移动的文档路径 需要保存的位置路径
可以移动文件夹
7.rm指令
-f 强制删除
-r 递归删除文件夹
8.vim指令
9.cp指令
cp 被复制的文档路径 文档被复制到的路径
当使用cp命令对文件夹进行复制的时候,需要添加"-r"(表示递归)
10.输出重定向
有时候需要将一些命令的执行结果保存到文件中,进行后续的分析,则需要用到输出重定向技术。
11.cat指令
12.tail
tail -F a.txt 可以实时改变
二、进阶指令:
1.df -h(换算单位) :查看磁盘空间
2.free -m:以MB为单位查看内存剩余
swap:临时内存
3.head -3
4.tail -3
tail -f 文件路径:可以查看一个文件的动态变化
5.less :查看文件,以较少的内容
6.wc:统计文件内容信息
wc -l 查看行数,-w 单词数,-c 字节数
7.date
查看时间日期 date +%F (等价于date "+%Y-%m-%d")
date "+%F %H-%M-%S(%T)"
设置日期
date -s 字符串时间
date -s "2018-10-10 11:22:22"
时间与网络时间一致
ntpdate 0.asia.pool.ntp.org
8.cal
cal -1 当前月份
cal -3 上月,本月,下月
cal -y 年份:某一年月份的日历
10.clear == Ctrl+L
11.grep
grep [] 关键词 文件路径
-i 忽略大小写
-c 计算个数
-n 输出所在行数和内容
-v 输出不包含该内容的其他东西
12 which whereis
查找命令在哪里
三、高级指令:
1.hostname:主机名
2.id:当前用户的基本信息
3.whoami:显示自身的用户名称
4.ps -ef:查看当前服务器的进程信息 System V 展示风格
-e:列出全部的进程
-f:显示所有列
ps -aux BSD分格
如果想查看进程的CPU占用率和内存占用率,可以使用aux
如果想查看进程的父进程ID和完整的COMMAND命令,可以使用ef
5.top:查看服务器进程所占的资源。
load average 平均负载
单核:小于等于1代表正常,大于1代表负载过高,大于2 需要增加配置
多核:*核数
6.du -sh:查看目录所占的磁盘空间
7.find 范围 -type/-name
? 一个占位符 * 多个占位符
8.service :控制一些软件的服务启动、停止、重启
service 服务名 start/stop/restart
9.kill:杀死进程
kill 进程PID
killall [] 进程名称
-9 强制杀死
10.管道 |
过滤:ls / | grep *.txt
11.ifconfig:用于操作网卡
12.reboot:重启
reboot -w 模拟重启,但不重启(写日志)
13.shutdown:关机 init 0/halt/poweroff
shutdown -h now
shutdown -h 12:30 shutdown -c取消关机
14.uptime:输出计算机的持续在线时间
15.uname:获取操作系统的类型
uname -a 表示获取全部的信息
16.netstat -atnlp 网络端口占用情况
netstat:查看网络连接状态
-t:只列出tcp协议的连接
-n:将地址从字母组合转化成ip地址
-l:过滤出"state(状态)"列中值为Listen(监听)的连接
-p:显示进程pid和进程名称
17.man(manual):包含全部Linux命令的手册。
18.Ctrl+u 快速删除命令行中光标前的内容。
Ctrl+k 光标后
19.文件权限
-rwxr--r-- 1 root root 61 Jul 27 22:54 a.c
第一位:-:文件 d:文件夹
权限:读写执行
u 所有者
g 用户组
o 其他人
a 所有人
chmod a+x 文档路径
chmod a = rwx 设置权限
r = 4 w = 2 x = 1 - = 0
chmod 777 文档路径
chmod -r 777 目录路径 表示对当前目录及目录下所有的文件执行
20.安装命令 yum install -y tree
四、vim
1.vim三种模式
命令模式:快捷键操作(删除行,复制行,移动光标,粘贴)
编辑模式:编辑文件
末行模式:输入命令操作(搜索,替换,保存,退出,撤销,高亮)
2.vim打开文件的方式
#vim
#vim +数字 文件的路径 :打开指定的文件,并且将光标移动的指定行
#vim +/关键词 文件的路径 :打开指定的文件,并且高亮显示关键词
#vim 文件路径1 文件路径2 问阿金路径3 :同时打开多个文件
3.命令模式
3.1 光标移动
①光标移动到行首 shift+6或^
②光标移动到行尾 shift+4或$
③光标移动到首行 gg
④光标移动到尾行 G
⑥翻屏
向上 ctrl+b
向下 ctrl+f
3.2 复制
①复制光标所在行 yy 粘贴(p)
②从光标所在行开始,向下复制指定的行数 数字yy
③可视化复制 Ctrl+v 移动方向键选中需要复制的块 按yy 按p
3.3剪切/删除
①剪切/删除 光标所在行 dd(删除之后,下一行上移)
②剪切/删除 光标所在行开始,向下多行 数字dd
③剪切/删除 光标所在位置后边的(删除之后,下一行不上移) D
3.4撤销/恢复
①撤销 :u 或 u (undo)
②恢复 ctrl+r 取消之前的撤销操作
3.5扩展--光标的快速移动
①快速将光标移动到指定的行数 数字G
②以当前光标为准,向上/向下移动n行 数字 ↑/↓
③以光标为准 想左/向右 数字←/数字→
④末行模式下, 输入: 数字 回车
4.末行模式
进入方式
在命令模式下,输入:
退出方式
①按一下esc ②按两下esc ③将末行内容全部删除
4.1保存操作
输入":w" 保存文件
输入":w 路径" 另存为
4.2退出操作
输入":q"
4.3保存并退出
输入"wq"
输入":x" 写入文件并退出
4.4强制
输入"q!" 强制退出,刚才做的修改不操作。
4.5调用外部命令
输入":!外部命令"
4.6搜索/查找
输入"/关键词"
切换搜索结果 N/n
如果需要取消高亮 输入":nohl"
4.7替换
:s/搜索关键词/新的内容 替换光标所在行的第一处符合条件的内容
:s/搜索关键词/新的内容/g 替换光标所在行的全部符合条件的内容
:%s/搜索关键词/新的内容 替换整个文档中所有行的第一处符合条件的内容
:%s/搜索关键词/新的内容/g 替换整个文档中所有符合条件的内容
%表示整个文档 g表示全局
4.8显示行号
输入":set nu" 下次进入就没了
取消":set nonu"
4.9扩展 打开多个文件操作
输入":files" 查看现在打开了哪几个文件
%a 表示当前打开的文件
# 表示上一个打开的文件
输入":open 文件名" 打开文件
输入":bn" 切换到下一个文件 back next
输入":bp" 切换到上一个文件 back prev
5.编辑模式
进入编辑模式:
在命令模式下
按 i 在光标所在前面插入
按 a 在光标所在后面插入
6.vim的实用功能
6.1代码着色
打开颜色显示 ":syntax on"
关闭颜色显示 ":syntax off"
6.2计算器的使用
当在编辑文件的时候,突然需要使用计算器去计算一些公式,则此时需要用计算器。
此时,用vim集成的计算器
a.进入编辑模式
b.按"ctrl + r",然后输入"=",此时光标变到最后一行
c.输入需要计算的内容,按下回车。
7.扩展功能
7.1vim的配置
①在文件打开的时候在末行模式下输入的配置(临时)
②个人配置文件(~/.vimrc) 如果没有,可以自己创建
③全局配置文件(vim自带,/etc/vimrc)
7.2异常退出
在编辑文件后没有正常退出,突然关闭终端或断电。
解决办法 : 将交互文件(.swp)删除即可。
7.3别名机制
创建一些属于自己的自定义的命令
依靠一个别名映射文件:~/.bashrc
修改之后,需要重新登录当前用户
7.4退出方式
:wq 文件若没有修改,但是使用了wq,则文件的修改时间会更新。
:x 文件没有被修改,则时间不会被更新。
:X 对文件进行加密
五、Linux自有服务
1.运行模式
也称之为运行级别
在Linux 中存在一个进程:init(initialize,初始化),进程id是1.
查看进程:ps -ef|grep init
该进程存在一个对应的配置文件 inittab(系统运行级别配置文件,位置/etc/)
0---关机级别
1---单用户模式
init 2---多用户模式,不带NFS
3---多用户模式,完全的多用户,命令行模式
4---被保留模式
5---X11,完整的图形化界面模式,图像界面模式
6---表示重启级别
六、用户管理
1.用户管理
1.1添加用户
#useradd 选项 用户名
选项: -g:表示指定用户的用户主组,id 或 组名
-G:表示用户附加组,id 或 组名
-u:uid , 用户的id
查看用户的主组 可以查看passwd文件
查看用户的附加组可以查看group文件
1.2修改用户
#usermod 选项 用户名
选项: -g:表示指定用户的用户主组,id 或 组名
-G:表示用户附加组,id 或 组名
-u:uid , 用户的id
-l:修改用户名
1.3设置密码
前面创建的用户都处于锁定状态,需要设置密码后才能登陆计算机。
#passwd 用户名
输入密码
1.4删除用户
#userdel 选项 用户名
选项:
-r; 表示在删除用户的同时,删除其家目录
1.5切换用户
#su 用户名 (不写用户名默认为root)
输入密码 (切换普通用户不需要输入密码;切换root需要输入密码)
提示:所有跟用户操作的命令,(除passwd外,)都需要root才能执行。
2.用户组管理
涉及用户组的添加、删除和修改。组的增加,删除和修改实际上就是对/etc/group文件的更新
文件结构:
用户组名:密码:用户组ID:组内用户名
密码x表示占位符
2.1用户组添加
groupadd 选项 用户组名
选项 -g 用户组id
2.2用户组编辑
groupmod 选项 用户组名
选项:-g 修改用户组id
-n 修改用户组名
2.3用户组删除
groupdel 用户组名
如果需要删除一个组,但是这个组是某个用户的主组,则不允许删除;
如果确实要删除,需要将用户移走或删除。
3.网络设置
网卡配置路径:/etc/sysconfig/network-scripts/
ifcfg-ens33
ifcfg-lo
3.1重启网卡:service network restart
/etc/init.d/network restart
3.2创建快捷方式
ln -s 原始文件路径 快捷方式路径
3.3重启单个网卡
停止某个网卡:#ifdown 网卡名
开启某个网卡:#ifup 网卡名
4.ssh服务
ssh(安全外壳协议),该协议有2个常用的作用:远程连接协议,远程文件传输协议。
4.1协议使用端口号:默认 22
如果需要修改,则需要修改配置文件 /etc/ssh/ssh_config
端口号范围 0~65535
4.2服务启动/停止/重启
service sshd start/stop/restart
4.3终端工具
PuTTY
Xshell
secureCRT
4.4SSH服务文件传输工具
可视化的界面传输工具 filezilla工具
通过命令行工具传输 pscp(通过cmd打开)
七、补充
7.1快捷方式
硬连接 ln 原路径 现路径
软连接 ln -s 原路径 现路径
删除软连接 rm -rf 路径(后面不带/)
ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
7.2history
查看已经执行过的历史指令,执行已经执行过的指令
①history 显示所有的历史指令
②histort 10 显示10个历史指令
③!编号 执行历史编号的指令
7.3搜索查找命令
①find
find [搜索范围] [选项]
find /home hello.txt
find /opt -user nobody 按文件拥有者查
find / -size +20M 查大于20M的文件。(+n大于 -n小于 n等于)
②locate
快速定位文件路径,利用locate数据库实现快速定位。
第一次运行前,必须使用updatedb指令创建locate数据库
locate 搜索文件
③grep 和 管道符号|
grep,过滤查找;"|"前一个命令的处理结果交给后面的命令处理
grep [选项] 查找内容 源文件
[选项] -n 显示匹配及行号 -i 忽略字母大小写
cat hello.txt | grep -ni yes
7.4压缩和解压缩
①gzip/gunzip(.gz)
gzip 文件 (压缩后,不会保留原文件)
gunzip 文件
②zip/unzip
zip [选项] XXX.zip 将要压缩的内容 (压缩文件和目录)
-r 递归压缩目录
unzip [选项]XXX.zip
-d<目录> 指定压缩后的文件目录
③tar(打包指令 .tar.gz)
tar [选项] XXX.tar.gz 打包文件 :打包目录,压缩后的格式为 .tar.gz
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压.tar文件
压缩 tar -zcvf a.tar.gz a1.txt a2.txt
解压 tar -zxvf a.tar.gz -C 路径
7.5修改文件所有者
chown 用户名 文件名
修改文件所在组
chgrp 组名 文件名
改变用户所在组
usermod -g 组名 用户名
usermod -d 目录 用户名 (改变该用户登录的初始目录)
7.6定时任务调度(crond)
简单的任务不需要编写脚本,对于复杂的任务需要写脚本实现。
①crontab进行定时任务的设置
crontab [选项]
-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有的crontab任务
步骤:
crontab -e
分 时 日 月 星期
*/1 * * * * ls - l /etc >> /tmp/to.txt
* 任何时间
, 代表不连续的时间
- 代表连续的时间范围
*/n 代表每隔多久
7.7磁盘分区,挂载
7.7.1
①mbr分区
最多四个主分区;系统只能安装在主分区;兼容性好
②gpt分区
支持无线多个主分区
最大支持123Eb大容量
挂载(mount)
将磁盘与Linux的某文件链接在一起。
lsblk -f 查看系统的分区和挂载的情况
7.7.2如何增加一块硬盘?
虚拟机添加硬盘
分区 fdisk /dev/sdb
格式化 mkfs -t ext4 /dev/sdb1
挂载 mount /dev/sdb1 /home/newdisk
设置可以自动挂载 vim /etc/fstab
/dev/sdbl /home/newdisk ext4 defaults 0 0
7.8磁盘情况查询
7.8.1查询系统整体磁盘使用情况
df -h
7.8.2查询指定目录的磁盘情况
du -h /目录
-s 指定目录占用大小汇总
-h 戴计量单位
-a 含文件
-c 列出明细的同时,增加汇总量
--max-depth= n 子目录深度
7.8.3磁盘情况---工作使用指令
1)查看/home目录下文件的个数
ls -l /home |grep "^-" | wc -l
2)统计/home及子目录下的所有文件的个数
ls -lr /home |grep "^-" | wc -l
3)以树状显示目录结构
tree
八、网络设置
8.1 固定IP设置
etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.3
NETMASK=255.255.255.0
GATEWAY=192.168.1.111
DNS1=8.8.8.8 //域名解析
DNS2=8.8.4.4
8.2 设置hostname
/etc/hosts
设置ip 和 hostname
九、补充(二)
1.安装jdk
卸载自带的jdk
rpm -qa | grep jdk 检索jdk
rpm -e java-1.7.0-openjdk* --node 删除
安装
1).安装包上传到linux系统中
2).解压 tar -zxvf jdk* -C /usr/local
3).配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk*
export PATH=$PATH:$JAVA_HOME/bin
4).使变量生效
source /etc/profile
2.传输文件
1)rz win往linux传文件
2)sz file linux往win传文件
3.主机名修改
vi /etc/sysconfig/network
4.修改hosts(主机名映射)
/etc/hosts
5.pstree 进程树
-p 加上pid
-u 查看所属用户
6.服务管理(service)
6.1定义
service 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,
比如(mysql,防火墙,sshd),因此,我们又称为守护进程,是linux非常重要的知识点。
6.2 使用
service 服务名 [start|stop|restart|reload|status]
centos7后,使用systemctl
6.3 查看服务名
1)使用setup -> 系统服务 九可以看到
2)ls -l /etc/init.d 服务名称
6.4 服务的运行级别(vi /etc/inittab)
0:系统停机级别,
1:单用户工作状态,root权限,用于系统维护
2:多用户状态(没有NFS),不支持网络
3:完全的多用户状态,登录后进入控制台命令行模式
4:系统为使用,保留
5:X11控制台,登录后进入图形化界面
6:系统正常关闭并重启,默认不能设置,否则不能正常启动。
6.5 开机运行流程
开机->BIOS->/boot->init进程->运行级别->运行级别对应的服务
6.6 不小心将级别设置为0或6 怎么办?
进入单用户模式,进行设置
7. 动态监控进程
top和ps 都用来显示正在执行的进程,top可惜实时更新。
top -d 10 10s刷新一次
p 一CUP使用率刷新,查看执行的进程
M 以内存的使用率排序
N 以PID排序
q
1)监视特定用户
top 查看执行的精彩
u 用户名 按回车
2)终止指定的进程
top: 查看进程
输入k 回车,在输入要结束的进程ID号。
8.监控网络端口服务
netstat [选项]
-an 按一定顺序输出
-p 显示那个进程在调用
十、RPM和YUM
1.rpm包的管理
1.1介绍
一种用于互联网下载包的打包及安装工具,包含在某些Linux分发版中,它生成
.RPM扩展名的文件。
1.2
1.2.1 查询已安装的rpm列表
rpm -qa | grep xx
1.2.2 查询安装软件的版本等信息
rpm -qi 软件名
1.2.3 查看软件包安装到哪里去了
rpm -ql 软件名称
1.2.4 查询文件属于哪个软件包
rpm -qf 文件
1.3 卸载RPm包
rpm -e RPM包的名称 --nodeps
1.4 安装rpm包
rpm -ivh RPM包全路径名称
i= install 安装
v= verbose 提示
h= hash 进度条
1.5安装高版本的MySQL
下载一个rpm,安装上一个配置文件,(包含了mysql的yum下载配置文件)
rpm -ivh xx.prm
修改配置文件 /etc/yum.repos.d/mysql-community.repo
把5.7的 enable=0 改为 enable =1
把8.0的 enable=1 改为 enable=0
安装 yum install -y mysql-community-server
service mysqld start
service mysqld restart
查找临时密码 grep 'temporapy password' /var/log/mysqld.log
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIEd BY '123456'
防火墙 远程操作
2. YUM
2.1 介绍
Yum是一个Shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动
下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有依赖的软件包
2.2指令
2.2.1 查询yum服务器是否有需要安装的软件
yum list | grep xx
2.2.2 安装
yum -y install xx
2.2.3 卸载
yum -y remove xx
3. 防火墙设置
重启:#systemctl restart firewalld.service
启动:# systemctl start firewalld
查看状态:# systemctl status firewalld 或者 firewall-cmd --state
开机是否启动:# systemctl disable | enable firewalld
禁用:# systemctl stop firewalld
更新防火墙规则:
# firewall-cmd --reload
# firewall-cmd --complete-reload
4. 克隆
克隆一个一模一样的操作系统
克隆步骤
1) 删除/etc/udev/rules.d/70-persistent-net.rules
2) 将克隆前的网卡序列号删除 UUID,HWADDDR
3) 克隆(关机状态)
4) 删除网卡eth0,将eth1改为eth0
/etc/udev/r*/70*net*
5) 修改网络配置eth0
6) 重启电脑
5. 集群同步时间
ntpdate 0.aira.pool.ntp.org
6. 远程copy文件
scp file mar01:/root
scp -r dir mar01:/root
7. 免密登录
1)yum install -y openssh-clients 安装ssh客户端
2)生成公钥和私钥
ssh-keygen -t rsa
3)把你的公钥发给别人(一旦其他机器接受了公钥,西祠登录就不需要密码了)
ssh-copy-id -i /root/.ssh/id_rsa.pub hostname(ip)