为什么要有Liunx?
我们用手机浏览器打开一个网页的时候,和用电脑浏览器打开同一个网页时,显示是不一样的,手机浏览器会自动的去适应这个网页,但是如果手机打开的网页和电脑浏览器打开的网页那样,那么就要我们自己去进行缩放,去找到自己的东西,那样很麻烦,我们的操作也很不方便。
所以系统程序在Liunx运行的时候,Liunx会自动去协调、调整相关的参数,并且Liunx提供好一些所需要的功能,网络功能、多用户登录等功能,无需用户自己在去构建这些东西,程序在运行的时候和网络的交互等,Liunx已经帮助我们做好了。
什么是Liunx?
这个要讲一下这个Unix和Liunx的一点小历史,大家可以理解为在60年代,有一群人可以说是在这个AT&T贝尔实验室内机缘巧合下开发了出了这个系统(具体的历史,大家去百度,我们这是用白话文去讲解),AT&T意识到了这个操作系统的商业价值就将Unix包装成商业产品(收费)。
Liunx的产生是源于有那么一个人林纳斯·托瓦兹(Linus Torvalds),也就是这Liunx创始人,觉得不满意那些收费的,他就以Unix为基础编写了一个新的操作系统,这个新的操作系统就是Liunx。
Liunx在编写的过程中,使用了大量的由麻省剑桥免费软件基金的GNU软件,也是要感谢这个Liunx创始者,所以这个Liunx才得以开源,免费。
Liunx是一套免费和自由传播的类Unix操作系统,一个多用户、多任务、支持多线程和多CPU的操作系统,Liunx能运行主要的Unix工具软件、应用程序和网络协议,所以Liunx也继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Liunx也支持32位和64位硬件。
目前市面上比较知名的发行版有:Ubuntu、RedHat、CentOS、Debain、Fedora、Suse、OpenSUSE。
为什么不用Windows作为服务器操作系统?
Windows是我们常用的桌面化操作系统,但是这个桌面化操作系统为了更加人性化,所以做了很多事情,使得用户不用在像操作Unix或Liunx那样敲代码,但是就因为做了太多的事情,使得我们的应用在运行的时候,往往很多计算机资源就没有办法给应用利用起来,因为这些资源都去做了很多人性化的东西。
Liunx就是一个白色,空的篮。
Windows就是一个装饰好,而且还很人性化的设计了一个可以提的把手。
Liunx适合搬运东西。
Windows适合出去拿着出去买菜。
Liunx特点
一切都是文件
没有后缀之说,什么后缀的文件都可以查看
支持32位和64位硬件
多用户
……
Liunx目录结构(标红就是常用)
目录描述
/根目录
bin系统脚本命令
boot系统启动相关
dev挂载外部设备(光盘等…)
etc配置文件
home自定义用户根目录
lib64Liunx自带库(C++等)
lost+found
media存放系统自动识别设备,例如U盘
mnt也是用于挂载用,例如共享文件夹
opt挂载软件,用户安装的软件所相关的存放目录,如:oracle
proc存放系统镜像、内存
root超级管理员目录
sbin系统命令
seliunx系统安全相关
srvService简写,系统服务等
tmp临时文件
usr存放一些安装软件,和opt差不多
var变化文件(日志、变量…)
Vim编辑器
所有的Unix Like系统都会内建Vi文书编辑器,其他的文书编辑器则不一定会存在,但是目前使用比较多的是Vim编辑器。
Vim具有程序编程能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。
Vim是从Vi发展出来的一个文本编辑器。
简单来说Vi是老式的字处理器,不过功能很齐全了,但是还有进步的空间。
Vim编辑器有三种模式:一般模式、编辑模式、指令模式
文本使用Vim编辑器命令:
vi test.txt
vim test.txt
编辑模式
操作描述
i进入编辑模式,当前光标前
a进入编辑模式,当前光标后
o进入编辑模式,当前光标行下一行,新开一行
指令模式
进入指令模式:输入:
操作描述
:set nu设置行号
:set nonu取消行号
:wq!w 保存、q 退出 、 ! 强制执行
一般模式
操作描述
yy复制光标一行
y数字y复制一段(光标起始,第几行到第几行)
p箭头移动到目的行粘贴
u撤销上一步
dd删除光标当前行
d数字d删除光标(含) 后多少行
x删除一个字母
X删除一个字母
yw复制一个词
dw删除一个词
shift+^移动到行头
shift+$移动到行尾
1+shift+g移动到页头
shift+g移动到页尾
数字N+shift+g移动到目标行
命令操作(常用)
查看网络的IP和网关
命令描述备注示例
ifconfig查看网络和网关
ping 地址 ping 192.168.1.1
service network restart重启网络
netstat显示网络统计信息 netstat -anp #显示整个系统的网络请,连接数,书包传递,路由表内容等
配置主机名称
命令描述备注示例
hostname查看主机名称
hostname 主机名临时修改主机名称 hostname myhost
cat/etc/sysconfig/i18n查看系统语言
永久性修改主机名
CentOS6
修改主机名称:vi /etc/sysconfig/network
修改:HOSTNAME=hadoop100
备注:修改是不起作用的,要reoot机器重启才会启用,重启网络也是没有用的
CentOS7
vi /etc/hostname
#先删除,只保留下面内容
hadoop-senior01-levi.com
防火墙
Linux6.x系统防火墙
命令描述备注示例
service iptables status查看防火墙状态
service iptables stop临时关闭防火墙
service iptables start临时关闭的开启
chkconfig iptables --list查看防火墙状态列表0系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动
1单用户工作状态,root权限,用于系统维护,禁止远程登录
2多用户状态,没有NFS
3完全的多用户状态,有NFS,登录后进入控制台命令行模式
4系统未使用,保留
5控制台,登录后进入图形GUI
6系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
chkconfig iptables off关闭防火墙
chkconfig iptables on启动防火墙
Linux7.x系统防火墙
命令描述备注示例
firewall-cmd --state查看防火墙的状态
iptables -L查看防火墙的状态
systemctl stop firewalld.service关闭防火墙但是开机之后还会启动防火墙
systemctl disable firewalld.service禁止firewall开机启动
cat /etc/sysconfig/iptables-config查看防火墙配置
防火墙文件
修改防火墙文件,关闭防火墙值为disabled
vi /etc/sysconfig/seliunx
SELINUX=disabled
关机重启
命令描述备注示例
sync将内存的数据同步到磁盘中养成关机和重启都操作一次是最好
shutdown [选项] 时间关机或重启 shutdown -h now #马上关机
shutdown -r now #马上重启
shutdown -r 1 "描述信息" #一分钟后重启
halt直接关机等于shutdown -h now 和power off
reboot重启等于shutdow -r now
常用快捷键
快捷键描述备注示例
ctrl + c停止进程或退出进程
ctrl + l清屏
ctrl + q退出
ctrl + altLiunx和windows之间切换
tab自动补全
上下键最近执行的命令
文件命令
命令描述备注示例
pwd显示当前目录绝对路径
ls列出目录内容-a 全部文件,包括隐藏文件
-d 列出目录本身
-l 长数据串列出,包括文件属性与权限,这个可写成ll
ls -a
ls -al
ll
mkdir 文件夹名称创建空文件夹-p 创建多层目录mkdir dirname
mkdir -p f/s/t
ln文件或文件夹链接-s 软链接
硬链接:当原文件删除时,任然可以独立自由使用
软链接:当原文件删除时,就无法使用
touch test.sh
vi test.sh
#!/bin/bash
ls
ln -s test.sh testm.sh
ln test.sh testh.sh
chmod 777 test.sh testh.sh testm.sh
./testm.sh
./testh.sh
rm -rf test.sh
./testh.sh
./testm.sh
cd切换目录cd 切换目录
cd 绝对路径#切换到当前这个文件夹下
cd 相对路径#切换到文件夹内的文件夹
cd ~或cd #回到用户的家目录,即当前用户主目录
cd - #回到上一次的目录
cd .. 回到当前目录的上一级目录
cd -P 跳转到实际的物理目录,例如:软连接的文件夹
cd /home
cp复制文件或目录cp source dest #复制 原 目的地
cp -r source dest #复制(递归) 原 目的地
cp test.txt test2.txt
rm删除文件或目录-r 递归
-f 强制删除
-i 询问是否删除
rm -rf #强制递归删除文件夹
rm -i tt.t #
询问是否删除
mv移动文件与目录或重命名mv 原文件/文件夹名 新名(当前目录不可重名)
mv 被移动 移动地址
mv test.txt test2.txt
mv test.txt /home
cat查看文件内容cat 文件名
cat -n 文件名#显示行号
cat -A #显示特殊符号,便于查询BUG,空行,看不见特殊字符等等
cat -b 列出行号,仅对非空白行做行号显示,空白行不标行号
cat -E #将结尾的空行以$显示
cat -T #将[tab]按键以^| 显示出来
cat -v #列出一些看不见的特殊字符
备注:-T和-v都包含到-A
cat -b - A -n #显示行号也显示符号
写法1:cat -nAbE string2.txt
写法2:cat -n -A -b -E string2.txt
tac查看文件内容是cat的反写,就是倒着看,从结尾行开始看tac test.txt
more查看更多文件内容,一页一页展示空白键[space]:向下翻一页
Enter:向下翻一行
q:表示离开more,不在显示该文件内容,几乎所有q都代表离开,部分特殊的不说
ctrl+F:向下滚动一屏
ctrl+B:返回上一屏
=:输出当前行的行号
:f :输出文件名和当前行的行号
more test.txt
less查看文件内容作用和more类似,不同的是允许使用[pageup]和[pagedown]往回滚动空白键,向下翻一页
[pagedown]:向下翻一页
[pageup]:向上翻一页
/字符串:向下搜索
?字符串:向上搜索
q: 离开less
less test.txt
head查看文件内容头几行-n 查看前几行head -n 10 文件名#查看文件前几行
tail查看文件内容,查看尾几行,很多时候查看日志都是查看后几行-f追踪文件变化,日志不断打印的时候,不断的监控追加的日志tail -f 文件名
结果过滤
命令描述备注示例
grep将结果内搜索字符串匹配的行并输出grep + 参数 + 查找内容 + 源文件
-c
输出匹配行总数
-l 不区分大小写(使用单字符)
-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行和行号
-s 不显示不存在或无匹配文本的错误信息
-v 显示不包含匹配文本的所有行
ls -l | grep ll.txt #将查询结果过滤出ll.txt这个文件
ls -l | grep -n ll.txt # 将查询结果过滤出ll.txt这个文件,并显示行号
ps -ef | grep tomcat #
查询出所有的进程信息,并且过滤出tomcat
命令连接符号
命令描述备注示例
|管道,将一个命令输出传送给另一个命令,管道可以连接多个文件 ls -l /etc | grep init #过滤这个查询出来的文件
ps -ef | grep tomcat #查询出所有的进程信息,并且过滤出tomcat
&&逻辑与第一个命令成功,就执行第二个命令成功ls && pwd #执行成功
lss && pwd #执行失败
||逻辑或第一个命令不成功,或执行第二个命令ls || pwd
lss || pwd
> 输出重定向
> 输出结果覆盖文件
>> 输出结果在文件后追加
Shell对每一个进程预先定义了3个文件描述字,0,1,2
0标准输入,1标准输出,2标准错误输出
ll /usr > /home/test.log #会把ll的结果输出到这个文件中,会把内容给覆盖,将>换成>>才会追加
lls /usr 2> /home/test.log #错误重定向,将执行错误日志信息放到指定的log日志中
< 结果输入重定向
< 输出结果覆盖文件
<< 输出结果在文件后追加
Shell对每一个进程预先定义了3个文件描述字,0,1,2
0标准输入,1标准输出,2标准错误输出
wall < /test/x.log
历史
命令描述备注示例
history显示当前账号敲过的命令历史
时间、日期、日历
命令描述备注示例
date [OPTION]...[+FORMAT]时间 date #显示当前日期、时间
date "+%Y-%m-%d
%H:%M%:S" #按照年月日,时分秒显示
date -d "next day" #明天的日期
date -d "yesterday" #昨天的日期
date -d "next week" #下周
date -d "next monday" #下周一
date -s "2018-06-30
11:45:45" #设置日期
cal查看日历 cal #查看日历
cal -3 #最近三个月
cal 2017 #显示年的日历
同步时区:
1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可
2、拷贝该时区文件,覆盖系统本地时区配置
cp /usr/share/zoneinfo/Asia/Shanghai/etc/localtime
#重启后无效
sudo date -s '2016-04-20 11:22:33'
#永久
hwclock -w
#查看时区
timedatectl
分区、硬盘
命令描述备注示例
fdisk查看分区-l 查看分区详情,在root权限下才能知晓fdisk -l #查看分区详情,在root权限下才能知晓
命令帮助
命令描述备注示例
man帮助命令,获取命令的帮助文件,如何使用等q 是退出man ls
命令–help查看命令选项用法
搜索查找
命令描述备注示例
find [搜索范围] [搜索条件]查找文件或目录-name 按照文件名查找
-size 按照文件大小查找
-type 按照文件类型查找(f二进制文件、l链接文件、d是目录)
find 也可以用逻辑与和逻辑或
-a 逻辑与
or 逻辑或
-exec是连接其他一起
find /home -name
"*.txt" #查询home目录下的所有文件,后缀是.txt
find /home -user root *.txt #所有者的是root的用户,且后缀是.txt
find /home -size +10 #查找大于10个字节的文件
find /home -size -10 #查找小于10个字节的
逻辑与和逻辑或
find /opt -size -10 -a -name
"*.txt" #逻辑与
find /opt -size -10 -or -name "*.txt" #逻辑或
find /opt -type d #查找文件类型是文件夹的
find /opt -type f -exec rm -rf
{} \; #查找出这个目录下的文件,全部删除,,{}是结果数据
which搜索命令执行位置在liunx中一般有两种命令,一种是所有用户可以使用,一种是只允许管理员使用,which ls #搜索这个命令在哪里
whereis搜索命令执行位置比which显示的更多whereis ls #搜索这个命令相关文件
进程
命令描述备注示例
ps查看系统中所有进程 ps -aux #查看所有进程
ps -aux | grep 3121 #过滤结果是3121
top查看进程状态-d 秒数#几秒刷新一次
-i #使top不显示任何闲置或僵死进程
-p 进程PID #通过指定监控进程ID来仅仅监控某个进程状态
-s #使top命令在安全模式中运行,这将除去交互命令所带来的潜在风险
进入top之后
P 以CPU使用率排序,默认就是此
M 以内存使用率排序
N 以PID排序
top -d 1 #1秒刷新一次
pstree查看进程树-u 显示进程所属者
-p 显示进程的进程号
pstree -u #显示进程所属者
pstree -p #显示进程的进程号
kill终止进程 kill -9 进程号#删除进程
ps结果解释图
top结果图
解压缩
命令描述备注示例
gzip压缩的时候不保留原文件,只压缩单个文件,不能压缩目录和多个文件 gzip test.txt
gzip test.txt test1.txt
gunzip解压缩文件,不保留压缩的源文件 gunzip 已压缩的文件.gz
zip 选项[-r] [压缩后的文件名称] [源文件[可多个]]zip是windows和liunx通用的格式,可以压缩文件和目录,压缩的时候需要选项-r zip test.zip test
unzip解压缩文件-d 表示文件解压后的存放路径Unzip test.zip
tar [zcvf] [zxvf].gz.tar是tar的解压缩文件
[zcvf] 压缩
[zxvf] 解压
tar [zcvf] [zxvf] 打包文件名称.tar.gz 源文件
-c 产生打包文件(必)
-x 产生解压缩文件(必)
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
最后 -C 路径,表示文件解压后存放的路径
tar -zcvf xxx.tar.gz 文件 文件夹#压缩
tar -xvf xxx.tar.gz -C 路径#解压缩
用户组管理
命令描述备注示例
cat /etc/group查创建的用户默认就会有一个组,组名就一样,所以在删除用户的时候,是删除不了,要先删除用户组
groupadd增 groupadd 组名#创建组
groupdel删 groupdel 组名
groupmod改 groupmod -n 新名 旧名
用户管理
命令描述备注示例
useradd增 useradd test #添加用户
id判断用户是否存在 id test #查看用户是否存在
su切换登录用户三种方式:
#切换到root,环境变量和工作空间都是当前用户(levi)
su
#环境变量和工作空间都是当前用户(levi),当前用户变量会覆盖系统变量,优先级
su root
#工作空间和环境变量切换到root
su - root
su test #切换账号
userdel删userdel 用户名#删除用户,但保存用户主目录,否则在重新useradd的时候会发现提示Creating mailbox file: File
exists文件已存在
-r删除用户与用户主目录
userdel test #删除用户,会发现删除不了,因为没有权限
su root #切换到root
userdel test # 会发现删除不了,在使用中
exit #退出,会回到test账号,在exit,回到root,才会退出test
usermod改 usermod -g 用户组 用户名#修改用户组名
who当前登录用户
who am i登录用户的用户名
whoami显示当前用户
普通账号设置root权限
修改/etc/sudoers文件,
找到
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
用户名ALL=(ALL) ALL
修改完,切换用户,就可以获得root权限
权限
文件信息详解
权限,rwx读,写,执行。
三个为一组,-表示没有这个权限
总共有三组,第一组,当前用户权限,第二组,用户组权限,第三组,其他用户权限
例如:
-rw-r--r--. 1 root root 0 6月30 10:48 duanyu.txt
drw-rx-r--. 2 root root 0 6月30 10:48 test
第一位:-
-:表示文件
d:表示文件夹
第2-4位:rw-
当前用户权限:r读、w写、x执行;-无权限
第5-7位:r--
用户组权限:r读、w写、x执行;-无权限
第8-10位:r--
其他用户权限:r读、w写、x执行;-无权限
1、2等数字:文件表示硬链接数,文件夹则表示内有的文件,包括隐藏文件,ls -al 就可以看,会有其中关联的上一级目录,会作为隐藏文件
文件拥有者:用户名,谁创建就是谁的
文件用户组:文件创建人的组
创建时间
文件名/文件夹名称
备注:文件夹的w权限表示用户可以删除和里面的文件,而其他用户那一栏的文件的w权限,表示不能删除,能够修改,除非有文件夹的w权限
命令描述备注示例
chmod {ugo[a](+-=)(rwx)} 文件/目录设置权限u:用户栏
g:组栏
o:其他栏
加权限就是+
减权限就是-
chmod u+x 文件名#修改权限,添加权限
chmod g-w 文件名#取消写权限
chmod a+x 文件名#a表示所有
chmod (421) 文件/目录设置权限421对应rwxchmod 777 #所有都有,第一个7是用户栏,第二个、第三个都是如此
chown设置所有者那样就只能用这个账户操作了,一般在公司获取到权限的话,就会有一个属于你这个账号的地址chown 最终用户 文件或目录#修改所有者
chown 用户:用户组 文件名#修改用户和用户组
chgrp修改所有组 chgrp 最终组 文件名#修改所有组
打印(echo)
命令描述备注示例
echo “hello”打印-e 执行特殊字符,如\t、\n
echo -e "hello\tworld"
echo $HOME
用户部分相关文件
用户信息文件:/etc/passwd
密码文件:/etc/shadow
用户配置文件:/etc/login.defs /etc/default/useradd
新用户信息文件:/etc/skel
用户组文件:/etc/group
用户组密码文件:/etc/gshadow
用户变量:~/.bashrc
Liunx下的用户一般分为三种:
超级用户root(UID=0)
一般来说UID为0的用户就是超级用户,但一般来说root的权限特别的大,很多Liunx操作系统命令不考虑root
普通用户(UID 500 - 600)
普通用户则按照UID=500开始默认递增
伪用户(UID 1 - 499)
伪用户一般是Liunx系统和进程服务相关的,如:bin、shutdown等,任何的Liunx系统都会有这些伪用户,比如关机操作,其实就调用了一个系统的伪用户身份,在Liunx系统里任何一个进程操作都必须有一个用户身份,伪用户一般无法登陆系统
定时任务
命令描述备注示例
crondtab [选项]定时任务-e 编辑crontab定时任务
-l 查询crontab任务
-r 删除当前用户所有crontab任务
* * * * *
第一个:一个小时的第几分钟0 - 59
第二个:一天中的第几个小时0 - 23
第三个:一个月中第几天1 - 31
第四个:一年中第几月1 - 12
第五个:一周当中星期几 0 - 7(0和7都代表星期天)
特殊字符
* #任何时间
, #不连续时间,如:0 8,12 * * * *,表示每天8点,12点都执行一次命令
- #时间范围,如:0 5 * * 1-6,表示在周一到周六凌晨5点0分执行
*/n #代表每隔多久执行一次,如:*/10 * * * *,表示每隔10分钟执行一次
特定时间执行命令
45 22 * * * 命令(cd /) #在22点45分执行命令
0 0 1,15 * 1 命令#每个月1号和15号,或每周一执行这个命令
命令:
进入编辑:crondtab -e
*/1 * * * * echo "helloworld">> /home/log.txt
备注:service crond start #开启是否有启动
tail -f log.txt #追踪
RPM软件包
RPM软件包(RedHat Package Manager)类似windows里面的setup.exe是liunx这系列操作系统的打包安装工具,是RedHat的标志,但是理念是通用的。
实际中很少用,因为装之前需要很多依赖,一般也是用yum。
学过Java的,可以RPM理解为搭建一个SSM框架的maven
YUM可以理解为SpringBoot在maven的使用
名称格式
Apache-1.3.23-11.i386.rpm
Apache 软件名称
1.3.23-11 版本号,主版本和此版本
i386 软件运行的硬件平台
rpm 文件扩展名,代表RPM包
命令描述备注示例
rpmRPM包安装-i 安装
-v 显示详细信息
-h 进度条
-nodeps 不检测依赖进度
rpm -qa #查询系统所有rpm的安装软件
rpm -qa | grep fire #查询并过滤结果
rpm -e 名称#卸载,通过rpm -qa可查询出来名称
YUM安装软件
YUM(Yellow dog Updater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端包管理器,基于RPM包管理,能够从指定服务器自定下载RPM包并且安装,可以自动处理依赖关系,并且一次性安装所有依赖的软件包,无需繁琐的一次次下载、安装。
学过Java的,可以RPM理解为搭建一个SSM框架的maven
YUM可以理解为SpringBoot在maven的使用
基本常用命令:
yum install -y httpd 安装httpd并确认安装
yum list 列出所有可用的package和package组
yum clean all 清楚所有缓冲数据
yum deplist httpd 列出一个包所有依赖包
ymb remove httpd 删除httpd
安装树
yum install -y tree
YUM原理,有一台YUM服务器,存放了要安装的RPM包,本地的服务器有一个配置文件,指定要到哪里,查找相应的RPM包
所以前提本机要联网(局域网/互联网,取决服务器在哪里)
案例:
1.mirrors.163.com/.help/centos.html
下载repo文件
2.mv *.repo文件/etc/yum.repos.d/
移动到这
3.先备份后,将CentOS-BASE-163.repo 改为 CentOS-BASE.repo 那样系统才会自动识别文件
yum makecache #加载下载
其他
普通账号赋予root权限
修改/etc/sudoers文件,
找到
## Allow root torun any commands anywhere
root ALL=(ALL) ALL
用户名ALL=(ALL) ALL
修改完,切换用户,就可以获得root权限
配置地址和对应的标识(hosts)
配置文件:vi /etc/hosts
例如:
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
Win10:C:\Windows\System32\Drivers\etc
配置网卡信息(修改为静态地址)
CentOS6
vi /etc/sysconfig/network-scripts/ifcfg-eth0
改:ONBOOT=yes
改(默认动态DHCP):BOOTPROTO=static
添加(配置IP地址):IPADDR=192.169.1.100
添加(配置网关):GATEWAY=192.168.1.2
添加(DNS服务器):DNS1=192.168.1.2
备注:
1、记得重启网络:service network restart
2、如果是克隆出来的机器,要修改网卡信息
vi /etc/udev/rules.d/70-persistent-net.rules
#1、将PCI device 0x8086下的这行代码干掉,因为这个是克隆
#2、将第二个PCI device 0x8086下的行尾改为eth0
#3、复制ATTR后的""内的信息,因为这个才是当前本机的网卡的物理IP地址
CentOS7
vi /etc/sysconfig/network-scripts/ifcfg-ens数字
#修改
BOOTRPORT=static
#删除UUID,这个是网卡标识,如果克隆的时候出现一样就很尴尬了
IPADDR=192.168.1.20
GAETWAY=192.168.1.2
NETMASK=255.255.255.0
#发给物理机
DNS1=192.168.1.2
DNS2=0.0.0.0
关闭桌面程序
CentOS7
#查看
cat /etc/inittab
#执行关闭桌面命令,重启后生效
systemctl set-default multi-user.target
#执行命令带界面,重启后生效
systemctl set-default graphical.target
命令无法补全:
首先要确保网络畅通,因为该过程要通过网络下载相关的软件包。
在 root 用户下,使用
cd ~/Downloads
命令进入下载文件夹,然后依次输入如下三个命令:
wgethttp://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
sudo rpm -ivh epel-release-6-8.noarch.rpm
sudo yum install -y bash-completion
一切正常的话,就可以使用Tab键自动补全功能了。 如果该功能没有实现,那么就推出命令行然后再重新打开终端。或者重启系统以启动该软件。
sudo命令(普通账号使用root命令)
sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略,并能把输入输出写入日志。
如:sudo rm -rf 文件/文件夹
sudo命令使用的时候不需要输入密码:
在 /etc/sudoers文件改一下
用户名 权限 命令
username ALL=(ALL) NOPASSWD: ALL
username NOPASSWD: ALL
服务器之间的文件传输(scp)
scp是实现服务器之间的数据传输、拷贝,而且可以实现不跟本机有关系,操作远程主机和别的机器进行数据传输、拷贝。
#1、传输一个文件到hadoop103服务器,由test用户接收,传到/opt/test这个目录下,前提是要先配置/etc/hosts
touch scp.txt
scp -r scp.txt test@hadoop103:/opt/test
#2、控制hadoop103服务器,将scp.txt文件传输到hadoop104服务器
scp -r test@hadoop103:/opt/test/scp.txttest@hadoop104:/opt/test
ssh无秘登录
#会发现执行这条命令是需要输入密码的
ssh 目标地址
#不需要执行密码的配置
cd ~
ls -al
cd .ssh
ssh-keygen -t rsa
#最好自身给自身服务器也配置一个,那么在运行类似hadoop这样的应用时,不会出现运行不了等错误。
ssh-copy-id 目标地址
rsync同步工具
rsync远程同步工具,主要用于备份和镜像,具有速度快,避免复制相同内容和支持符号连接的优点
#将本地/opt/software/rsyncdir/下的所有目录和文件都复制到目标地址的/opt/software
sudo rsync -rvl /opt/software/rsyncdir/ test@目标地址:/opt/software
文件格式
tsv格式:字段直接用制表符(\t)分割
示例:name age
Mike,22
csv格式:字段直接用逗号(,)分割
示例:name age
Mike 22
重要事项
1、make的安装,要注意查看作者写的make文件(卸载命令常见的clean/uninstall),这个文件内的卸载是怎么样的,卸载时,要注意安装的用户是哪个,卸载就切换到那个用户
2、ulimit -n 查看允许最大进程数,调整到最大
3、ulimit -u 查看允许打开最大文件数,调整到最大
4、所有的程序进程号、路径、命令都要记录到文档,特别是分布式、集群的环境。
5、集群的所有服务器时间统一
6、启动服务要作为守护程序则加上&
如:bin/kafka-server-start.shconfig/server.properties &
Shell
为什么要有Shell?
在操作Liunx的时候,我们希望这些命令可以作为一个整体逻辑来运行时,没有办法,因为Liunx是你敲一个命令就执行了,要么就通过&&和||来实现,但是复杂的逻辑是没有办法的实现的,而Shell就是提供了各种语法,让我们可以去实现需求。
什么是Shell?
Shell是一个命令行解释器,它为用户提供了一个向Liunx内核发送请求以便运行程序的界面系统程序,用户可以使用Shell来启动、挂起、停止,甚至编写程序。
Shell还是一个功能强大的编程语言,易编程、易调试、灵活性强,Shell是解释执行的脚本语言,在Shell中可以调用Liunx命令。
Shell特点
文件后缀都是.sh
脚本开头都是:#!/bin/bash
Shell的HelloWorld
vi helloworld01.sh
#!/bin/bash
echo -e "hello\tworld"
echo "hello \t world"
:wq!
Shell脚本执行方式
chmod 777 helloworld01.sh #先赋予执行权限
./ helloworld01.sh
sh ./helloworld01.sh
sh helloworld01.sh
bash ./helloworld01.sh
bash helloworld01.sh
sh /opt /helloworld01.sh
sh -x /opt /helloworld01.sh #追踪每一行脚本代码执行结果
Shell变量
Liunx中的变量分为系统变量和自定义变量,在系统下可以使用set查看
如:set | grep 变量名
系统变量:$HOME、$USER等
运行:echo $HOME
定义变量:TEST=100
获取变量:echo $TEST
销毁变量:unset TEST
定义静态变量:readonly TESTR=100 #定义静态变量的时候要慎重,因为撤销不了(unset)
变量定义规则
1.字符、数字、下划线组成,不能用数字开头
2.等号两侧不可以有空格
3.变量名称一般习惯为大写
4.双引号仅将格脱意,但特殊字符会转义如:\\输出为\;单引号将特殊字符脱意(脱意:不起作用,原封不动的输出)
如:
NUM=100
echo '$NUM' #单引号是直接输出= $ NUM'
echo "$NUM" #双引号是命令引用输出 = 变量
将命令返回值赋给变量
A=`ls -al` 等价A=$((ls -al))
echo $A
配置环境变量
基本语法:
export 变量名=变量值#设置环境变量的值,export表示全局
source 配置文件#重启后生效
echo $变量名#查询变量值
位置参数变量
$n #n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十个参数以上的参数需要用大括号包含,如:${10}
$* #表示命令行中所有的参数,$*把所有参数看成一个整体
$@ #这个变量也代表命令行中的所有参数,不过$@把每个参数区分对待
$# #代表命令行中所有参数的个数
预定义变量
$$ #显示当前进程的进程号
$! #后台最后一个进程的进程号
$? #最后一次执行命令的返回状态,如果为0就是正确执行,非0则是非正确执行
练习脚本
vihelloworld01.sh
#!/bin/bash
echo -e "hello\tworld"
echo "hello \t world"
echo "===$$"
viparam02.sh
#!/bin/bash
echo "$0"
echo "$1"
echo "$*"
echo "$@"
echo "$#"
echo "-------------------------------"
echo "$$"
./helloworld01.sh
echo "$!"
echo "$?"
#赋予权限
chmod 777 helloworld01.sh
chmod 777 param02.sh
#执行
./param02.sh 111
Shell运算符
方式一
$((5+3)) 或$[(2+3)*5]
如:
A=$((2+3)) 或A=$[2+3]
echo “$A”
方式二
expr m + n
expr m - n
/*,/,% #乘、除、取余
备注:默认保持先算乘除后加减,如果需要优先运算则需要加命令替换符
也可以对变量进行运算操作
案例:2+3*4
$[(2+3)*4]
expr `expr 2 + 3` \* 4
test命令
test命令可以对文件、字符串进行测试是否有问题,一般配合控制语句(if、else)使用,不应该单独使用
例如:
test str1=str2
test 1 -eq 2
Shell判断
比较判断
= 字符串比较
le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
文件类型判断
-f 是否是文件
-e 是否存在
-d 是否是一个目录
if判断
语法一
if[ 条件表达式];then
程序
fi
语法二
if [ 条件判断式]
then
程序
fi
脚本
#!/bin/bash
echo"----------------------------"
if [ -d param02.sh ]
then
echo "文件夹"
echo
elif [ -f param02.sh ]
then
echo "文件"
fi
echo"----------------------------"
read in
if [ $in -eq 2 ]
then
echo "2"
else
echo "不等于2"
fi
echo "---------------------"
if [ $1 -gt 66 ]
then
echo "66"
elif [ $2 -ne 2 ]
then
echo "2"
else
echo "ndfdfe"
fi
echo"----------------------------"
if [ $1 -gt 55 -a $2 -gt 77 ]
then
echo "逻辑与"
elif [ $1 -eq 20 -o $2 -eq 30 ]
then
echo "逻辑或"
fi
#执行,其他执行参考这个
./if03.sh 1 2
case语句
case $变量名 in "值1")
echo"exe1"
;;
"值2")
echo"exe2"
;;
*)
echo"exeN"
;;
esac
脚本
#!/bin/bash
read in
case $in in 66)
echo "exe66"
;;
77)
echo "exe77"
;;
*)
echo"N"
;;
esac
for循环
语法一
for 变量 in 值1 值2 值3
do
程序
done
语法二
for((初始值;循环控制条件;变量变化))
do
程序
done
脚本
#!/bin/bash
for var in 1 2 3 4 5 6 7
do
echo "number $var"
done
echo "--------------------"
for i in "$*"
do
echo"* $i"
done
echo "---------------"
for j in "$@"
do
echo "@区分对待$j"
done
echo "----------- 语法二"
for ((i=0; i < 100; i++))
do
s=$[$s+$i]
if[ $i -eq 5 ]
then
echo "$i"
fi
done
echo "s = $s"
select循环
select 变量 in 列表
do
cmd
done
脚本
#!/bin/bash
select var in "java""c++" "php"
do
break
done
echo "选择:$var"
while循环
while [ 条件]
do
命令
done
脚本
#!/bin/bash
in=1
while [ $in -le 66 ]
do
sum=$[$sum+$in]
in=`expr $in + 1`
done
echo "$in"
echo "$sum"
系统函数
basename [pathname] [suffix]
basename /opt/test/for1.sh #显示文件名称,显示for1.sh
dirname [pathname]
dirname /opt/test/for1.sh #显示文件夹路径,结果为/opt/test
自定义函数
[function] funname[()]
{
Action;
[returnint;]
}
调用函数:funname
注意:
1、必须在调用函数的地方之前先声明
2、函数返回值,只能通过$?系统变量获得,可以显示加;return 返回,如果不加将最后一条命令运行结果,作为返回值。return 后跟数值n(0-255)
脚本
#!/bin/bash
function sum(){
result=0
result=$[$1 + $2]
echo "$result"
}
read -p "请输入:" in1
read -p "请输入:" in2
sum $in1 $in2