Liunx与Shell

为什么要有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


Win10C:\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

你可能感兴趣的:(Liunx与Shell)