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

自定义用户根目录

lib64

Liunx自带库(C++等)

lost+found

 

media

存放系统自动识别设备,例如U盘

mnt

也是用于挂载用,例如共享文件夹

opt

挂载软件,用户安装的软件所相关的存放目录,如:oracle

proc

存放系统镜像、内存

root

超级管理员目录

sbin

系统命令

seliunx

系统安全相关

srv

Service简写,系统服务等

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 + alt

Liunx和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对应rwx

chmod 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包

 

命令

描述

备注

示例

rpm

RPM包安装

-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 to run 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

 

命令进入下载文件夹,然后依次输入如下三个命令:

wget http://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.txt test@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则是非正确执行

 

 

练习脚本

vi helloworld01.sh

#!/bin/bash

echo -e "hello\tworld"

echo "hello \t world"

 

echo "===$$"

 

vi param02.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;

      [return int;]

}

 

调用函数: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

有兴趣可以加QQ群讨论:963022008

 

猜你喜欢

转载自blog.csdn.net/Su_Levi_Wei/article/details/85205851
今日推荐