Ever tried , Ever failed !
No matter ,Try again ! Fail again , Fail better !

在CentOS 7上安装python3.6

lemenness阅读(332)

1.安装必备软件

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc

2.下载Python3.6

  • 在/usr下新建download文件夹
mkdir /usr/download
  • 在download文件夹下下载安装包
cd /usr/download
  • 下载
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
  • 解压文件
tar -xvf Python-3.6.4.tgz

3.安装Python3

  • 创建安装文件的路径
mkdir /usr/local/python3

4.编译

  • 在解压的文件夹下: /usr/download/python3.6.4
cd /usr/download/python-3.6.4
  • 检查编译环境、相关库文件以及配置参数并生成makefile
./configure --prefix=/usr/local/python3

5.安装

  • 在解压的文件夹下 /usr/download/python3.6.4
cd /usr/download/python-3.6.4
  • 对源代码进行编译,生成可执行文件
make
  • 将生成的可执行文件安装到当前计算机中
make install

6.创建新版本的软链接

  • 修改旧版本
mv /usr/bin/python /usr/bin/python_bak
  • 创建新的软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
  • 如果pip3 -V报错:bash: pip3: 未找到命令…
  • 解决方法:
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
  • 检查python的版本
python -V

7.配置

  • 配置成功后,pip3用不了,需要进一步配置,将/usr/local/python3/bin加入PATH
vim ~/.bash_profile
  • 修改PATH后如下:
PATH=$PATH:$HOME/bin:/usr/local/python3/bin
export PATH
  • 保存退出后,执行以下命令,让上一步修改成功
source ~/.bash_profile

8.问题

  • 这个时候我们只需要修改yum配置文件,将python版本只想以前的旧版就可以了。
vi /usr/bin/yum

1.因为我的旧版本是2.7,所以将#!/usr/bin/python 改为#!/usr/bin/python2.7 就可以了!
2.修改/usr/libexec/urlgrabber-ext-down 文件,将python同样指向旧版本,就可以了!

这样我们就可以在CentOS 7上使用python3.6了~

Apache与Nginx的负载均衡和动静分离

lemenness阅读(419)

步骤:

一、部署四台虚拟机,一台Nginx服务器,两台Apache服务器,一台数据库服务器

1.部署数据库服务器:

关闭防火墙和selinux

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

安装数据库

yum -y install mariadb mariadb-server

启动服务

systemctl start mariadb

进入数据库

mysql -uroot -p

修改权限

MariaDB[(none)]> grant all privileges  on *.* to root@'%' identified by "password";

重启服务器

systemctl restart mariadb

2.部署Apache服务器:

关闭防火墙和selinux

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

安装组件

yum -y install mariadb php php-mysql httpd lrzsz

远程连接数据库

mysql -h 数据库服务器IP -uroot -p

密码为之前部署数据库服务器时设置的密码:password

启动服务

systemctl start httpd

导入dz论坛安装包

rz

解压

unzip upload.zip
cd upload
cp -rf * /var/www/html

修改权限

cd /var/www
chmod -R 777 *

修改php.ini

vim /etc/php.ini

(在211行)将short_open_tag的值:Off改为On

short_open_tag = On

重启服务器

systemctl restart httpd

导入数据库文件

cd /var/www/html
mysql -h 数据库服务器IP -uroot -p 安装向导里自己填写的数据库名 <qqfarm.sql
(两台apache 安装方法相同)

2.部署nginx服务器

关闭防火墙和selinux

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

安装yum源仓库

cat <<EOF >/etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/\$basearch
gpgcheck=0
enabled=1
EOF

安装nginx

yum -y install nginx

启动Nginx服务

systemctl start nginx

至此四台服务器部署完毕

3.实现负载均衡

在Nginx服务器上进行
修改Nginx配置文件

vim /etc/nginx/conf.d/default.conf

修改以下内容:

upstream apache{
        server 192.168.245.133 weight=1;
        server 192.168.245.134 weight=2;
}

    server {
        listen 80;
        server_name localhost;
        location / {
             proxy_pass http://apache;
        }
}

4.实现动静分离

#进入Apache下的网页主目录
把apache主页文件复制到nginx主页目录下

cd /var/www/html 
scp -r /var/www/html/logo.jpg root@ nginx服务器IP:/usr/share/nginx/html

修改Nginx配置:

vim /etc/nginx/conf.d/default.conf

upstream apache{
        server 192.168.245.133 weight=1;
        server 192.168.245.134 weight=2;

}

    server {
        listen 80;
        server_name localhost;
        #location / {
         #   root /var/www/html;
         #   index index.php index.html index.htm;
        #}
        location / {
             proxy_pass http://apache;

        }
        location ~ \.jpg$ {
          root /usr/share/nginx/html;
                       }
}

重启服务器

systemctl start nginx

5.ftp服务器搭建

关闭防火墙 selinux

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

安装ftp/httpd服务器

yum -y install vsftpd
yum -y install httpd

启动ftp服务器

systemctl start vsftpd

修改配置文件

vim /etc/vsftpd/vsftpd.conf
anonoymous_enable=no
chroot解除注释(99-100行之间)
chroot_local_enable=YES
chroot_list_enable=YES
...

创建登录用户

useradd ftpuser
passwd ftpuser

修改为nologin

usermod -s /sbin/nologin ftpuser

修改为开机修改密码

usermod -s /usr/bin/passwd ftpuser

设置登录ftp服务器用户

vim /etc/vsftpd/chroot_list
>ftpuser

设置ftpuser目录

usermod -d var/www/html ftpuser

修改家目录权限

chmod 755 /var/www/html/

进入/etc/pam.d/vsftpd

vim /etc/pam.d/vsftpd

注释下面的一行

#auth    required pam_shells.so

设置ACL权限

setfacl -m u:ftpuser:rwx /var/www/html

访问nginx的能够实现该功能

LINUX基本操作(9)——LINUX磁盘管理

lemenness阅读(460)

Linux磁盘及文件系统磁盘管理

磁盘管理太多了………

第一节 使用fdisk进行磁盘管理

FDISK
– fdisk 是一个基于MBR的分区工具,所以如果需要使用GPT,则无法使用fdisk进行分区
– fdisk 命令只有具有超级用户权限才能够运行
– 使用 fdisk-l 可以列出所有安装的磁盘及其分区信息
– 使用 fdisk/dev/sda 可以对目标磁盘进行分区操作
– 分区之后需要使用 partprobe 命令让内核更新分区信息,否则需要重启才能识别新的分区
/proc/partitions文件也可用来查看分区信息

具体操作步骤:

使用fdisk /dev/vda(目标硬盘) 可以对目录磁盘进行分区操作
进入fdisk交互窗口【m 查看帮助说明】:
   a   toggle a bootable flag  //切换可以开机
   b   edit bsd disklabel  //BSD磁盘标签编辑
   c   toggle the dos compatibility flag  //切换到拒绝兼容标志
   d   delete a partition  //删除分区
   g   create a new empty GPT partition table  //创建一个新的空GPT分区表
   G   create an IRIX (SGI) partition table  //创建一个IRIX (SGI)分区表
   l   list known partition types  //列出已知的分区类型
   m   print this menu  //打印此菜单
   n   add a new partition  //添加新的分区
   o   create a new empty DOS partition table  //创建一个新的空分区表
   p   print the partition table  //打印分区表
   q   quit without saving changes  //退出不保存更改
   s   create a new empty Sun disklabel  //创建一个新的空的Sun disklabel
   t   change a partition‘s system id  //修改分区ID
   u   change display/entry units  //改变显示/输入单元
   v   verify the partition table  //验证分区表
   w   write table to disk and exit  //写入磁盘并退出
   x   extra functionality (experts only)  //额外的功能(专家)

若要添加新的分区:

Command (m for help):n
    e   extended    //扩展分区
    p   primary partition(1-4)   //主分区
Select (default p): p  //选择,默认选p,这里选择e
Partition number (1-4): 2
First cylinder (1-2610, default 1):  //回车,默认从1开始
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):+2G

创建扩展分区:

Command (m for help):n
    e   extended    //扩展分区
    p   primary partition(1-4)   //主分区
Select (default p): p
Partition number (2-4, default 2):2
First cylinder (263-2610, default 263):  //回车,默认从263开始
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610):  //回车,默认全部使用
Using default Value:2610

创建逻辑分区:

Command (m for help):n
    l    logical(5 or over) //逻辑分区
    p   primary partition(1-4)   //主分区
Select (default p):l
First cylinder (263-2610, default 263):  //回车,默认从1开始
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):+2G

为方便系统识别需要修改ID
(system id)linux系统默认为83
可以选择L查看ID对应类型,输入类型后回车

目前操作还未写入硬盘,需要执行 (write table to disk and exit)进行保存退出
若内核未重新读取分区表,可使用partprobe更新内核分区表

第二节 Linux文件系统

1.文件系统

操作系统通过文件系统管理文件及数据,磁盘或区分需要创建文件系统之后才能够为
操作系统使用,创建文件系统的过程又称之为格式化
-没有文件系统的设备称之为裸(raw)设备
-常见的文件系统有fat32NTFSext2ext3ext4xfsHFS
-文件系统之间的区别:日志、支持的区分大小、支持的单个文件大小、性能等
Windows下主流的文件系统:NTFS
Linux下主流的文件系统:ext3ext4

2.MKE2FS

命令mke2fs 用来创建文件系统

mke2fs -t ext4 /dev/sda3

常用参数:
-b 指定文件系统块大小
-c 建立文件系统时检查坏损块
-L 指定卷标
-j 建立文件系统日志

3.MKES

命令mkfs 也可以用于创建文件系统,相较于mke2fs 简单,但支持的参数较少,不能进行
精细化的控制:

-mkfs.ext3 /dec/sda3
-mkfs.ext4 /dec/sda3

4.dumpe2fs

-命令dumpe2fs 可以用来查看分区的文件系统信息

dumpe2fs /dev/sda2

5.journal日志

带日志的文件系统(ext3、ext4)拥有较强的稳定性,在出现错误时可以进行恢复
使用带日志的文件系统,文件系统会使用一个叫做’两阶段提交’的方式进行磁盘操作,
当进行磁盘操作时,文件系统进行一下操作:
– 文件系统将准备执行的事务的具体内容写入日志
– 文件系统进行操作
– 操作成功后,将事务的具体内容从日志中删除
这样做的好处是,当事务执行的时候如果出现意外(如断电或磁盘故障),可以通过
查询日志进行恢复操作。缺点是会丧失一定的性能(额外的日志读写操作)

6.e2label

命令e2label可以用来为文件系统添加系统标签

-e2label /dev/sda3 显示sda3的系统标签
-e2label /dev/sda3 Linux   将sda3的系统标签设置为LINUX

7.fsck

命令fsck用来检查并修复损坏的文件系统

fsck /dev/sda2
  • 默认 -y 参数不提示而直接进行修复
  • 默认fsck会自动判断文件系统类型,如果文件系统损坏比较严重,请使用-t 参数指定

文件系统类型
– 对于识别为文件的损坏数据(文件系统无记录),fsck会将该文件放入lost+found目录
– 系统启动时会对磁盘进行fsck操作

第三节 挂载、使用文件系统

1.挂载操作

磁盘或分区创建好文件系统后,需要挂载到一个目录才能够使用
Windows或Mac系统会自动挂载,一旦创建好文件系统后会自动挂载到系统上,Windows上称之为
C盘。D盘等。
Linux需要手工进行挂载操作或配置系统进行自动挂载

/dev/sda3 ext4 —挂载—> /mnt

2.mount

在Linux中,我们通过moubt命令将格式化号的磁盘或分区挂载到一个目录上

mount /dev/sda3(要挂载的分区) /mnt(挂载点)

常用参数:
不带参数的mount 命令会显示所有已挂载的文件系统
-t 指定文件系统的类型
-o 指定挂载选项
ro,rw 以只读或读写形式挂载,默认是rw
sync 代表不适用缓存,而是对所有操作直接写入磁盘
async 代表使用缓存,默认是async
noatime 代表每次访问文件时不更新文件的访问时间
atime 代表每次访问文件时更新文件的访问时间
remount 重新挂载文件系统

3.umount

命令umount 用来卸载已挂载的文件系统,相当于Windows中的弹出

    umount  文件系统/挂载点
    umount /dev/sda3  == umount /mnt

如果出现device is busy 报错,则表示该文件系统正在被使用,无法卸载,可以
使用以下命令查看使用文件系统的进程:

fuser -m /mnt

也可以使用命令lsof查看正在被使用的文件:

lsof /mnt

4.自动挂载

配置文件/etc/fstab 用来定义需要自动挂载的文件系统,fstab中每一行代表一个挂载配置

/dev/sda3        /mnt      ext4      default      0 0
需要挂载的设备  挂载点    文件系统      挂载选项     dump、fsck相关选项
  • 需要挂载的设备也可以使用LABEL进行识别,使用LABEl=LINUX取代/dev/sda3
  • mount -a 命令会挂载所有fstab中定义的自动挂载项

GPT分区:

GPT与MBR最大4个分区表项的限制相比,GTR对分区的数量没有限制,但Windows最大
仅支持128个GPT分区。GPT可管理硬盘大小到达了18EB(1EB=1024PB=1048576TB),不过
NTFS格式最大仅支持256TB
parted磁盘分区工具
查看parted的帮助信息:

parted --help

查看分区使用情况:

parted -l

通过parted工具新建一个分区:

[root@localhost ~]# parted /dev/sdc
GNU Parted 3.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p //打印分区表

(parted) mklabel 
New disk label type? gpt //输入gpt类型
(parted) mkpart
Partition name?  []? mydisk1 //输入名称

File system type?  [ext2]?   //回车默认

Start? 1        //磁盘大小从1开始 

End? 5G         //5G的内存
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  5000MB  4999MB               mydisk1
(parted) quit  //退出

然后进行格式化与挂载:

mkfs.ext4 /dev/sdc
mount /dev/sdc /sdc1
使用mount进行查看所有已挂载的文件系统

LVM管理—在线扩容、数据迁移

创建LVM
VG扩展/缩小
LVM管理—在线扩容文件系统扩容
PE:Physical extent 物理扩展
LE:LOgical extent 逻辑扩展

创建LVM的基本步骤

准备分区

[root@localhost ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3

1.创建PV

[root@localhost ~]# pvcreate /dev/sdb{1,2}   //创建物理卷
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  ```
### 2.创建Vg
```bash
[root@localhost ~]# vgcreate Vg1 /dev/sdb{1,2}  //创建卷组,Vg1卷组名称,/dev/sdb{1,2}卷组里包含的设备
  Volume group "Vg1" successfully created

3.创建LV

[root@localhost ~]# lvcreate -n LV1 -L 1.5G Vg1 //--n指定LV的名称  -L指定逻辑卷大小   在Vg1上去创建
  Logical volume "LV1" created.

PV

pvdisplay           显示PV属性
pvscan             在系统所有硬盘上查找PV
pvchange            改变PV属性

VG

vgdisplay   显示VG卷组属性
vgscan      查找系统现有VG卷组
vgdata      显示VG卷组上的VGDA信息
vgextend

LV

lvdisplay   显示LV卷组属性
lvscran     查找系统现有LV卷组
lvcreate -L 10G vg1 -n lv1
-L  空间大小
-n  逻辑卷名称
lvdata      显示LV卷组上的LVDA信息
lvchange    改变LV卷组属性
Lvreduce
lvextend

4.使用LVM

[root@localhost ~]# mkfs.ext4 /dev/Vg1/LV1    //格式化
[root@localhost ~]# mkdir /lv1
[root@localhost ~]# mount /dev/Vg1/LV1 /lv1/  //挂载

5.LV扩容

首先,确定一下是否有可用的扩容空间:

[root@localhost ~]# vgs
 VG     #PV #LV #SN Attr   VSize  VFree  
 Vg1      2   1   0 wz--n-  9.99g   8.49g
 centos   2   2   0 wz-pn- 33.99g <15.00g

扩容逻辑卷:

[root@localhost ~]# lvextend -L +3G /dev/Vg1/LV1  //扩容3G
  Size of logical volume Vg1/LV1 changed from 1.50 GiB (384 extents) to 4.50 GiB (1152 extents).
  Logical volume Vg1/LV1 successfully resized.
[root@localhost ~]# lvs
  WARNING: Device for PV xRDCsL-wBpW-pSFq-YN46-S0wc-2j4x-Gm5f33 not found or rejected by a filter.
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV1  Vg1    -wi-ao----   4.50g
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g

逻辑卷已经扩容,但是文件系统没有扩容:

[root@localhost ~]# df -h
dev/mapper/Vg1-LV1      1.5G  4.5M  1.4G   1% /lv1

所以要进行文件系统的扩容:

RHEL6对文件系统进行扩容:
[root@localhost ~]# resize2fs /dev/Vg1/LV1 3G
[root@localhost ~]# df -h
/dev/mapper/Vg1-LV1      4.4G  6.0M  4.2G   1% /lv1
RHEL7对文件系统进行扩容:
[root@localhost ~]# xfs_growfs /dev/Vg1/LV1 3G

VG扩容:

[root@localhost ~]# vgextend Vg1 /dev/sdb5
 Physical volume "/dev/sdb5" successfully created.
 Volume group "Vg1" successfully extended
 [root@localhost ~]# pvs
 PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--   <19.00g       0 
  /dev/sdb1  Vg1    lvm2 a--    <5.00g  508.00m
  /dev/sdb2  Vg1    lvm2 a--    <5.00g   <5.00g
  /dev/sdb5  Vg1    lvm2 a--  1020.00m 1020.00m

LV缩减:

把LV1缩减到1G
首先查看当前空间:
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV1  Vg1    -wi-ao----   4.50g
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g 

[root@localhost ~]# lvreduce -L 1G /dev/Vg1/LV1 
  WARNING: Reducing active and open logical volume to 1.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce Vg1/LV1? [y/n]: y
  Size of logical volume Vg1/LV1 changed from 4.50 GiB (1152 extents) to 1.00 GiB (256 extents).
  Logical volume Vg1/LV1 successfully resized.
[root@localhost ~]# lvs
  WARNING: Device for PV xRDCsL-wBpW-pSFq-YN46-S0wc-2j4x-Gm5f33 not found or rejected by a filter.
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV1  Vg1    -wi-ao----   1.00g
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g

VG缩减:
注:缩减时,可以不卸载正在使用的LV,另外,只能缩减没有被使用的PV,否则会报错:
查看使用情况:

[root@localhost ~]# pvs
  WARNING: Device for PV xRDCsL-wBpW-pSFq-YN46-S0wc-2j4x-Gm5f33 not found or rejected by a filter.
  PV         VG     Fmt  Attr PSize    PFree   
  /dev/sda2  centos lvm2 a--   <19.00g       0 
  /dev/sdb1  Vg1    lvm2 a--    <5.00g   <4.00g
  /dev/sdb2  Vg1    lvm2 a--    <5.00g   <5.00g
  /dev/sdb5  Vg1    lvm2 a--  1020.00m 1020.00m
  报错:
[root@localhost ~]# vgreduce Vg1 /dev/sdb1
  Physical volume "/dev/sdb1" still in use
  缩减sdb5:
[root@localhost ~]# vgreduce Vg1 /dev/sdb5
  Removed "/dev/sdb5" from volume group "Vg1"

Raid

mdadm 参数:
命令常见参数:
– -C 或 –creat 建立一个新阵列
– -A 激活磁盘阵列
– -D 或 –detail 打印阵列设备的详细信息
– -s 或 –scan 扫描配置文件或/proc/mdstat得到阵列缺失信息
– -f 将设备状态定为故障
– -a 添加设备到阵列
– -v 显示详细信息
– -r 移除设备
– -l 设定磁盘阵列的级别
– -n 指定阵列成员(分区/磁盘)的数量
– -x 指定阵列中备用盘的数量
– -c 设定阵列的块 chunk 大小,单位KB
– -G 改变阵列大小或形态

raid0

1.创建Raid0

[root@localhost ~]# mdadm -C -v /dev/md0 -l 0 -n 3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

查看阵列信息

[root@localhost ~]# mdadm -Ds
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=b0f7fb48:530672ea:1f8acf7c:e5431e55

2.导出阵列配置文件

[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf

进行分区:

[root@localhost ~]# fdisk /dev/md0

3.格式化并挂载到指定目录

[root@localhost ~]# mkfs.ext4 /dev/md0p1 
[root@localhost ~]# mkdir /raid0
[root@localhost ~]# mount /dev/md0p1 /raid0/

raid5

1.创建raid5

[root@localhost ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde

2.删除一块硬盘

[root@localhost ~]# mdadm /dev/md5 -f /dev/sdh
mdadm: set /dev/sdh1 faulty in /dev/md5
[root@localhost ~]# mdadm /dev/md5 -r /dev/sdh
mdadm: hot removed /dev/sdh1 from /dev/md5

3.添加一块硬盘

[root@localhost ~]# mdadm /dev/md5 -a /dev/sdh
mdadm: added /dev/sdh1

LINUX基本操作(8)——LINUX管道与重定向

lemenness阅读(339)

管道与重定向

1.在Linux系统中,大多数命令都很简单,很少出现复杂功能的命令,没个命令往往只实现一个或者几个简单的功能,我们可以通过将不同功能的命令组合在一起使用,以达到完成某个复杂功能的目的
2.Linux中,几乎所有命令的返回数据都是纯文本的(因为命令都是运行在CLI下),而纯文本形式的数据
又是绝大多数命令的输入格式,这就让多命令协作成为可能
Linux的命令行为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的
命令行shell的数据流有以下定义:

名称 说明 编号 默认
STDIN 标准输入 0 键盘
STDOUT 标准输出 1 终端
STDERR 标准错误 2 终端

命令通过STDIN接收参数或数据,通过STDOUT 输出结果或通过 STDERR 输出错误

通过管道和重定向我们可以控制CLI的数据流

重定向:

    >       将STDOUT重定向到文件(覆盖)
    >>      将STDOUT重定向到文件(追加)
    2>      将STDERR重定向到文件(覆盖)
    2>&1    将STDERR与STDOUT结合
    <       重定向到STDIN

管道 | 将一个命令的STDOUT作为另一个命令STDIN

例如:

[root@VM_0_10_centos /]# vim 1.sh
date
date1
[root@VM_0_10_centos /]# chmod a+x 1.sh

标准输出重定向

[root@VM_0_10_centos /]# ./1.sh > fileSecss
[root@VM_0_10_centos /]# cat fileSecss

标准输出重定向到fileSecss,标准错误重定向fileErr

[root@VM_0_10_centos /]# ./1.sh > fileSecss 2> fileErr
[root@VM_0_10_centos /]# cat filesh1

混合输出重定向到filelog

[root@VM_0_10_centos /]# ./1.sh >>  filelog 2>>filelog
[root@VM_0_10_centos /]# cat filelog

混合输出重定向到filelog

[root@VM_0_10_centos /]# ./1.sh & >> filelog
[root@VM_0_10_centos /]# cat filelog

标准错误重定向到filelog,标准输出重定向到 /dev/null中(回收站)

[root@VM_0_10_centos /]# ./1.sh 2>> filelog >> /dev/null
[root@VM_0_10_centos /]# cat dev/null
[root@VM_0_10_centos /]# cat filelog

cp:是否覆盖 /dev/null
/etc/passwd  覆盖  /dev/null
[root@VM_0_10_centos /]# cp /etc/passwd /dev/null 

[root@VM_0_10_centos /]# cp /etc/passwd /etc/passwd1 2> /dev/null

如果/dev/null(设备文件) 被删除:
1.重启自动创建
2.手动创建

[root@VM_0_10_centos /]# mknod -m 666 /dev/null c 1 3

查看命令状态

[root@VM_0_10_centos /]# echo $?
0--成功    1--失败

注意!!!!!!!!!!!!

>new.txt        空白的内容重定向到new.txt

>/etc/passwd    空白的内容重定向到/etc/passwd

>/etc           空白的内容重定向到/etc

>/              空白的内容重定向到/  (**!!!危险的操作!!!**)

输入重定向
标准输入:< 等价于 0<

LINUX基本操作(7)——LINUX权限管理

lemenness阅读(385)

Linux权限

权限

权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件
都有拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户、哪些组可以对
特定文件进行什么样的操作
每个进程都是以某个用户的身份运行,所以进程的权限与该用户的权限一样,用户的权限大,
该进程拥有的权限就大

一、文件权限

Linux中,每个文件拥有三种权限

权限 对文件的影响 对目录的影响
r(读取) 可读取文件内容 可列出目录内容
w(写入) 可以修改文件内容 可在目录中创建删除文件
x(执行) 可以作为命令执行 可访问目录内容

注意:目录必须拥有x权限,否则无法查看其内容|

二、UGO

Linux权限基于UGO模型进行控制:
U代表User,G代表Group,O代表Other
每个文件的权限基于UGO进行设置
权限三个一组(rwx),对应UGO分别设置
每一个文件拥有一个所属用户和所属组,对应UG,不属于该文件所属用户或所属组的使用O权限

命令ls-lll 可以查看当前目录下文件的详细信息:

drwx------  3 centos centos 4096 May  9 15:02 centos
-rw-r--r--+ 1 root   root      0 Aug 28 16:49 file
drwx------  4 wangwu wangwu 4096 Aug 28 16:56 wangwu

以最后一个为例:

drwx------  4 wangwu wangwu 4096 Aug 28 16:56 wangwu
字段 描述
drwx------ UGO
4 链接数量
wangwu U:所属用户
wangwu G:所属组
4096 大小
Aug 28 16:56 时间
centos 文件名

再来仔细分析UGO:
drwxr-xr-- 为例:
d: 文件类型
rwx :U权限
r-x :G权限
r--:O权限

三、修改文件所属组用户、组

命令chown用以改变文件的所属用户:
chown nash_su(新用户名) file1(文件名)
-R参数递归的修改目录下的所有文件的所属用户
命令chgrp用以改变文件的所属组:
chgrp group1(新组名) file1(文件名)
-R参数递归的修改目录下的所有文件的所属组

四、修改权限
命令chmod 用以修改文件的权限
chmod 模式 文件夹
m模式为如下格式:
ugo分别表示用户、组和其他
a可以代指ugo
+、- 代表加入或删除对应权限
r、w、x代表三种权限
模式实例:

chmod u+rw file1
chmod g-x file1
chmod go+r file1
chmod a-x file1

命令chmod也支持以数字方式修改权限,三个权限分别由三个数字表示:

-r = 4(2^2)
-w = 2(2^1)
-x = 1(2^0)

使用数字表示权限时,魅族权限分别为对应数字之和

rw = 4+2=6
rwx = 4+2+1=7
r-x = 4+1=5

使用数字表示ugo权限使用如下方式:

chmod 660 file1 ==rw-rw----
chmod 775 file1 ==rwxrwxr-x

Linux默认权限

每一个终端都拥有一个umask属性,来确定新建文件、文件夹的默认权限
umask 使用数字权限方式表示,如:022
目录的默认权限是:777-umask
文件的默认权限是:666-umask
一般,普通用户的默认umask是002,root用户的默认umask是022
所以,对于普通用户来说:
新建文件夹的权限是:666-002=664
新建目录的权限是:777-002 = 775
使用umask命令查看设置的umask值

基本权限ACL

对于一个文件,它的权限如下

-rw-r--r-- 1 root root 0 Aug 28 20:24 file

对于root用户来说,对文件可读可写,若是其他用户也想对该文件进行读写操作,可以使用

ACL权限

对文件进行查看:

getfacl file:
[root@VM_0_10_centos home]# getfacl file 
#file: file
#owner: root
#group: root
user::rw-
group::r--
other::r--

对文件进行设置:

[root@VM_0_10_centos home]# setfacl -m u:wangwu:rw file

查看文件信息:

[root@VM_0_10_centos home]# getfacl file 
#file: file
#owner: root
#group: root
user::rw-
user:wangwu:rw-
group::r--
mask::rw-
other::r--

对文件夹进行设置:

[root@VM_0_10_centos home]# setfacl -R -m u:wangwu:rwx dir1

查看文件夹信息:

[root@VM_0_10_centos home]# getfacl dir1
#file: dir1
#owner: root
#group: root
user::rwx
user:wangwu:rwx
group::r-x
mask::rwx
other::r-x

删除ACL:

 setfacl -x u:wangwu file   删除单个用户的ACL权限
 setfacl -b file     删除所有用户ACL权限
 ```
查看后:
```bash
[root@VM_0_10_centos home]# getfacl file 
# file: file
# owner: root
# group: root
user::rw-
group::r--
other::r--

特殊权限

除了普通权限外,还有三个特殊权限:

权限 对文件的影响 对目录的影响
suid 以文件的所属用户身份执行, 而非执行文件的用户
sgid 以文件所属组身份执行 在该目录中创建的任意新文件的所属组与该目录的所属组相同
sticky 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件

设置特殊权限

设置suid:

chmod u+s file1

设置sgid:

chmod g+s file1

设置sticky:

chmod o+t file1

与普通权限一样,特殊权限也可以使用数字方式标书
– SUID = 4
– SGID = 2
– Sticky = 1

如:

chmod 4775 file1  # 设置了suid权限

LINUX基本操作(6)——LINUX用户、组

lemenness阅读(5966)

Linux用户、组


当我们使用Linux时,需要以一个用户的身份登入,一个进程也需要以一个用户的身份运行
用户限制使用者或进程可以使用、不可以使用哪些资源
组用来方便组织管理用户
1.每个用户拥有一个UserID,操作系统实际使用的是用户ID,而非用户名
2.每个用户属于一个主组,属于一个或多个附属组
3.每个组拥有一个GroupID
4.每个进程以一个用户身份运行,并受该用户可访问的资源限制
5.每个可登陆用户拥有一个指定的shell

查看当前登录的用户信息:

id uid=0(root) gid=0(root) groups=0(root)

一、用户

CentOS 6分为以下三种:
– root用户(ID为0的用户为root用户)
– 系统用户(1~499)
– 普通用户(500+)
CentOS 7分为以下三种:
– root用户(ID为0的用户为root用户)
– 系统用户(1~999)
– 普通用户(1000+)
系统中的文件都有一个所属用户及所属组
使用id命令可以显示当前用户的信息
使用passwd命令可以修改当前用户密码

二、相关文件

/etc/passwd # 保存用户信息
/etc/shadow # 保存用户密码(加密的)
/etc/group  # 保存组信息

查看用户信息:

cat /etc/passwd:

用户信息,用 : 隔开
例如:

centos:x:1000:1000:Cloud User:/home/centos:/bin/bash

表示:用户名:密码占位符:UserID:GroupID:家目录:能够使用的shell
查看用户密码:

cat /etc/shadow:

例如:

mysql:!!:17724::::::
CQZ:$1$.9Ien1sA$ntklClePmcQjHcUc.fgLX/:17771:0:99999:7:::

用户名:加密后的密码(!!表示没有设置密码):::::::
单独取出密码字段进行分析:
$1$.9Ien1sA$ntklClePmcQjHcUc.fgLX/
以$符进行分割:
$1:密码的加密算法,不同数字表示不同加密算法,常见的加密算法有: md5 sha256 sha512
$.9Ien1sA:我们可以称之为salt(盐),顾名思义,在原密码的基础上加上一些字符或者其他东西
再进行加密,增加破解难度
$ntklClePmcQjHcUc.fgLX/:加密后的密码
查看组信息:

cat /etc/group

例如:CQZ:x:1003:
表示:用户名:组密码:组ID
注:现在组密码已经不用了

三、查看登录的用户

whoami # 显示当前用户
who   # 显示有哪些用户已经登录系统
w  # 显示有哪些用户已经登录系统并且在干什么

四、创建一个用户

useradd nash_su(用户名)

这个命令会执行以下的操作:
1.在/etc/passwd中添加用户信息
2.如果使用passwd命令创建密码,则将密码加密保存在/etc/shadow
3.为用户建立一个新的家目录/home/nash_su(用户名)
4.将/etc/skel中的文件复制到用户的家目录中
5.建立一个与用户用户名相同的组,新建用户默认属于这个同名组
命令useradd支持一下参数:
– d 家目录
– s 登录shell
– u userid
– g 主族
– G 附属组(最多31个,用”,”分割)
也可以直接修改/etc/passwd的方式实现,但不建议
查看用户占用的进程号:

ps aux |grep CQZ

强制结束进程:

kill -9 30990

五、修改用户信息

命令usermod用来修改用户信息
usermod 参数 username
-l 新用户名
-u 新userID
-d 用户家目录位置
-g 用户所属主组
-G 用户所属附属组
-L 锁定用户使其不能登录
-U 解除锁定

六、删除用户

命令userdel用以删除指定用户:

userdel nash_su(用户名)    # 保留用户家目录
userdel -r nash_su(用户名) # 同时删除用户的家目录

七、组

几乎所有操作系统都有组的概念,通过组,我们可以更加方便的归纳、管理用户。一般来说,
我们使用部门、职能或地理区域的分类方式来创建使用组
每个组有一个组ID
组信息保存在/etc/group
每个用户拥有一个主组,同时还可以拥有最多31个附属组

八、创建、自改、删除组

命令groupadd 用以创建组:

groupadd g1(组名)

命令groupmod用以修改组信息

groupmod -n newname groupname  # 修改组名
groupmod -g newGid groupname   # 修改组ID

命令groupdel用以删除组:

groupdel g1(组名)

LINUX基本操作(5)——LINUX软件管理

lemenness阅读(460)

Linux软件管理——源代码、RPM

源代码形式:
1.绝大多数开源软件都是直接以源代码形式发布
2.源代码一般会被打包成tar.gz的归档压缩文件
3.程序源代码需要编译成二进制形式之后才能够运行使用
4.源代码基本编译流程:
– ./configure 检查编译环境、相关库文件以及配置参数并生成makefile
– make 对源代码进行编译,生成可执行文件
– make install 将生成的可执行文件安装到当前计算机中

源代码形式的软件使用起来比较麻烦,但是兼容性及可控性较好
开源软件一般都会大量使用其他开源软件的功能,多以开源软件会有大量依赖关系(使用某软件先安装其他软件)

RPM

1.源代码形式的缺点:操作复杂、编译时间较长、极易出现错误
2.源代码形式的有点:适用于所有系统、可定制
3.为了方便使用,RPM(redhat Package Manager)
4.RPM通过将源代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理
5.RPM设计目标:
– 使用简单
– 使用单一软件包格式文件发布(.rpm)
– 可升级
– 追踪软件依赖关系
– 基本信息查询
– 软件验证功能
– 支持多平台
6.RPM基础命令
安装软件:

rmp -i software.rpm

卸载软件:

rpm -e software

升级形式安装:

rpm -U software-new.rpm

rpm支持通过http、ftp协议安装软件:

rpm -ivh http://网址/software.rpm

可以加入以下参数:
-v 显示相信信息
-h 显示进度条

RPM查询

RPM会保存软件相关的很多信息,可通过以下命令查询
列出所有安装的RPM软件

-rpm -qa

查询目标文件属于哪个包

-rpm -qf fillname

查询指定已安装rpm软件的信息

-rpm -qi packagename

查询指定已安装rpm软件包含的文件

-rpm -ql packagename

查询rpm文件的信息

-rpm -qip software.rpm

查询rpm文件包含的文件

-rpm -qip software.rpm

RPM验证

1.软件在传播的过程中可能会被恶意的修改,所以为了安全起见现代系统都加入了对软件的验证功能
2.验证一般使用非对称加密算法,所以需要一个秘钥
3.导入密钥

rpm --import RPM-GPG-KEY-CentOS-6

4.验证rpm文件:

rpm -K software.rpm

验证已安装的软件:

rpm -V software

Linux软件管理——YUM

1.rmp软件包形式管理软件虽然方便,但是需要手工解决软件包的依赖关系,很多时候安装一个软件需要首先安装很多其他软件,手工解决时很复杂。使用YUM可以解决
这个问题
2.YUM是一个RPM的前端程序,主要目的是设计用来自动解决RPM的依赖关系问题,特点如下:
– 自动解决依赖关系
– 可以对RPM进行分组,并基于组进行安装操作
– 引入仓库概念,支持多个仓库
– 配置简单
3.YUM引入了仓库(repo)的概念,仓库用来存放所有现有的rpm软件包,当使用yum安装一个rpm软件的时候,如果存在依赖关系,会自动在仓库中查找依赖并安装
– 仓库可以是本地的,也可以通过HTTP。FTP或NFS形式使用集中的、统一的网络仓库

YUM仓库
1.yum使用仓库保存rmp软件包,仓库的配置文件保存在/etc/yum.repos.d/目录下
格式如下:

[extras]     仓库简写名
name=Qcloud centos extras - $basearch  描述信息
baseurl=http://mirrors.tencentyun.com/centos/$releasever/  在网上的地址
gpgcheck=1   是否启动       1启动 0禁止
enabled=1    是否打开校验   1启动 0禁言
  • 仓库可以使用file、http、ftp、nfs方式
  • yum配置文件必须以.repo结尾
  • 一个配置文件内可以保存多个仓库的配置信息
  • /etc/yum.repos.d/目录下可以存在多个配置文件

YUM基本命令

yum管理软件的常用命令:
安装指定软件

yum install software-name

卸载指定软件

yum remove software-name

升级指定软件

yum update software-name

YUM查询
通过以下命令使用yum进行查询操作:

yum search keyword        #搜索
yum list(all|installed|recent|updates) #列出全部、安装的、最近的、软件更新显示指定软件的信息
yum info packagename   # 显示指定软件的信息
yum whatprovides filename   #查询哪个rpm软件包包含目标文件

创建YUM仓库

可以通过以下方式手工创建yum仓库
1.将所有rmp文件拷贝到一个文件夹中
2.通过rmp命令手工安装createrepo软件
3.运行命令createrepo -v /rpm-directory
4.如果有分组信息,则在运行命令的时候使用-g参数指定分组文件
例如:

createrepo -g/tmp/*comps.xml/rpm-directory

CentOS/RHEL的分组信息保存在光盘repodata/目录下,文件名以comps.xml结尾的xml文件

创建好之后本机可以通过file方式直接使用,如果需要作为对外的YUM仓库服务器,可以通过HTTP、FTP或NFS协议共享出去

YUM CACHE

yum为了提高速度会通过缓存很多信息,但是有时候缓存会造成一些故障,可以通过以下命令来清楚缓存:

yum clean all

每次运行安装或查询类命令会重建yum缓存

LINUX基本操作(4)——LINUX系统常用命令

lemenness阅读(399)

一、日期时间

1.命令 date 用以查看、设置当前系统时间:
格式化显示时间: +%Y--%m--%d
2.命令 hwclock(clock) 用以显示硬件时钟时间
3.命令 cal 用以查看日历
4.命令 uptime 用以查看系统运行时间

二、输出、查看命令

1.命令 echo 用以显示输入的内容
2.命令 cat 用以显示文件内容
3.命令 head 用以显示文件的头几行(默认10行)
-n 指定显示的行数
4.命令 tail 用以显示文件的末尾几行(默认10行)
-n 指定显示的行数
-f 追踪显示文件更新(一般用于查看日志,命令不会退出,而是持续显示新加入的内容)
5.命令 more 用以翻页显示文件内容(只能向下翻页)
6.命令 less 用以翻页显示文件内容(上下翻页)

三、查看硬件信息

1.命令 lspci 用以查看PCI设备
-v 查看详细信息
2.命令 lsusb 用以查看USB设备
-v 查看详细信息
3.命令 lsmod 用以查看加载的模块(驱动)

四、关机、重启

1.命令 shutdown 用以关闭、重启计算机
shutdown [关机、重启] 时间
-h 关闭计算机
-r 重启
如:
立即关机:

shutdown -h now

10分钟后关机:

shutdown -h +10

23:30分关机:

shutdown -h 23:30

立即重启:

shutdown -r now

2.命令 poweroff 用以立即关闭计算机
3.命令 reboot 用以立即重启计算机

五、归档、压缩

1.命令 zip 用以压缩文件

zip Linuxcast.zip myfile

2.命令 unzip 用以解压缩zip文件

unzip Linuxcast.zip

3.命令 gzip用以压缩文件

gzip Linuxcast.net

4.命令 tar 用以归档文件

tar -cvf out.tar Linuxcast
tar -xvf Linuxcast.tar
tar -cvzf backup.tar.gz /etc
**-z** 参数将归档文件进行gzip压缩以减少大小

六、查找

1.命令 locate 用以快速查找文件、文件夹:
locate keyword
此命令需要预先建立数据库,数据库默认每天更新一次,可用 updatedb 命令手工建立、更新数据库
2.命令 find 用以高级查找文件,文件夹:
find 查找位置 查找参数
如:

find . -name *Linuxcast*
find / -name *.conf
find / -perm 777
find / -type d
find . -name "a*" -exec ls -l {} \;

Linux基本操作(3)——Linux文件基本操作管理

lemenness阅读(356)

一、复制文件、目录

使用cp命令复制文件或者目录

cp 源文件(文件夹) 目录文件(文件夹)
cp /java /JAVA

常用参数:
-r 递归复制整个目录树
-v 显示详细信息

二、移动、重命名文件或目录

通过mv命令移动或者重命名文件或目录

mv 文件 目标目录
mv file /etc/wenjian

如果指定文件名,则可以重命名文件

三、创建、删除文件

1.通过touch命令可以创建一个空白文件或者更新已有文件的时间
2.通过rm命令可以删除文件或目录
常用参数:
-i 交互式
-r 递归的删除包括目录中的所有内容
-f 强制删除,没有警告提示(使用时注意)

四、创建、删除目录

1.通过 mkdir 命令创建一个目录
2.通过 rmdir 命令删除一个空目录
3.通过 rm -r(-f) 命令删除一个非空目录

第四节 Linux系统常用命令

一。日期时间
1.命令 date 用以查看、设置当前系统时间:
格式化显示时间:

+%Y--%m--%d

2.命令 hwclock(clock) 用以显示硬件时钟时间
3.命令 cal 用以查看日历
4.命令 uptime 用以查看系统运行时间

二。输出、查看命令

1.命令 echo 用以显示输入的内容
2.命令 cat **用以显示文件内容
3.命令 **head
用以显示文件的头几行(默认10行)
-n 指定显示的行数
4.命令 tail 用以显示文件的末尾几行(默认10行)
-n 指定显示的行数
-f 追踪显示文件更新(一般用于查看日志,命令不会退出,而是持续显示新加入的内容)
5.命令 more 用以翻页显示文件内容(只能向下翻页)
6.命令 less 用以翻页显示文件内容(上下翻页)

Linux基本操作(2)——Linux文件系统基本结构

lemenness阅读(384)

一、Linux文件系统结构

1.Linux文件系统为一个倒转的单根树状结构
2.文件系统的根为** /**
3.文件系统严格区分大小写
4.路径使用 '/' 分割,(Windows中使用 '\' )

二、当前工作目录

1.每一个shell或系统进程都有一个当前工作目录
2.使用 pwd 命令可以显示当前的工作目录

三、文件名称

1.文件的名称大小写敏感
2.名称最多可以为255个字符
3.除了正斜线外,都是有效字符
4.通过 touch 命令可以创建一个空白文件或者更新已有文件的时间
5.以.开头的文件为隐藏文件

四、列出目录内容

ls 命令用来列出目录内容
相关参数:
1.ls -a 显示所有文件(包括隐藏文件)
2.ls -l 显示详细信息
3.ls -R 递归显示子目录结构
4.ls -ld 显示目录和链接信息

五、查看文件类型

通过file命令可以查看文件的类型

六、绝对路径与相对路径

绝对路径:以/开头,递归每级目录直到目标的路径。不受当前所在目录限制
相对路径:以当前目录为起点,达到目标的路径。受当前所在目录的限制
首先了解cd命令:
cd命令可以用来切换目录
1.上一级目录: ..
2.当前目录: .
3.用户家目录: ~
4.上一个工作目录: -