一、 前言
首先,在你的Windows系统上要想有linux系统,那就必须先安装一款软件,这里提供的是14、15的,还有ISO镜像:VMware-workstation
安装VMware:略
新建虚拟机之前将ISO镜像加到配置,不然无法启动虚拟机,详见:CentOS 7的安装教程
注意:安装Linux操作系统时对内存的最低要求为:512M
二、 Linux虚拟机配置
- 常用软件包安装
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc net-tools
- 网络配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=“yes” BOOTPROTO=“static” IPADDR=10.0.0.100 # IP地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=10.0.0.254 # 网关 重启网卡: /etc/init.d/network restart DNS配置: vim /etc/resolv.conf nameserver 114.114.114.114 nameserver 223.5.5.5 配置完成之后就可以使用ping命令,如:ping baidu.com
- 主机名配置
hostnamectl set-homename 主机名
- ip配置
# 方法1 vim /etc/hosts进入文件编辑,输入:10.0.0.100 主机名,保存退出 # 方法2 echo '10.0.0.100' 主机名>>/etc/hosts 然后执行命令:ping 主机名,能ping通就说明OK了
- 防火墙配置
# 检查防火墙是否开启 iptables -L # 临时关闭防火墙 iptables -F service iptablesa stop # 永久关闭防火墙 systemctl disable firewalld # 查询selinux防火墙 getenforce(Enforcing 强制) # 临时关闭 setenforce 0 # 永久关闭 vim /etc/selinux/config 修改:SELINUX=disabled # 重启虚拟机
三、 常用快捷键
退出当前用户: Ctrl + d 查找: Ctrl + r 历史: history 锁屏: Ctrl + s 解锁: Ctrl + q 关机: poweroff 重启: reboot
四、 常用命令
命令格式:命令 [选项] [参数]
关机:init 0 切换用户:Ctrl+Alt[F1~F6] 退出: exit 浏览: ls(当前文件夹下) ls -l 详细信息 ll 详细信息 ls -a 显示隐藏文件 ls -ltr /var/log/ (时间倒序排列) 切换到当前用户的家目录: cd ~ 如:cd ~之后,pwd一下,会得到/root 返回上一次的目录: cd - 返回根目录: cd 日期: date date '月日时分年'(同步系统时间) hwclock -s(同步硬件时间) 万年历 : cal cal 月 年 清空屏幕: ctrl+l clear 帮助信息: man --help info
五、 目录(d)相关操作
创建目录: mkdir 文件名(指定路径,相对或绝对) mkdir -p /a/b/c 级联创建目录 小技巧: mkdir a{1..10} 批量创建多个目录 查询目录: ls ls -ld 查看单层目录 tree /a 查看多层目录 tree -L 1 只查看一层 小技巧: ls -ld dir* 迷糊查询 修改目录: 1. 剪切: mv /原路径 /目标路径 mv /原路径 /目标路径/重命名 mv /原文件名 /新文件名 2. 拷贝: cp 原路径 目标路径/重命名 cp -r /root/test /opt/new(拷贝目录) cp -a (带源文件的属性拷 删除目录: rm -rf /路径 rm -rf 多个文件 通过文件句柄找回丢失数据(不能重启,不能继续写入)
六、 普通文件(-)相关操作
种类: ASCII TEXT:纯文本 LSB Exe:二进制可执行文件(命令、程序) 压缩文件:zip、tar、gz、cpio、iso、bz2 二进制数据文件等 文件创建: 创建空文件: touch a.txt 删除文件: rm -rf a.txt 文件查看: 查看基本信息: ls -l a.txt 查看文件内容: cat a.txt 适合小文件内容查看,可同时查看多个文件 cat -n a.txt 带序号显示 more a.txt 分页显示,查看大文件,不可上下翻页 less a.txt 分页,可上下翻页查看 head a.txt 查看前十行信息 head -n3 a.txt 查看前三行信息 tail a.txt 查看后十行信息 tail -f 监控 文件操作: 复制:cp 不用加 -r 剪切:mv 的用法同目录操作 文件内容编辑: 1. 重定向: > 覆盖重定向 >> 追加重定向 cat /etc/passwd >>a.txt echo 2. vim编辑器: a:命令模式(初始模式) 1. 查看文件内容,移动光标,page up或down翻页 2. G,1G(gg),10G(最后一行, 第一行,第10行) 3. $行尾 ^行首 4. /搜索内容 高亮显示 5. yy 复制光标所在行 Nyy 复制N行 dd 删除/剪切 Ndd 删除/剪切N行 p 粘贴 x(delete) 删除光标所在的单个字符 dG 光标删除至文本末尾 d$ 光标所在删除到行末,包括光标所在字符 d^ 光标所在删除到行首,不包括光标字符 r 替换光标所在的单个字符 u 撤销 ZZ 保存退出 b:编辑模式 i 光标字符之前插入数据 o 光标所在的下一行插入数据,新起一行 a 光标字符之后插入数据 A 行末录入数据 I 行首录入数据 O 上一行录入数据 退出编辑模式:按Esc,退回到命令模式 c:末行模式 命令模式下按:进入 强制退出: :q! 保存退出: :wq 显示行号: :set nu 不显示行号: :set nonu 批量替换: :%s/root/ROOT/g
七、 磁盘 & 文件系统
- 磁盘分区和格式化
不同的操作系统具有不同的硬盘分区工具,Windows系统下非常有名的分区工具是FDISK,在LINUX系统下进行分区可以使用fdisk,或者使用相同功能的图形界面程序,在一块硬盘上最多只能有4个分区,通过分区当然不能产生任何文件系统。在分区之后只是对硬盘上的磁盘空间进行了保留,还不能直接使用。分区后必须要进行格式化。在Windows系统下可以通过资源管理器下的文件菜单或者format程序来执行,在Linux系统下大多使用mkfs命令来完成。Linux支持不同的文件系统,应用最广泛的是ext3。
注意:进行任何磁盘分区或大小改动工作,都会丢失以前的数据,因此在分区之前一定要对数据进行备份。
- 硬盘分区 & 格式化
查看磁盘: ls -l fdisk -l 分区: fdisk /dev/sdb ---> 进入 n 新建 p 查看现有分区 w 保存退出 格式化成文件系统:XFS mkfs.xfs /dev/sdb1/ 挂载设备: 挂载点(空目录):mkdir /data 挂载: mount /dev/sdb1 /data 查看磁盘使用情况: df -h 自动挂载的配置文件: vim /etc/fstab /dev/sdb1 /data xfs defaults 0 0 # 磁盘路径 挂载到哪 什么格式
注:最好用uuid替换磁盘路径 UUID=asia-fofe-sada-123 /data xfs defaults 0 0 查看挂载设备信息: blkid
- 补充RAID
磁盘阵列(Redundant Arrays of Independent Drives,RAID)
功能:
- 1. 聚合多块磁盘的容量,提供更大的储存空间
- 2. 高性能的并发存取(IO)
- 3. 数据物理层面的安全性更高(做成镜像关系)
RAID级别:
- raid0 条带化功能,性能极高,无安全性,至少2块盘
- raid1 磁盘镜像(把一个磁盘的数据镜像到另一个磁盘上),性能无明显提升,安全性高,浪费一半的空间
- raid1+0: 至少需要4块盘,镜像+条带化,兼顾性能与安全,成本较高,浪费一半空间
- raid5: 分布式奇偶校验的独立磁盘结构,至少3块盘,存储数据时计算校验值,写入性能低,读的速度较快,适用于读多写少的场景
八、 用户、组、 权限
更多请访问网址: http://www.cnblogs.com/linhaifeng/articles/6045600.html#_label7
- 用户
1. 用户及passwd文件 /etc/passwd文件:存储所有用户的相关信息,该文件也被称为用户信息数据库(Database)。 /etc/passwd文件每个字段的具体含义: 字段1: 记录的是这个用户的名字(在创建用户时root用户起的)。 字段2: 如果是x,表示该用户登录Linux系统时必须使用密码;如果为空,则该用户在登录时无须提供密码。 字段3: 记录的是这个用户的uid。注意:(0-1000系统占用)uid为0,是root用户 字段4: 记录的是这个用户所属群组的gid。 字段5: 记录的是有关这个用户的注释信息(如全名或通信地址)。 字段6: 记录的是这个用户的家目录的路径。 字段7: 记录的是这个用户登录后,第一个要执行的进程 2. 用户管理: 了解useradd命令的常用选项: –u: 指定用户的UID –g: 指定用户所属的群组 –d: 指定用户的家目录 –c: 指定用户的备注信息 –s: 指定用户所用的shell(/bin/bash 或者 /sbin/nologin) eg: 创建用户: useradd [-u 1001 -g 1001 -d /home -c bigman -s /bin/bash] rongge 查看用户信息: id 用户名 tail -1 /etc/passwd 查看当前登录用户:whoami or who 设置密码: passwd 用户名 切换用户: su - 用户名 删除用户: userdel -r 用户名 修改用户: usermod -u uid 用户名 3. 创建一个用户涉及到的5个文件,eg(useradd test): 家目录: ls /home/ 密码目录: ls /etc/passwd 密码详情目录: ls /etc/shadow 组目录: ls /etc/gorup 组密码目录: ls /etc/gshadow 邮箱目录: ls /var/spool/mail/ 重点:在Linux中,一切皆文件,所以新创建的用户也是一个文对象!
- 组
GID,组名 组管理: 创建组: groupadd [-g 1001] 组名 查看组: cat /etc/group tail -1 /etc/group 删除组: groupdel 组名 修改组的id: groupmod -g 10001 组名
- 权限
作用在文件上的属性 普通权限的规划: r 读 4 w 写 2 x 执行 1
九、 程序管理 & 网络管理
-
程序管理
# 查看操作系统的进程状态: ps ps -ef |grep 进程名 查看特定的进程 ps aux | head -3 查看前三行的进程 # 杀死进程: kill 进程号 kill -9 进程号 强制杀死 pkill 进程名 # 服务的操作: systemctl start 服务 systemctl restart 服务 systemctl stop 服务
-
网络管理
# 查看地址: ip a ifconfig # 修改地址: vim /etc/sysconfig/network-scripts/ifcfg-eth0 # 重启网络:systemctl restart network # 查看启动服务的端口: netstat -tulnp
十、 软件包管理
# 光盘挂载: mount /dev/cdrom /mnt cd/mnt/package 查看软件包个数: ls -l |wc -l # 软件包的安装: rpm -ivh 软件包名.rpm rpm -Uvh 软件包名.rpm(更新安装) # rpm包的查询: rpm -q 完整的软件包名 安装显示 rpm -qa 显示所有 rpm -qa |grep 包名(过滤显示) # 软件包的卸载: rpm -e 软件包名(正常卸载) # 查看命令的具体路径: which vim # 查询命令来自哪个软件包: rpm -qf 命令文件路径 # 查看安装软件的文件: rpm -ql 软件包名 # 依赖安装: rpm -ivh a b c d(还是严格依赖版本号)
-
yum
安装yum: yum配置文件(yum源)cd /etc/yum.repos.d 移除Base源:mv *.repos /tmp 从ali获取Base源,并安装: wget http://mirrors.aliyum.com/repo/Centos-7.repo 安装epel源: yum install -y epel-release 使用yum安装软件: yum install openssl -y (证书软件) yum install openssl-devel -y (支持软件) yum groupinstall "组名" 安装一个组的软件包 查询软件包: yum list |grep python yum grouplist 卸载软件包: yum remove 优化yum源: 移走网络的yum: mkdir ali mv *.repo ali 1. 设置本地的yum源: 先将光盘挂载到mnt目录 vim /etc/yum.repos.d/loacal.repo [local] name=localiso baseurl=file:///mnt gpgcheck=0 使用: 先清除缓存的yum: yum clean all 安装软件: yum install 软件名 -y 2. 局域网yum源 安装ftp软件:yum install vsftpd -y 启动ftp: systemctl start vsftpd systemctl enable vsftpd 创建站点目录,将光盘镜像拷贝到文件目录 mkdir /var/ftp/pub/centos7 cp -a /mnt/* /var/ftp/pub/centos7 生成ftp站点的yum源的配置文件 cd /etc/yum.repos.d/ vim ftp.repo [ftpd] name=centos7 baseurl=ftp://ip地址/pub/centos7 gpgcheck=0 测试安装: yum clean all yum install 软件名
-
源码包
zip 解压: unzip xxx.zip tar 解压: tar xf xxx.tar tar.gz tar.xz tgz iso 需挂载使用: mount -o loop xxx.iso /test
下载redis wget http://download.redis.io/releases/redis-3.2.10.tar.gz redis安装 tar xf redis-3.2.10.tar.gz cd /redis-3.2.10 make 添加环境变量 vim /etc/profile 末尾行添加: export PATH=/opt/redis-3.2.10/src:$PATH 保存后让它生效:source /etc/profile 启动服务: redis-server & 查看服务: netstat -tulnp|grep redis 连接服务: redis-cli python连接redis: 1. unzip redis-py-master.zip 2. cd redis-py-master 3. python3 setup.py install 本地连接测试 对redis的单实例进行连接操作 python3 >>>import redis >>>r = redis.StrictRedis(host='localhost', port=6379) >>>r.set('name', 'oldguo') True >>>r.get('name') b'oldguo'
源码包安装的流程(python3.6): 先到官网下载Linux系统的源码包:Python-3.6.7.tar.xz 解压文件:tar xf Python-3.6.7.tar.xz 安装依赖环境: yum install openssl openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ zlib zlib-devel -y 配置: cd Python-3.6.7 ./configure 定制功能 编译为二进制文件并拷贝: make && make install
-
二进制包
将MySQL解压到opt目录:tar xf mysql-5.7.20-linux-......gz 软链接: ln -s 。。。。。 mysql 编辑环境变量: vim /etc/profile 末尾行添加: export PATH=/opt/mysql/bin:$PATH 生效: source /etc/profile 卸载自带的 mariadb库: yum remove mariadb-libs 生成配置文件(/etc/my.cnf): vim /etc/my.cnf [mysqld] basedir=/opt/mysql datadir=/opt/mysql/data socket=/tmp/mysql.sock log_error=/var/log/mysql.log log_bin=/opt/mysql/data/mysql-bin server_id=100 [mysql] socket=/tmp/mysql.sock 创建用户&数据目录,并授权: useradd mysql mkdir /opt/mysql/data chown -R mysql.mysql /opt/mysql 初始化数据: mysqld --initialize-insecure --basedir=/opt/mysql --datadir=/opt/mysql/data --user=mysql 共享库问题报错: mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 解决: yum install -y libaio 权限问题报错: 2019-04-19T09:39:31.312685Z 0 [ERROR] Could not open file '/var/log/mysql.log' for error logging: Permission denied 2019-04-19T09:39:31.312901Z 0 [ERROR] Aborting 解决:touch /var/log/mysql.log 授权:chown -R mysql.mysql /var/log/mysql.log 启动数据库:方法1 cd /opt/mysql/support-fiels ./mysql.server start 为方便启动:方法2 cp mysql.server /etc/init.d/mysqld /etc/init.d/mysqld start 扩展:方法3(systemctl方法) 使用 systemctl 管理mysql vim /etc/systemd/system/mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 启动 systemctl start mysqld 创建mysql链接用户,进入mysql授权 grant all on *.* to root@'10.0.0.%' identified by '123'; 安装pymysql pip3 install pymysql 进入mysql测试: vim testmysql.py #!/usr/bin/python3 import pymysql db = pymysql.connect("10.0.0.100","root","123","bbs" ) cursor = db.cursor() cursor.execute("SELECT VERSION()") data = cursor.fetchone() print ("Database version : %s " % data) db.close() 执行py文件: python3 testpython.py
十一、服务
-
ssh服务
安装ssh: yum install ssh -y 查看:rpm -qa | grep openssh 服务端启动ssh: service sshd status 客户端连接ssh: ssh ip地址 修改ssh配置: vim /etc/ssh/sshd_config 默认端口22 重启服务: service sshd restart ssh启动优化: 配置文件中:/etc/ssh/sshd_config 将UseDNS改为no hosts文件添加ip地址和主机名
-
http服务
部署网页服务: 准备环境: 关防火墙、配ip 安装: yum install httpd -y 修改配置文件:vim /etc/httpd/conf/httpd.conf Listen 80 DocumentRoot 路径/var/www/html 重启: service httpd restart echo 'test' >> /var/www/html/index.html 测试: 打开浏览器输入 http://服务端ip:端口/
-
samba服务
samba是一个网络服务器,用于Linux和Windows之间共享文件 ''' 注意: 客户端要对目录是否有权限,必须samba软件放权+系统放权 每个用户的访问方式是:\服务端ip用户名,默认访问自己的家目录(该用户对该目录有w权限,且samba对用户的家目录开启了writeable=yes的权限) 对于共享的目录,是所有人打开目录进行操作的,而不是一个打印机,所以printable一定要设置no writeable=no,write list=user1,user2代表所有人都没有写权限,唯独user1和user2有 ''' 安装: yum install samba -y 修改配置: vim /etc/samba/smb.conf samba安全认证掌握两种:share(匿名访问)、user(用户名密码) security=user、share 启动: service smb start 重启: service smb restart 关闭: service smb stop 添加smb用户和设置密码: useradd 用户名 smbpasswd –a 用户
[common] comment = ...... 设置共享注译 path = 设置共享目录的物理路径 valid users = @组名,用户名 设置允许哪些合法组或用户访问 public = yes|no 设置共享资源是否能给游客帐号访问 browseable = yes|no 设置该共享为隐藏共享 writable = yes|no 设置是否允许客户端写入数据 hosts allow = 设置允许访问该共享的合法网段或IP
-
Nginx服务
使用官方Nginx yum源 vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 安装Nginx: yum install nginx -y 启动Nginx,并将Nginx加入开机自启: systemctl start nginx systemctl enable nginx 查看启动: netstat -tulnp|grep nginx
十二、django项目测试
# 依赖包安装: yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++ openssl-devel zlib zlib-devel -y # 安装Django框架和uwsgi: 写入re.txt文件: vim re.txt asn1crypto==0.24.0 beautifulsoup4==4.6.3 bs4==0.0.1 certifi==2018.4.16 cffi==1.11.5 chardet==3.0.4 Click==7.0 cryptography==2.3.1 Django==1.11.9 Flask==1.0.2 Flask-Cors==3.0.6 gevent==1.3.6 greenlet==0.4.15 idna==2.7 ItsDangerous==1.1.0 Jinja2==2.10 lxml==4.2.6 MarkupSafe==1.0 numpy==1.15.3 Pillow==5.3.0 pycparser==2.18 PyMySQL==0.9.2 pytz==2018.7 requests==2.19.1 selenium==3.141.0 six==1.11.0 urllib3==1.23 virtualenv==16.1.0 Werkzeug==0.14.1 wordcloud==1.5.0 安装re.txt内的包:pip3 install -i https://pypi.doubanio.com/simple/ -r re.txt 安装uwsgi:pip3 install -i https://pypi.doubanio.com/simple/ uwsgi # 测试uwsgi是否正常,新建 test.py文件,内容如下: vim test.py def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello Django"] ''' 注意,不能使用root用户,否则会报错: *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** your server socket listen backlog is limited to 100 connections your mercy for graceful operations on workers is 60 seconds mapped 72920 bytes (71 KB) for 1 cores *** Operational MODE: single process *** WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x1c608b0 pid: 24413 (default app) uWSGI running as root, you can use --uid/--gid/--chroot options *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** *** uWSGI is running in multiple interpreter mode *** spawned uWSGI worker 1 (and the only) (pid: 24413, cores: 1) ''' 解决: 创建一个用户:useradd 用户名 切换到用户下:su - 用户名 然后在终端运行: uwsgi --http :8001 --wsgi-file test.py & 页面显示:Hello Django就对了 测试django,运行: django-admin.py startproject demosite cd demosite vim settings.py 修改:ALLOWED_HOSTS=['*'] python3 manage.py runserver 0.0.0.0:8002 在浏览器内输入:http://10.0.0.100:8002,检查django是否运行正常 # 使用uwsgi进行项目管理 配置uwsgi vim /root/demosite/uwsgi.ini [uwsgi] socket = 127.0.0.1:9999 master = true workers = 2 max-requests = 1000 buffer-size = 30000 pidfile = /run/uwsgi.pid daemonize = /var/log/uwsgi.log 启动uwsgi uwsgi --ini /root/test1/uwsgi.ini & 配置nginx vim /etc/nginx/conf.d/py.conf server { listen 80; server_name 10.0.0.100; client_max_body_size 100M; location / { index index.html; include uwsgi_params; uwsgi_pass 127.0.0.1:9999; # 转发的地址 uwsgi_param UWSGI_SCRIPT demosite.wsgi; uwsgi_param UWSGI_CHDIR /root/demosite; # 项目目录 } } # 重启nginx: systemctl restart nginx # 浏览器访问: http://10.0.0.100 会跳转至django项目 # 查看进程: ps -ef |grep uwsgi
十三、Django项目部署
1. 先将自己的项目打包(BBS.zip),传到opt目录下,再导出数据库sql,一并传到opt目录下 2. 连接到mysql,导入SQL脚本 a. 创建库:create database bbs charset utf8mb4 b. use bbs; c. source /opt/bbs.sql;(导入) d. show tables; e. q (退出) cd /opt unzip BBS.zip cd BBS/BBS vim settings.py 修改: ALLOWED_HOSTS=["*"] DATABASES = { 'default': { 'HOST': '10.0.0.100', 'USER': 'root', 'USER': 'bbs',(优化后的用户) } } 授权用户:grant select,update,insert,delete on bbs.* to bbs@'10.0.0.%' identified by '123'; 测试用户连接mysql: mysql -ubbs -p123 -h10.0.0.100 ''' 补充: mysql用户的定义 USERNAME@'白名单' 权限: grant all grant select,update,insert ''' 3. 配置nginx cd /BBS vim /etc/nginx/conf.d/py.conf server { listen 80; server_name 10.0.0.100; client_max_body_size 100M; location /static { alias /opt/BBS/static/; } location /media { alias /opt/BBS/media; } location / { index index.html; include uwsgi_params; uwsgi_pass 127.0.0.1:9090; uwsgi_param UWSGI_SCRIPT BBS.wsgi; uwsgi_param UWSGI_CHDIR /opt/BBS; }} 4. 配置uwsgi vim uwsgi.ini [uwsgi] socket = 127.0.0.1:9090 master = true workers = 2 reload-mercy = 10 vacuum = true max-requests = 1000 limit-as = 512 buffer-size = 30000 关闭已有的uwsgi服务: kill -9 `ps -ef |grep uwsgi|awk {'print $2'}` 5. 启动uwsgi uwsgi --ini uwsgi.ini & 6. 重启nginx systemctl restart nginx