1、软件安装
(1)yum安装(多)
yum install -y 包名 中间一路yes
yum remove -y 包名
可以只下载安装包,不安装
yum install -y --downloadonly --downloaddir=./ wget
下载就是.rpm的包。
(2)rpm安装
不论你用的是yum还是用的rpm安装,其实安装的都是rpm包。在linux里面,安装软件的时候,不仅仅是安装这么一个软件,与之对应的要按照很多的依赖软件
a ==》 b===》c==》d
如果使用rpm安装,你要知道软件依赖关系才能安装,但是使用yum的话,不用知道依赖关系,yum自动为你解决
比如 yum install -y --downloadonly --downloaddir=./ vim
包含vim的包以及vim依赖的包,全部下载下来之后,估计10个包,这10个都是rpm,请问先装哪个后装哪个。
yum install -y vim 依赖关系自动解决
-ivh :安装 rpm -ivh 包.rpm
-e :卸载 rpm -e wget
-ql : 列出包安装路径 rpm -ql wget
-qi : 列出指定包的详细信息 rpm -qi wget
(3)编译安装(多)
相对来说,编译安装是需要编译源码的,安装的软件更加适合你的电脑,你的软硬件环境,更加的稳定,相比较yum来说稳定
编译安装3个步骤:
(1)配置
./configure --prefix=你安装路径 --以及其它参数
(2)编译
linux里面的软件都是使用c、c++写的,所以你得有编译器
gcc gcc-c++
yum install -y gcc gcc-c++
make
(3)安装
make install
走完一步之后,可以执行一个指令 echo $? ,如果返回0,代表上面指令执行成功,如果返回其它,说明执行失败
指令可以连写: make && make install
安装ntfs-3g
安装python
2、服务和进程相关指令
linux的启动等级,打开这个文件 vi /etc/inittab
0 : 关机等级
1 : 单用户模式
2 : 多用户的无网络模式
3 : 多用户模式,有网络
4 : 保留模式
5 : 界面模式
6 : 重启模式
切换等级 init 0 init 1 init 6
查看当前等级 runlevel who -r
whoami : 我是谁,查看当前用户
查看随开机启动的服务
chkconfig --list
随开机启动的服务,我们给他们起了一个非常好听的名字,守护进程(daemon)
sshd httpd mysqld 其实就是一个随机开机启动的服务
开启、关闭服务
要有控制开启、关闭服务的脚本,比如iptables(防火墙)
/etc/init.d/iptables start | stop | restart
/etc/init.d/network start | stop | restart
经常找脚本,太不方便了,将服务脚本放到 /etc/init.d ,如果支持服务模式,那么就可以使用如下指令开启和关闭
service iptables start | stop | restart
service network start | stop | restart
一般情况,安装服务的时候,控制服务的脚本在安装包就有,但是有的没有,比如nginx没有
自己安装的服务,你就可以将脚本放到 /etc/init.d 里面,然后通过service控制它的开启和关闭 service nginx start
自己安装的服务随开机启动
chkconfig nginx on 默认设置的等级为2345
chkconfig nginx off
还得给脚本权限,权限一般设置为755
通过chkconfig --list 查看有没有配置成功
进程相关指令
top : 实时查看系统的运行情况
w :查看系统的当前用户的链接情况
free : -h 内存的使用情况
ps : 查看进程相关信息
ps -ef | grep ssh
ps aux | grep ssh
kill : 杀死一个进程
kill -9 进程id
netstat -lnp : 查看网络和端口使用情况
netstat -lnp | grep 80
3、shell简介(了解一下)
shell编程 wget url 包.tar.gz
python break : 终止循环
continue : 结束当次循环,进入下一次循环
# 环境变量和shell编程
## 1. 环境变量
环境变量用来存储工作环境信息的变量,主要分为系统全局变量和用户级全局变量
- 全局变量
~~~shell
常见的全局环境变量 :
PATH 指令的搜索路径
HOME 用户的工作目录
LOGNAME 用户的登录名
SHELL 当前系统shell类型
#使用全局变量
echo $PATH #显示单个全局变量,注意使用全局变量,必须加$
export name='hello' #设置新的全局变量
#系统级全局变量
这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。
这类变量在/etc/profile文件中设置,只有root用户才能设置
vim /etc/profile
export a=100
:wq #存盘退出,这个时候a不会立即生效,应该是有
source /etc/profile
#单用户级全局变量
在用户主目录内有三个文件 ~/.bash_profile、~/.bashrc和~/.profile 在这个文件中定义变量只针对当前用户,添加方式同系统级全局变量
~~~
- 添加PATH环境变量
~~~
echo $PATH #x显示全局PATH环境变量
#1 临时设置
PATH=$PATH:/home/csl #将/home/csl添加到系统环境变量,只针对当前登录有效
#2 对所有用户永久有效
vi /etc/profile
export PATH=$PATH:/usr/local/sysbench/bin
source /etc/profile
# 3.对登录用户有效
# vi ~/.bashrc 在里面加入:
export PATH=$PATH:/usr/local/mysql/bin
source ~/.bashrc
~~~
## 2. shell编程
### 2.1 什么是shell
shell是一个命令解释器,将用户输入的命令解释给操作系统内核。
Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它类似于Windows下的cmd.exe,可以交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,但是Shell是不需要进行编译的,它是从脚本程序中一行一行的读取并执行命令。
Shell有两种执行命令的方式:交互式(Interactive),用户输入一条命令,Shell就解释执行一条;批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
### 2.2 常见的shell类型
Linux 的 Shell 种类众多,常见的有:
(1) **BourneShell(sh)**:是由AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。
(2) **BourneAgain Shell (即bash)**:是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个**默认**的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。
(3) **ash**:ash Shell是由Kenneth Almquist编写的,是Linux 中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。
(4) **CShell(csh)**:是加州伯克利大学的Bill Joy为BSD Unix开发的,共有52个内部命令,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。
(5) **KornShell(ksh)**:是AT&T Bell实验室的David Korn开发的,共有42 条内部命令,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。
(6) **zch**:是Linux 最大的Shell之一,由Paul Falstad完成,共有84 个内部命令。如果只是一般的用途,没有必要安装这样的Shell。
- 可以使用系统变量SHELL查看当前使用的shell:echo $SHELL
- 也可以到/etc/shells文件里查看系统可以使用的shell
### 2.3 shell的交互方式
- 命令行
- 脚本执行
- 编写脚本,文件后缀名一般为.sh
- 文件必须以#!/bin/bash开头
- 添加脚本的可执行权限`chmode +x 脚本名`
- 执行脚本:
- 在当前目录里执行:`./脚本名`
- 在其他目录中执行:使用绝对路径
~~~
#!/bin/bash
#使用#注释,第一行是特殊存在
cd /
ls -al
:wq #存退出盘
chmod +x 1.sh #修改权限,添加可执行权限
./1.sh #执行当前目录下的shell脚本
~~~
### 2.4 定义变量
- 变量类型
- 局部变量:只在本shell中使用
- 环境变量 : 使用整个系统,一般大写
- 局部变量的使用
~~~
#1 定义局部变量
a=10 #注意等号两边不要留空格,否则会看成多个命令
b=$a
#2显示局部变量
echo $b
echo ${b}
echo "a=$a" #双引号中的变量解释
#3.销毁变量
unset a #干掉一个变量,不要带$符
#注意反引号,反引号引起来的是命令,可以执行,将执行结果给变量
d=`date`
【注】:等号两边不要留空格
~~~
- 位置变量
~~~
$0 表示脚本的名称
$1-$9表示传递给脚本的的参数
#test.sh脚本
#!/bin/bash
echo 'hello world'
echo $0 $1 $2
执行输出:
hello world
./test.sh lala dudu
~~~
- 特殊变量
~~~
$#表示传递给脚本的参数个数
$*表示传递给脚本的所有参数
$?表示上一个命令执行的返回值,返回值为0表示成功执行,否则命令执行错误
~~~
- 常量
~~~
readonly a=10 #定义常量
echo $a
a='ll' #-bash: name: 只读变量,不能修改
~~~
### 2.5 引号
- 双引号中解释变量,解释转义字符
- 单引号不解释变量、不解释转义字符
- 反引号会执行当中的内容
- 特殊字符要用反斜线转义:& * ?| $ ^
### 2.6 字符串
- 计算字符串长度`${#字符串名}`
- 提取子串:`${字符串名:start:len}`从下标为start开始,提取len个字符
### 2.7 数组
- 数组定义:a=(1 2 3) #千万注意,数值之间用空格分隔
- 获取数组元素:${a[0]}
- 赋值$a[0]=100
- 获取数组长度:${#a[@]}或者${#a[*]}
### 2.8 seq
- 生成连续整数
- 示例:`seq 1 10`,生成1-10的连续整数
### 2.9 运算
- 数学运算
~~~
shell默认所有变量都是字符串,执行数学计算需要用[]括起来
a=100
echo $[$a+10]
echo $[$a/2]
echo $[$a*2]
echo $[$a-80]
echo $[10%2]
echo $((3+5))
echo $((10/2))
echo $((10/3)) #3 整除
echo $((10*3))
echo $((10%3))
let a=5+6
echo $a
let a+=10
echo $a
echo `expr 3 + 5` #也可以用expr进行计算
~~~
- 关系运算
| 运算符 | 说明 | 举例 |
| ------ | --------------------------- | -------------------------- |
| -eq | ==,相等返回 true。 | [ $a -eq $b ] |
| -ne | !=,不相等返回 true。 | [ $a -ne $b ] |
| -gt | `>`,如果是,则返回 true。 | [ $a -gt $b ] |
| -lt | <,如果是,则返回 true。 | [ $a -lt $b ] |
| -ge | `>=`,如果是,则返回 true。 | [ $a -ge $b ] |
| -le | `<=`,如果是,则返回 true。 | [ $a -le $b ] |
- 逻辑运算
| 运算符 | 说明 | 举例 |
| ------ | ---------- | ------------------------------------------ |
| && | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
| \|\| | 逻辑的 OR | [[ $a -lt 100 \|\| $b -gt 100 ]] 返回 true |
- 字符串判断
| 运算符 | 说明 | 举例 |
| ------ | ----------------------------------------- | ------------------------ |
| = | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
| != | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
| -z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
| str | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
- 文件判断
| 操作符 | 说明 | 举例 |
| ------- | ------------------------------------------------------------ | ------------------------- |
| -d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
| -f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
| -r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
| -w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
| -x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
| -s file | 检测文件是否不为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
| -e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
### 2.10 分支语句
- if-else
~~~
a=100
if [ $a -gt 90 ]
then
echo "a>90"
else
echo "a<=90"
fi
~~~
- case
~~~
case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列
;;
esac
~~~
~~~
1 #!/bin/bash
2 case $1 in
3 start | begin)
4 echo "start"
5 ;;
6 stop | end)
7 echo "stop"
8 ;;
9 *)
10 echo "I don't know"
11 esac
~~~
### 2.11 循环语句
shell
for 变量 in 列表
do
command1
command2
...
commandN
done
示例:
for i in 1 2 3 4 5;do
echo $i
done
#从命令读取值
for line in `cat 1.txt`;do
echo $line
done
#读取目录列表
for file in ~/*;do
echo $file;
done
for i in `seq 1 100`;do
let sum+=$i
done
#遍历数组
for x in ${a[*]};do
echo $x;
done
- while
~~~
#当型循环
while condition
do
command
done
sum=0
i=0
while [ $i -lt 10];do
let sum+=$i
let i+=1
done
~~~
- until
~~~
#直到型循环
#condition为假执行循环,为真停止
until condition
do
command
done
until [ ! $i -lt 10 ];do
echo $i;
let i+=1;
done
~~~
### 2.12 break和continue
和以前的用法一模一样
### 2.13 函数
- 函数必须先定义后使用
~~~
#函数定义
test()
{
echo "简单函数"
}
#函数调用
test()
~~~
4、ftp服务搭建
ftp是什么?文件传输协议,用在将本地文件上传到服务器
1、ftp搭建
关闭防火墙和selinux
依赖 gcc和openssl-devel和perl
0、yum install -y gcc openssl-devel perl
1、去pureftp官网
download==》releases==》pure-ftpd-1.0.41.tar.gz
2、下载
wget https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.43.tar.gz
3、解压
tar -zxvf 文件名
4、配置
./configure #进行配置 -h 查看配置参数
--prefix=/usr/local/pureftpd #安装目录
--without-inetd #不使用ineted 超级服务器管理
--with-altlog #采用alt日志
--with-puredb #采用puredb来存储ftp虚拟用户信息
--with-throttling #开启带宽控制
--with-tls #开启ftps支持
./configure --prefix=/usr/local/pureftpd --without-inetd --with-altlog --with-puredb --with-throttling --with-tls
echo $? 如果是0说明上一步成功,其它为错误
make && make install
5、修改配置文件
cd configuration-file/
mkdir /usr/local/pureftpd/etc 创建目录
cp pure-ftpd.conf /usr/local/pureftpd/etc/
修改:vi /usr/local/pureftpd/etc/pure-ftpd.conf 如下
在文件最后添加如下两行
PureDB /usr/local/pureftpd/etc/pureftpd.pdb
PIDFile /var/run/pure-ftpd.pid
6、拷贝控制文件
cp pure-config.pl /usr/local/pureftpd/sbin/
chmod 755 /usr/local/pureftpd/sbin/pure-config.pl
7、启动服务
cd /usr/local/pureftpd
./sbin/pure-config.pl ./etc/pure-ftpd.conf
检查:ps -ef | grep ftp
8、添加管理用户
useradd test
mkdir -p /var/www/html/
chown -R test:test /var/www/html/
./bin/pure-pw useradd ftp_user1 -u test -d /var/www/html
ftp_user1:ftp登录用户名
-u:指定系统中存在的用户
-d:指定访问的目录
9、创建虚拟的用户数据库
./bin/pure-pw mkdb
/usr/local/pureftpd/bin/pure-pw list #查看用户列表
/usr/local/pureftpd/bin/pure-pw userdel 用户名 #删除用户
10、通过ftp链接工具(FileZilla)测试
5、nfs搭建
nfs是什么?可以实现linux之间的文件共享
nfs客户端还有服务端
nfs搭建教程
服务器上操作
关闭防火墙 service iptables stop
关闭selinux setenforce 0
1、yum install -y nfs-utils
2、编辑配置文件
vi /etc/exports
/nfstest 10.0.144.0/24(rw,sync)
要共享的目录 网段
3、创建目录
mkdir /nfstest
vi /nfstest/lala.txt
4、启动服务
nfs是基于rpc协议的,所以首先启动rpc
service rpcbind start
service nfs start
客户端上操作
1、yum install -y nfs-utils
2、查看对应ip地址上面共享的目录
showmount -e 10.0.144.156
3、挂载nfs
mount -t nfs 10.0.144.156:/nfstest /mnt/usb
mount -t nfs 10.7.181.94:/nfstest /mnt/usb
4、配置开机挂载
vi /etc/fstab
10.0.142.34:/test/ /root/nfs nfs defaults 0 0
6、nginx服务搭建
nginx是什么? web服务器 apache打交道
nginx服务器的根目录(www)在 /usr/local/nginx/html
ip:端口 域名(jd.com baidu.com taobao.com mi.com) sb.com
DNS服务商,阿里云、腾讯云都有
一个服务器是否能放多个网站呢?可以的,配置虚拟主机
nginx安装
1、关闭防火墙和selinux
2、安装依赖软件
yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
3、tar -zxvf nginx-1.11.5.tar.gz
4、创建www用户,不允许以www用户登录系统
useradd www -s /sbin/nologin
5、./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
6、make && make install
7、cp nginx /etc/init.d/
8、开启服务
service nginx start
9、设置开机启动
chkconfig nginx on
chkconfig --list 查看是否开机启动
10、查看网络和端口使用情况
netstat -lnp | grep nginx
nginx默认监听的端口为80端口
虚拟主机配置步骤
(1)修改nginx配置文件
vi /usr/local/nginx/conf/nginx.conf
在第116行加一行代码
include vhost/*.conf;
(2)新建一个vhost文件夹
mkdir /usr/local/nginx/conf/vhost
(3)来到vhost下,新建一个虚拟主机配置文件
vi /usr/local/nginx/conf/vhost/www.lala.com.conf
server
{
server_name www.lala.com;
root html/lala;
index index.html;
}
[说明]:
server_name : 域名
root : 网站的根目录
index : 网站的默认首页
(4)新建虚拟主机根目录
mkdir /usr/local/nginx/html/lala
vi /usr/local/nginx/html/lala/index.html
service nginx restart 重启服务
(5)编辑本机的hosts文件
C:\Windows\System32\drivers\etc\hosts
10.9.151.154 www.lala.com
7、各系统指令区别总结
CentOS和Ubuntu的区别
1. centos中新建的非root用户是没有sudo的权限的,如果需要使用sudo权限必须在/etc/sudoers 中加入账户和权限,所以切换到root账号的时候只需要输入:su,加入root账号的密码即可。 在Ubuntu中,一般使用sudo+命令,如果是第一次使用会提示输入当前用户的密码(而不是root的密码)
2. 在线安装软件中,centos使用的是yum命令,而ubuntu中使用的是apt-get命令。除此之外yum中还有一个从软件源中搜索摸个软件的方法:yum search + 软件名
CentOS7.0系列新指令:
centos7.0 没有netstat 和 ifconfig命令问题
yum -y install wget
yum -y install net-tools
centos7.0服务管理相关指令
https://www.cnblogs.com/lgqboke/p/6069170.html