Linux系统小白学习

  • Linux基础介绍安装
      • 1.1 Unix与Linux
        • 背景
        • Unix&Linux区别与联系
      • 1.2 Linux介绍
        • 特点
        • 组成
        • Linux文件系统
        • 内核版本
        • 硬件
        • 文件目录结构
      • 1.3 安装
        • 虚拟机与物理机
        • 虚拟网络
        • 配置介绍
    • 2,Linux基本操作
      • 基本使用
      • 命令
        • cd进入目录
        • pwd显示当前位置
        • ls 显示当前目录或文件
        • touch创建文件,文件存在时再创建会改变时间戳
        • mkdir创建目录(蓝色),
        • rmdir删除空目录
        • cp复制文件或目录,
        • mv 移动
        • ln创建链接:
        • gzip/bzip2/gunzip/bunzip2
        • tar 打包
        • 文本处理
        • 文本浏览
        • ps显示进程状态
        • vi
    • 3,网络服务
      • 网络配置
        • 常用的配置文件
        • 网络地址的配置
          • DHCP获取IP地址
        • 网络状态的监控
        • 运行级别---runlevel
        • 服务管理
      • 软件操作
        • 软件安装形式
          • 源码
          • RPM
          • YUM
    • 4,远程和用户管理
      • 远程接入
        • shell&文件传输
        • VNC---图形界面远程
        • winscp,linux与windows的互传工具
      • 用户管理
        • 账号分类
        • 文件内容:
        • 用户管理
        • 组管理
        • 密码管理
        • 组员管理
    • 5,权限设置&文件管理
      • 文件权限控制
        • 基本权限
        • 基本权限设置
        • umask权限掩码
        • 特殊权限
        • ACL权限----setfacl
        • sudo
      • 磁盘基础
      • 机械磁盘
      • 磁盘介绍
          • 硬件参数
          • 常用接口
          • 存储介质
        • 磁盘分区
          • MBR
          • 文件系统:
        • 磁盘管理
          • 添加硬盘:
          • GPT磁盘管理---超大容量
          • 创建SWAP分区
    • 运维
      • 进程
        • 概述
        • 进程优先级
      • 作业控制
      • 任务调度

如果有什么问题或歧义,欢迎指正

Linux基础介绍安装

1.1 Unix与Linux
背景
  • 1969Unix诞生,版本有v1(汇编语言),v4(c语言),v6(贝尔实验室外流传),v7(完整c编辑器)

    • 两大流派:AT&T发布的Unix操作系统System V、美国加州大学伯克利发布的BSD
    • 主要版本:AIX(IBM的Unix)、FreeBSD、HP-UX、SunOS
  • 1991linux诞生:李纳斯,Linux之父,在硬件上完成终端仿真程序,使用了汇编语言和C语言,从BIOS引导磁盘启动计算机编程,后来又开发了磁盘驱动程序和文件管理系统,并且和Minix文件系统兼容,操作系统也就成型了,后来就放到FTP服务器上供大家下载测试,自己进行了完善,这一举动体现了开放源代码运动的思想。后来李纳斯在一次演讲后将GNU GPL作为Linux版权声明,奉献给了自由软件,促成了Linux今天的辉煌

Torvalds有机会聆听了自由软件运动之父Richard Stallman (理查德斯托曼,生于1953年)的一次演讲,促使他考虑转向GUN的GPL. Richard Stallman是自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。他最大的成就是为自由软件运动创立了道德、政治以及法律框架,因而被誉为当今自由软件的斗土、伟大的理想主义者。GNU计划是由RichadStalman在1983年9月27日公开发起的,它的目标是创建一-套完全自由的操作系统。为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件必须遵守GNU通用公共许可证(GNU General Public License,简称GNUGPL),GNU GPL创造性地提出了“反版权”(即Copyleft)的概念,这是一个不同于商业软件的“版权所有”(即Copyright) 的法律概念,GNU GPL并不是为了否认版权,也不禁止分发软件时收取费用或取得利润。其核心思想是任何火发布一个遵守GNU GPL的软件时,不管是收费的还是免费的,都必须将发布者具有的一切权利给予软件的接受者,必须保证软件接受者能同时收到或通过其他途径得到源程序,共自将GNU GPL加在软件的版权声明中,使软件接受者知道自己有这样的权利。GNU GPL本身也是受法律保护的版权声明。

  • 常见版本: RHEL-RedHat Enterprise Linux (所谓的Redhat Advance Server,收费版本)、Fedora Core (由原来的Redhat桌面版本发展而来,免费版本)、CentOS (RHEL的社区克隆版本,免费版本)、 Debian Linux (唯一由非商业组织维护的hux发行版本, 功能强大)、 Ubuntu (严格说不能算一个独立的发行版本, 它是基于Debian的unstable版本加强而来)、SuSe Linux (Novell公司产品欧洲常用)
Unix&Linux区别与联系
  • 联系:后者模仿前者,但比前者功能更强大,源代码也互无关,前者历史久于后者,但后者思想先与前者
  • 区别:前者与硬件配套,后者运行于硬件之上,前者闭源,实行知识产权保护,后者是自由软件,免费且开源。
  • 学习Linux原因:开源、免费的操作系统,其稳定安全性、处理多并发已得到认可,很多企业的选择。
1.2 Linux介绍
特点
  • 优点:开放性,遵循世界标准,多用户同时使用的系统资源,多任务多程序运行相互独立,设备独立,/dev每个文件都标识一个设备,具有强大的文件管理系统,丰富的网络功能,可靠安全,移植性好。
  • 缺点习惯windows的不容易掌握,支持的PC硬件不广泛。
组成
  • Linux内核:系统的核心,运行程序和管理的核心程序,如进程管理
  • Linux shell:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口
  • Linux文件系统:是文件存放在磁盘等存储设备的组织方法,可支持做种异构的文件系统
  • Linux应用系统:有一整套成为应用程序的程序集,包括编辑器、数据库等
Linux文件系统
  • 组成:目录项(包括文件名和inode节点号)、inode(文件索引节点,包含文件的基础信息,如文件字节数、user id、文件组id、文件读写执行权限等,ls -li查看)、数据区(包含文件的具体内容)。
内核版本
  • 组成:主版本号、次版本号(最大为5,偶数是稳定版,奇数是有bug的测试版)、修正号
硬件

文件目录结构

1.3 安装
虚拟机与物理机

虚拟网络

MBR (主启动记录)
MBR不属于任何分区,不会对应到系统中的设备节点,它存放在第一个磁盘的第0轨上并且大小固定为512bytes

  • boot loader固定为446bytes,存放开机所必须的信息,其作用是从哪个分区载入操作系统
  • partition table大小固定为64bytes,存放了每个分区起始的, 磁柱与结束的磁柱,记录每个分区起始到结束的磁柱所需要的空间固定为16bytes,所以一个磁盘只能划分四个分区,可以使用3p+ 1e的结构来扩充。在扩展分区当中第一个逻辑分区的第一个磁区里面,也会记录自己是从哪个磁柱开始的又会在哪个磁柱结束,并且记录下一个分区是从哪个磁柱开始的,第二个逻辑分区中也…
  • magic的大小固定为2bytes,存放每个bios的magic号。 (结束标志字,硬盘有效标志),固定为55AA
  • GPT (GUID分区表),最多可创建128个主分区

配置介绍
  • [root@hly/]#:root表示当前登录用户,hly表示主机名,/代表当前目录,#代表用户等级权限为超级用户,$代表普通用户
  • 快照功能:如果误操作,可以利用快照恢复至误操作之前的某步
  • 克隆:链接克隆与源共享一个内存/cpu,完整克隆就是独立个体副本,
  • 没有网的解决方法:本机防火墙是否关闭;Linux/seLinux是否关闭;Linux网络服务是否启动;vmware nat服务和DHCP是否启动;NetworkManager.service未关闭
  • 禁用防火墙和SELinux
    • systemctl stop/start firewall临时禁用防火墙
    • systemctl disable firewall.service永久禁用,但是重启有效,所以第一次前两个结合用
    • firewall-cmd --state查看防火墙状态
    • setenforce 0临时关闭selinux
    • vi /etc/selinux/connfig进入vi编辑将enforcing改为disable(i为插入的意思,esc键为取消插入,再输入冒号,输q!(强制退出)/wq保存并退出),永久禁用selinux

2,Linux基本操作

基本使用

  • 大小写敏感(Windows不敏感),Linux下的“/”等于Windows下的“\”,而Linux下的“\”放在命令最后表示下行命令接此行,跳脱符号“\”,可以将空格/@等符号转为普通字符,例:touch b\ B指的创建“b B”文件
  • 文件名前面加“.”表示隐藏文件,文件开头#表示注释行
  • 退出:exit 、ctrl+d。切换用户:su xx。
  • X-Windows到控制台之间的切换:CTRL+F1-F6(远程不行)。
  • 关机:shutdown - h now/3(指三分钟后关机,ctrl+c强制退出,不关机);halt(不常用);init 0
  • 重启:shutdown - r now/3;reboot;init 6
  • 注销shell界面:logout(适用于远程登陆)/exit/ctrl+d;pkill -kill -t pts /0
  • Ctrl+s锁屏时隐藏但依然执行,ctrl+q解锁
  • w(查看登录用户的详细信息)、who=who am i(查看登录用户的部分信息,进程时间IP地址)、whoami(显示用户名)
  • Whichis ls查看命令ls脚本在哪,whatis ls指列出命令ls简短描述,whereis ls查看命令ls的位置
  • ls --help查看命令的帮助文档和参数
  • man 1/5/8 ls显示说明文档,号码区分章节
    • 1代表普通使用者都可以用,
    • 5表示文件格式说明,
    • 8表示root用户使用的命令
    • / key-word:搜索关键字key-word,n是下跳,N是上跳关键字,q离开文档
  • history显示历史命令,!序号:执行该行命令,!$为上一条命令的最后一参数
[root@localhost ~]# history17  w18  who19  whoami20  hsgd
[root@localhost ~]# !18
who
root     :0           2020-02-24 21:00 (:0)
root     pts/0        2020-02-24 21:01 (:0)
  • uname -a 查看内核版本所有信息,uname -r查看版本简要,cat /etc/redhat-releasa查看虚拟机版本
[root@localhost conf.d]# uname -a
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost conf.d]# uname -r
3.10.0-957.el7.x86_64
[root@localhost conf.d]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
  • ;hostname 显示主机名 ;hostname xx改名(logout/ctrl+d先登出);vi/ect/hostname,进入编辑,按i编辑,永久改名;
  • date打印时间,date -s xx:xx:xx(15:23:00/20150302/“20200223 16:23:00”)修改时间,cal 空/06 2019打印日历,
[root@hly ~]# date
2020年 02月 24日 星期一 21:28:59 CST
[root@hly ~]# date -s 21:35:00
2020年 02月 24日 星期一 21:35:00 CST
[root@hly ~]# date -s 20131013
2013年 10月 13日 星期日 00:00:00 CST
[root@hly ~]# date -s '20200224 21:31:59'
2020年 02月 24日 星期一 21:31:59 CST
  • cal 显示日历,例:cal 02 2020
  • tab自动补齐,按两下是显示所有相同前缀的可能性

命令

cd进入目录
[root@hly ~]# cd .
[root@hly ~]# cd ..
[root@hly /]# cd /etc
[root@hly etc]# cd .
[root@hly etc]# cd ..
[root@hly /]# cd -
/etc
pwd显示当前位置
[root@hly etc]# pwd
/etc
ls 显示当前目录或文件
  • -a(所有文件)、-l(详细信息)、-d(属性)、-i(显示inodes),ll查看当下文件
touch创建文件,文件存在时再创建会改变时间戳
  • touch b\ B指的创建“b B”文件
[root@hly tmp]# touch a b
[root@hly tmp]# ls -l
总用量 1224
-rw-r--r--  1 root root      0 2月  24 21:48 a
-rw-r--r--. 1 root root   1148 2月  20 13:29 anaconda.log
-rw-r--r--  1 root root      0 2月  24 21:48 b
mkdir创建目录(蓝色),
[root@hly tmp]# mkdir dir
[root@hly tmp]# cd dir
[root@hly dir]# ls
[root@hly dir]# mkdir s
[root@hly dir]# ls
s
[root@hly tmp]# rmdir dir
rmdir: 删除 "dir" 失败: 目录非空
rmdir删除空目录
  • rmdir o删除空目录,rm -rf d删除非空目录,re -rf *从删除到跑路,rm h删文件
[root@hly tmp]# rm -rf dir
[root@hly tmp]# cd dir
bash: cd: dir: 没有那个文件或目录
cp复制文件或目录,
  • cp -p(保留原来时间戳)、-r(复制目录)、-a(同时使用-p-r)。cp -r /tmp/h /tmp/o/yy复制并改名为yy,复制目录时:cp -r /tmp/h /tmp/o把h从tmp复制到o;cp -p /tmp/h /tmp/o/uu保留目录之前时间
[root@hly tmp]# ls -l
总用量 1224
-rw-r--r--  1 root root      0 2月  24 21:48 a
-rw-r--r--. 1 root root   1148 2月  20 13:29 anaconda.log
-rw-r--r--  1 root root      0 2月  24 21:48 b
drwxr-xr-x  2 root root      6 2月  24 22:03 f1
drwxr-xr-x  2 root root      6 2月  24 22:03 f2
drwxr-xr-x  2 root root      6 2月  24 22:03 f3
[root@hly tmp]# cp -r /tmp/f2 /tmp/f1
[root@hly tmp]# cd f1
[root@hly f1]# ls
f2
[root@hly tmp]# cp -r /tmp/f3 /tmp/f2/f33
[root@hly tmp]# cd f2
[root@hly f2]# ls
f33
mv 移动
  • mv /tmp/passwd /tmp/a/b把passwd移到a并改名b。-r/-f
[root@localhost tmp]# mv /tmp/1 /tmp/c
[root@localhost tmp]# cd c
[root@localhost c]# ll
总用量 0
drwxr-xr-x 2 root root 6 2月  26 17:44 1
[root@localhost tmp]# mv -t /tmp/c /tmp/2#加-t,就是将先写目标,后写源
[root@localhost tmp]# cd c
drwxr-xr-x 2 root root 6 2月  26 17:44 2
ln创建链接:
  • 软链接(ln -s 源绝对路径 目的绝对路径/重命名。 类似快捷方式)
  • 硬链接(类似复制,不能跨分区和用目录建立链接。ln 绝对路径 目的绝对路径/重命名)
  • 绝对路径:根目录下有多个目录,并且这些目录有相同文件名时,就要从根目录开始写路径
  • 相对路径:在相应目录下可以找到相应文件
[root@localhost tmp]# ln -s /tmp/f1 /tmp/a#软链接,加-s
[root@localhost tmp]# cd a
lrwxrwxrwx 1 root root 7 2月  26 18:08 f1 -> /tmp/f1
[root@localhost tmp]# ln /tmp/f2 /tmp/c/f22#硬链接并且命名
[root@localhost tmp]# cd c
[root@localhost c]# ll
总用量 0
-rw-r--r-- 2 root root 0 2月  26 18:08 f22
[root@localhost tmp]# rm -rf f2#删除硬链接的源文件,链接不失效
-rw-r--r-- 1 root root 0 2月  26 18:08 f22

gzip/bzip2/gunzip/bunzip2
  • 后者压缩比高,要压缩的文件如果存在链接,就不能压缩,gzip x(直接压缩,生成x.gz文件,源文件不在),gzip -c x > x.gz(压缩文件和源文件都在。
  • Bzip2和前者压缩并保留原文件时:bzip -k x),gzip -v x(显示压缩信息),gzip -cv x > xx.gz(),gzip -r x(针对目录进行递归压缩,对目录下的文件进行压缩,不对目录压缩)
  • 解压缩,gunzip x.gz
[root@localhost tmp]# gzip -c 3 > 3.gz#压缩并不覆盖
drwxr-xr-x 2 root root  6 2月  26 17:44 3
-rw-r--r-- 1 root root  0 2月  26 18:24 3.gz
[root@localhost tmp]# gzip 1#压缩并覆盖源文件
[root@localhost tmp]# ll
总用量 4
-rw-r--r-- 1 root root 22 2月  26 18:23 1.gz
[root@localhost tmp]# bzip2 -k 2#压缩不覆盖
[root@localhost tmp]# ll
总用量 8
-rw-r--r-- 1 root root 22 2月  26 18:23 1.gz
-rw-r--r-- 1 root root  0 2月  26 18:23 2
-rw-r--r-- 1 root root 14 2月  26 18:23 2.bz2
[root@localhost tmp]# gzip -cv a > aa.gz#压缩不覆盖且命名
drwxr-xr-x 2 root root 16 2月  26 18:08 a
-rw-r--r-- 1 root root  0 2月  26 18:29 aa.gz
[root@localhost c]# gunzip cc.gz#解压
[root@localhost c]# ll
总用量 0
-rw-r--r-- 1 root root 0 2月  26 18:30 cc
[root@localhost tmp]# bunzip2 2.bz2#解压时如果源文件和压缩文件都在,则需要先删除源文件才能解压
bunzip2: Output file 2 already exists.
[root@localhost tmp]# bunzip2 2.bz2#解压
-rw-r--r-- 1 root root  0 2月  26 18:23 2
tar 打包
  • tar cvf x.tar x(tar打包先写目的,后写源,并且可以将多个目录打包为一个)tar xvf 包名(解包)
  • 先打包后解压,分两步,可以结合为一步:tar zcvf 1.tar.gz 1(cvf打包,前面加字母z就是gzip压缩,前面加j就是用bzip2压缩,tar jcvf 1.tar.bz2 1)
  • 解压并解包:tar xvf x.tar.gz(cvf打包,前面加字母z就是gzip压缩,前面加j就是用bzip2压缩
[root@localhost tmp]# tar cvf 1.tar 1#打包且不覆盖
-rw-r--r-- 1 root root     0 2月  26 18:23 1
-rw-r--r-- 1 root root 10240 2月  26 18:41 1.tar
[root@localhost tmp]# tar zcvf 2.tar.gz 2#打包并压缩,cvf前面加z则表示gzip压缩,前面加j表示bzip2压缩
-rw-r--r-- 1 root root     0 2月  26 18:23 2
-rw-r--r-- 1 root root   102 2月  26 18:42 2.tar.gz
文本处理
  • cat x(查看文本x),cat -A /etc/paswd(A显示换行符参数),cat -s x(缩行),cat -n /etc/passwd(显示行)
[root@localhost tmp]# cat f#查看文本
I LOVE YOU
But you don't know
I hope one day
you can see see me
I must good good study,day day up
[root@localhost tmp]# cat -A /tmp/f#-A参数
I LOVE YOU$
But you don't know$
[root@localhost tmp]# cat -n /tmp/f1 I LOVE YOU2 But you don't know3 I hope one day4 you can see see me
文本浏览
  • more /less/sort/du/cal/"|"/head/tail/grep/wc
  • /etc/passwd只能向下查看,按q退出
  • less /etc/passwd(既可以上,也可以下),查看时,按/root,就可以查找关键字root
  • sort /etc/passwd按照字母表进行排列显示内容,加-r反向排序,-u删除重复,sort -t: -n -k 3 /etc/passwd(-t指明分隔符,-n代表用数值,-k代表第几列,后面跟数值)
  • du x,看大小,-h显示大小单位,cat /ec/pass | sort -t: -n -k3将输出的内容作为输入
  • cal > cal.txt把打印的内容导出到某目录,cat cal.txt),cal 03 2020 > cal.txt覆盖之前的,Cal 04 2020 >> cal.txt附加内容
[root@localhost tmp]# cal 01 2012 > cal.txt#导入日历并打印
[root@localhost tmp]# cat cal.txt一月 2012
日 一 二 三 四 五 六1  2  3  4  5  6  7
[root@localhost tmp]# cal 02 2012 >> cal.txt#附加导入,不会覆盖之前的
[root@localhost tmp]# cat cal.txt二月 2012
日 一 二 三 四 五 六1  2  3  45  6  7  8  9 10 11一月 2012
日 一 二 三 四 五 六1  2  3  4  5  6  78  9 10 11 12 13 14
[root@localhost tmp]# cat > ask << "abc"#创建文件ask并且打印,输入abc结束
> dusuehfjhosi
> ifhiwehjdnlk
> jdhfabc
> abc
[root@localhost tmp]# ll
-rw-r--r-- 1 root root    34 2月  26 20:21 ask
  • “|”,管道符,将前面命令输出的内容作为后面命令输入的内容
[root@localhost tmp]# cat /tmp/f | sort
But you don't know
I believe
I hope one day
I LOVE YOU
I must good good study,day day up
Mabey you can marry with me
Then
  • Head -n 20 /etc/passwd | tail -n 5 | cat -n15到20行,先显示前20行,打印出来后再显示后五行,head -n 5 /etc/passwd > /tmp/aa显示并存入
  • grep查找关键字,与|用,netstat -tunlp |grep ssh(显示ssh的端口号)
    1. wc -l x统计行,wc-w x统计单词,wc -c 统计字符数
ps显示进程状态
  • -A所有进程,-u root显示指定用户进程,-ef显示所有命令
vi
  • vi x,x已经存在的话就是编辑x,不存在的话就是创建并编辑x
  • 三种模式:
    • 命令模式:做修改删除等操作,进入插入模式的操作:a光标跳到下一格,i光标位置不变,A当前行最后位置,o下一行加空白行,l当前行的最前面,O上面一行加空行,r替换当前位置字符,但不插入
    • 命令模式命令:cc删除当前行并插入,dd删除当前行(numdd,删除num行),x删除光标处的字符(xnum删除num个字符),yy复制当前行(yynum),p/P复制内容做粘贴(前下后上),u/U,撤销最近操作(前最近一次=ctrl+r,后最近一行),/或?keyword搜索关键字(前往下搜,后往上搜),G光标到最后一行(numG)
    • 插入模式:i,输新字符,esc/ctrl+[回到命令模式。
    • 扩展模式:命令模式下输入:进入扩展模式,命令有:w保存,w!强制保存,q!强制退出,wq(!)保存并退出
  • 命令模式高级命令
    • 命令执行后输出的信息,插入到正在编辑的文件中

      • ls 将执行结果插入到文件中的换行
      • 扩展模式!date 在文件的最后插入时间戳
    • 将文件中的数据当做命令的输入
      • !}sort 文件中的数据会做排列
      • !}fmt -w60将段落的宽度设置为60个字,超过60字高级命令
    • 扩展模式下高级的读和保存
      • :r file1 将file1里的内容直接读到到目前编辑的文件中
      • 20w file2 从第一行到第二十行的范围,w为写入,写到file2里
      • :1,$W file3从第- -行到最后一行的范围写入到ile3中
      • :1,20w>> file4 从第一行到第二十行的范围,附加到file4中
  • 使用vi同时打开多个文件
  • vi file1 file2 file3

    • :n 切换到下一个文件
    • :rew 切换到第一个文件上
    • n# 可以在两个文件中做切换
  • 设置vi
    • :set 看到少量设置值
    • :set all 看到所有可以设置的设置选项
    • 默认没有启用忽略大小写noignorecase、不显示行号nonumber
    • :set ignorecase 忽略大小写
    • :set noic或者noignorecase 区分大小写
    • :set number 显示行号
    • :set nonu或者:set nonumber 取消行号

3,网络服务

网络配置

常用的配置文件
  • systemctl restart/tstop/status network重启网络服务
  • Centos6网卡为ech0,7是ens33
  • /etc/sysconfig/network主机名等配置文件
  • /etc/sysconfig/network-scripts/ifcfg-ensN网卡N的配置文件,以上两个配置文件的网关不一致时,以此条优先
  • /etc/sysconfig/static-routes(=/etc/sysconfig/network-scripts/routes-ensN)静态路由条目的存储文件
  • /etc/resolv.confDNS解析配置文件
  • /etc/hosts本机域名解析文件
网络地址的配置
  • ifconfig的配置

    • 不带任何参数,查看所有网卡信息,等同Windows的ipconfig
    • ifconfig ens33查看网卡33的信息
    • ifconfig ens33 up/down启用或禁用网卡
    • ifconfig ens33 192.168.44.128 network 255.255.255.0,给网卡配地址:,临时配置,重启则失效,永久修改时重启网络服务有效,如下
[root@localhost tmp]# vi /etc/sysconfig/network-scripts/ifcfg-ens33#ifcfg-ens33网卡的路径



  • 网络服务:

    • systemctl ststus/stop/disables NetworkManager.services用户桌面式网络管理进行状态、停止、永久处理(shell中建议关闭)
    • systemctl ststus/stop/start/restart network.serevices 查看状态、停止、启用、重启
  • 新网卡的创建:
    • 在设置里面添加网络适配器
    • cd /etc/sysconfig/network-scripts
    • cp ifcfg-ens33 ifcfg-ens37复制并改名
    • vi ifcfg-ens37,修改网卡名为37,DEVE为37,ip地址,注释#UUID
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vi ifcfg-ens37
NAME="ens37"
#UUID="ca4a8b38-45fe-41b7-b8da-6cdba6ec1cb3"
DEVICE="ens37"
ONBOOT="yes"
IPADDR="192.168.252.145"
[root@localhost network-scripts]# ls | grep ens查看是否创建成功
ifcfg-ens33
ifcfg-ens37
[root@localhost ~]# nmcli con show#查看网络连接情况
NAME    UUID                                  TYPE      DEVICE
ens33   d233e0c0-1595-42f3-ade4-81f08dac860e  ethernet  ens33
virbr0  1bf3996d-4e30-460a-81be-41c61b9d27e5  bridge    virbr0
  • 重启网络服务,ls | grep ens查询关键字ens,就可以看各种网卡,一张网卡需要一致的mac地址有:/etc/udev/rules.d/70-persistent-net.rules=ifgonfig=ifcfg-ensN,在centos6里面只改最后的,删除前面的,
DHCP获取IP地址
  • 这里我用克隆机作为客户机,关于克隆机,克隆之后,如果原机的IP地址是动态获取到的,那么克隆机的ip地址就和原机不一样,如果原机的IP地址是静态获取的,那么克隆机 的IP地址就和原机的IP地址一样,所以得在/etc/sysconfig/network-scripts/ifcfg-ens33文件下进行修改IP地址,并且将一样的UUID注释或删掉,再重启就会自动生成UUID,mac地址会自动生成,在centos7版本里面,没有/etc/udev/rules.d/70-persistent-net.rules文件,但是在centos6里边有,只要删除就行了
  1. DHCP服务器(原机,即被克隆的虚拟机),这里用静态
  • 先查看dhcp有没有安装:[root@localhost ~]# rpm -qa dhcp
  • 没有安装时用yum安装DHCP服务:[root@localhost ~]# yum install dhcp -y,-y是默认yes
  • 安装好后会生成一个配置文件,该文件包括三部分:parameters参数(表明如何执行,是否要执行,或将那些配置参数发给客户)、declarations声明(描述网络布局,给客户提供地址等)、option选项(配置dhcp参数)
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
  • 在配置文件进行修改,标准的DHCP配置文件包含全局配置参数(ddns-update-style none;ignore client-updates;)、子网网段声明、地址配置选项、地址配置参数,在上面文件的下面做以下修改,并保存退出
ddns-update-style none;#定义了dns服务动态更新的类型,类型有none不支持动态更新、interim互动更新模式、ad-hoc特殊更新模式
ignore client-updates;#忽略/允许(allow)客户机更新dns记录
subnet 192.168.252.0 netmask 255.255.255.0{#分配到IP所在网段和子网掩码,要注意这里的大括号{range 192.168.252.10 192.168.252.100;#指定租用IP地址的范围(动态)
# 静态指定客户端的地址,这里没有成功,不知道为什么dhcp服务启动不了,所以暂时放着,要指定客户端IP地址的话。可以将范围缩小
#   host zhi{#               hardware ethernet 00:0c:29:cd:61:b1;
#               fixed-address 192.168.252.150;给客户指定地址
#          }
default-lease-time 86400;#默认租约时间
max-lease-time 518400;#最大租约时间
option routers 192.168.252.2;#网关地址
option domain-name-servers 114.114.114.114,8.8.8.8;#系统会修改/etc/resolv.conf文件,设置dns域名服务器
}
[root@localhost ~]# systemctl status dhcpd.service#查看dhcp运行状态,一般开机不会自动启动
● dhcpd.service - DHCPv4 Server DaemonLoaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)Active: active (running) since Sun 2020-03-01 12:56:49 CST; 4s ago
[root@localhost ~]# systemctl enable dhcpd#开启dhcp服务=service dhcpd start
  • 打开虚拟网络的编辑器选择VMnet8,使用桥接模式,取消本地的VMware dhcp服务的选择
  • 重启网络服务和dhcp服务systemctl restart network;systemctl restart dhcpd.service
  1. dhcp客户端(克隆机)
[root@localhost ~]#dhclient -r#释放原有IP地址
[root@localhost ~]#dhclient#dhcp获取IP地址
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"#这里选择dhcp
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.252.10  netmask 255.255.255.0  broadcast 192.168.252.25#动态获取的IP地址
网络状态的监控
  • netstat 显示网络状态信息,

    • netstat -tunlp显示系统开启的端口号
    • netstat -ap | grep ssh找出程序运行的端口
    • t指的是显示tcp协议的连线状况,-u显示udp的,-n指直接使用IP地址,而不用域名服务器,-l侦听,-p应用服务的状态信息,(-r路由表,-s侠士所有端口信息,-i显示网络接口列表)
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# netstat -tunlp | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      6932/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      6932/sshd           
  • 其他命令

    • ping,traceroute(隐藏路径)
    • DNS作用:nslookup、dig、host
  • 状态说明
    • LISTEN:侦听来自远方的TCP端口的连接请求
    • SYN-SENT:在发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
    • SYN-RECEIVED: 再收到和发送一 个连接请求后等待对1方对连接请求的确认(如有大量此状态,估计被flood攻击了)
    • ESTABLISHED:代表-个打开的连接
    • FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
    • FIN-WAIT-2:从远程TCP等待连接中断请求
    • CLOSE-WAIT:等待从本地用户发来的连接中断请求CLOSING:等待远程TCP对连接中断的确认
    • LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
    • TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认
    • CLOSED:没有任何连接状态
  • (DUP!)这个东西是DUPLICATE的一个缩写,也就是ping包的时候收到多个重复值回应,通常发生在linux环境下比较多,windows环境对ping的reply只接收第一个,后续的重复回应会被废弃。
    发生这种情况通常是主宿机的IP冲突,或者网关有重复的路由设置,也或者路由器堵塞比较厉害,也可能还有其他原因。解决:禁用网卡VMnet8
运行级别—runlevel
  • init 0:关机
  • init 1:单用户模式,用于系统恢复,一般只有root登录
  • init 2:不完全命令模式,不含NFS服务,即没有网络服务
  • init 3:完全的命令行模式,字符界面,shell,多用户,有网络,默认进入文本模式
  • init 4:系统保留,和3差不多
  • init 5:图形模式,多用户带网络
  • init 6:重启
[root@localhost ~]# runlevel//默认为5
N 5
[root@localhost ~]# systemctl set-default multi-user.target //重启情况下将默认运行等级换为3
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@localhost ~]# systemctl get-default //查看默认运行等级为3
multi-user.target
  • systemctl isolate multi-user.target / init 3在不重启情况下将运行等级换3
  • 进入init 0/6时进入别的运行级别用:init N
  • 在文件/etc/inittab中查看对应运行级别
服务管理
  • systemctl 管理服务的命令
  • systemctl status/stop/startrestart srv_ name管理服务srv_ name的启停(临时)
  • systemctl enable/disable srv_ name管理服务srv_ name默认的启停(重启永久生效)
    • eg: systemctl stop firewalld. service临时停止防火墙服务
    • 也可以使用/etc/r.Iinit.d/gpm status方式管理,但是不推荐
  • ntsysv 显示图形界面控制服务的启停
  • 虚拟机克隆

软件操作

软件安装形式
  • 源码:大多数开源软件是以源代码形式发送的,源代码一般会被打包压缩成tar.gz的归档文件,缺点源代码编译成二进制才能运行,优点是兼容性可控制性好
  • RPM:redhat package manager,软件管理工具,通过源代码基于特定平台系统优点编译为可执行文件,简化开源软件的安装管理,缺点是对特定软件有依赖关系
  • YUM:针对RPM的依赖性和源码的编译二进制,YUM可以解决,(debain,ubuntu发行版本采用apt-get包管理工具),YUM(yellowdog updater mo diffiedd),用于自动升级,安装/移除RPM软件包,可以自动查找并解决rpm包之间的依赖关系,无需手工安装
源码
  • 安装流程:

    • ./configure进行软件配置,开启功能、调整安装目录、工作目录
    • make 进行编译,make根据当前软件的语言,自动识别相应的编译器,进行二进制编译
    • make install 进行软件安装(设置自启动,移动执行文件)
    • 实例:安装vmware tools
      • 虚拟机选择安装vmware tools
      • 将/medis/VMware Tool路径下的VMware Tools-x.x.tar.gz复制到其他你要保存的路径并解压
      • 根据vmware tools-distrib下的doc中的install进行安装
      • 安装./vmware-install.pl -d,这里加-d是选择后面选项都默认

RPM
  • RPM软件命名规范

    • name-version-relase.arch.rpm(名字-版本号:主次修正-发布版本号-适用平台.rpm),其中release表示发行版本,如fc18表示fedora 18下使用的,arch表示硬件平台,常见的有i386、x86_64等
  • RPM五大功能
    • 安装:rpm -ivh name-version-release.arch.rpm,保留旧版本,安装新版本(升级内核),其中,i表示Install,v表示verbose,显示安装的详细信息,h表示hash,显示安装进度,注意一定是.rpm结尾
    • 卸载:rpm -e name,要注意软件包的依赖关系,也可以强制卸载,不推荐,如:rpm -e -nodeps httpd
    • 更新或升级:删除旧版本,安装新版本,rpm -Fvh name-version-release.arch.rpm,vh前面加F时用于更新现有系统,加U时用于升级应用程序
    • 验证:使用非对称加密算法验证软甲是否被修改,需要一个密钥,rpm -V name;验证rpm是否完整:rpm -K name-version-release.arch.rpm
    • 查询:
      • rpm -q name查询是否安装了name
      • rpm -qi name查询以安装软件的详细信息
      • rpm -ql name查询name软件包含的文件列表
      • rpm -qf file查询文件属于那个rpm安装包存在的
      • rpm -qa 查询所有已安装的rpm软件
      • rpm -qpi name-version-release.arch.rpm查询rpm的文件信息
      • rpm -qpl name-version-release.arch.rpm查询rpm包含的文件
[root@localhost ~]# rpm -q yum
yum-3.4.3-163.el7.centos.noarch
[root@localhost ~]# rpm -ql yum
/etc/logrotate.d/yum
/etc/yum
/etc/yum.conf
/etc/yum.repos.d
[root@localhost ~]# rpm -qi yum
Name        : yum
Version     : 3.4.3
Release     : 163.el7.centos
YUM
  • 介绍:提供软件仓库的软件,本身也软件,所以也要用rpm安装,提供软件仓库的服务器称为源服务器,可以基于HTTP、FTP或本地文件目录提供服务,并且搜集目录中所有rpm软件包的header信息组成的repodata,以供yum客户端工具查询分析。
  • 分类:本地yum(将rpm软件包放在本地主机上)、网络yum(将服务器上的文件通过http/ftp的方式下载到本地,在进行安装)
  • yum客户端配置:在/etc/yum.repos.d目录下新建yum仓库配置文件(.repo文件),在此添加一个配置信息(一个配置文件下可以保存多个仓库配置信息),格式:
[repo-name]
name=This is repository's description
baseurl=1#规定了仓库所在位置,可以是本地地址,也可以是网络地址
enabled=1
gpgcheck=1
  • yum命令

    • 安装/删除升级软件:yum install/remove/update package-name
    • 基于关键字搜索软件:yum search 关键字
    • 列出所有软件包:yum list all
    • 列出系统中以安装的软件包:yum list installed
    • 显示软件包信息:yum info packagename
    • 查询目标文件包含在哪个软件包:yum whatprivides filename
    • 查询程序package依赖情况:yum deplist package
[root@localhost ~]# yum search whois
......
whois.x86_64 : Improved WHOIS client
名称和简介匹配 only,使用“search all”试试。
  • yum缓存:会把下载的软件包和header存储在cache(/var/cache/yum)中,而不会自动删除

    • 清除header:yum clean headers
    • 清除下载的rpm包:yum clean packages
    • 清除所有:yum clean all
  • 下载yum以及安装,红帽使用centos镜像源:(下面以centos7为例)
    • 删除RHEL原有yum:rpm -aq | grep yum | xargs rpm -e --nodeps
    • 导入key: wget http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7。 rpm --import RPM-GPG-KEY-CentOS-7(进行验证下载的是否正确完整)
    • 下载yum包(使用CentOS源),使用rpm安装,最后两个需要同时安装
      • wget http://mirror.centos.org/centos-7/7/os/x86_64/Packages/python-iniparse-0.4-9.el7.noarch.rpm
      • wget http://mirror.centos.org/centos-7/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
      • wget http://mirror.centos.org/centos-7/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm
      • wget http://mirror.centos.org/centos-7/7/os/x86_64/Packages/yum-3.4.3-163.el7.centos.noarch.rpm
    • 通过rpm安装yum.
      • rpm -ivh python-iniparse-0.4-9.el7.noarch.rpm
      • rpm -ivh yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
      • rpm -ivh yum-plugin-fastestmirror-1.1.31-52.el7.noarch.rpm yum-3.4.3-163.el7.centos.noarch.rpm --nodeps(–nodeps是解除依赖)
    • 配置yum源(使用网易的CentOS镜像源)
      • wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
      • cp CentOS7-Base-163.repo /etc/yum.repos.d
      • vi /etc/yum.repos.d/CentOS7-Base-163.repo
      • 替换:将releasever全部替换为版本号7,vi中”:releasever全部替换为版本号7,vi中”: % s/releasever全部替换为版本号7,vi中”:releasever/7/g收费替换为免费的(输入冒号,再输入 % s/$releasever/7/g,这里%s是替换命令,g是全局,即全部替换)
      • 缓存:yum clean all(清理); yum makecache(缓存到本地)

4,远程和用户管理

远程接入
shell&文件传输
  • CRT上传或下载文件:sftp服务(ssh+ftp),用命令操作windows下的目录,命令前加“l”,例如:lls=ls,lpwd=pwd,lcd=cd

    • 上传文件:put filename;rz+路径
    • 下载文件:get filename;sz+linux中的文件名
VNC—图形界面远程
  • ssh默认开启,服务端为tigervnc-server,客户端为tigervnc
  • VNC的安装:关闭防火墙和seLinux
    • yum install tigervnc-server -y,安装服务器vnc,也可以安装客户端vnc,-y参数是后面选项均默认yes
    • yum install xinetd telnet telnet-server -y安装telnet
    • vncserver开启vnc服务
    • netstat -tunlp | grep vnc查看端口
  • 登录时在地址后面加vnc端口号最后一位,如5902写2,一般为5901-5910
  • 查看vnc:ps -aux | grep vnc
[root@localhost ~]# netstat -tunlp | grep vnc
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      24895/Xvnc
tcp6       0      0 :::5901                 :::*                    LISTEN      24895/Xvnc
winscp,linux与windows的互传工具
用户管理
账号分类
  • 用户账号:用户和UID存放位置为/etc/passwd,密码存放位置为/etc/shadow中

    • 超级用户:用户名通常为root,UID为0
    • 程序用户:UID默认为1-999
    • 普通用户:UID默认1000-65535
  • 组账号:GID和组名存放在/etc/group中,密码存放在/etc/gshadow中
    • 超级用户组:GID为0
    • 系统组:GID为1-999
    • 用户自定义组:GID为1000-65535
文件内容:
  • /etc/passwd下:root—username用户名:x—password密码占位:0—uid16位:0—gid:root—comment记录用户全名和其他注释信息:/root—homedir家目录路径(只有root的家目录在/root下,其他普通用户在/home下):/bin/bash—shell用户登录的第一执行环境(/bin/bash代表该用户可以登录,/sbin/nologin代表该用户不能登录)
  • 在==/etc/group==下:root—组名:x—组密码:0—组标识、组成员:(共四栏)。
  • 在==/etc/shadow/==中,hly–用户名:password—$6$开头表示用户设置密码,前面加!表示禁用用户,仅有*/!!表示该用户不能登录:last-change—最后一次修改日期的天数,从1970.1.1开始计算:min_days—密码修改最小天数:max_days:warning—密码过期警告天数:lock_days—过期后锁定天数:expires—密码过期天数:reserved field—保留的字段。
  • 在==/etc/gshadow==下,组名:组密码:组管理员:组成员
[root@localhost ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# head -5 /etc/group
root:x:0:
bin:x:1:
[root@localhost ~]# tail -1 /etc/shadow
hly:$6$EQxsgi4K8FEf2TiU$oilhnhIeMeXjt9pqMHe4ZXTdup/SjYVDAx2bbKbIqcv1us6KvN9lcXdIfYDh/2GV2iPzV8XdRbFIpzQx7wCwN1:18312:0:99999:7:::
[root@localhost ~]# head -3 /etc/gshadow
root:::
bin:::
用户管理
  • 查看使用者

    • 目前登录者:whoami
    • 哪些登录到系统:users(只显示账户名)、who(登陆时间用户名地点)、w(包括使用的系统资源)
    • 目前账号属于那个群组:groups username;id username
    • 使用者的登陆时间和重启时间历史记录:last
[hly@localhost root]$ whoami
hly
[hly@localhost root]$ groups hly
hly : hly wheel
[hly@localhost root]$ id hly
uid=1000(hly) gid=1000(hly) 组=1000(hly),10(wheel)
[yan1@localhost hly]$ last
hly      :0           :0               Thu Feb 20 13:35 - crash (3+01:03)
  • 添加用户:useradd username,系统指定uid

    • useradd -u uid username指定添加uid
    • -g gid/grpname指定添加用户的组名,而且gid必须已存在
    • -G gid/grpname指定将用户添加到其他组gid,为附加组,而且同样gid必须存在
    • -d path指定添加用户的家目录
    • -s shell指定添加用户登陆后要执行的程序(/etc/shells下存储那些可用shell)
    • -n 添加用户时不建立私有组(UPG),会使用user组,且gid为100
    • -r 创建一个系统账号,不自动创建家目录,加上参数-m会自动创建,也可以手动创建家目录,并将/etc/skel目录下的文件复制到家目录下
    • -M 创建普通用户,不自动创建家目录
[root@localhost hly]# useradd -u 1101 yan1
[root@localhost hly]# su yan1
[yan1@localhost hly]$ id yan1
uid=1101(yan1) gid=1101(yan1) 组=1101(yan1)
[root@localhost hly]# useradd -rm yan2#加-rm自动创建家目录
[root@localhost hly]# su yan2
[yan2@localhost hly]$ head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost hly]# useradd -r yan3#创建系统用户
[root@localhost hly]# su yan3
bash-4.2$
[root@localhost ~]#useradd -G 1101 yan4#将yan4用户加到1101附加组,但是也会生成和自己uid一样的组1102
[root@localhost ~]# id yan4
uid=1102(yan4) gid=1102(yan4) 组=1102(yan4),1101(yan1)
yan4:x:1102:1102::/home/yan4:/bin/bash
  • 批量处理用户

    • newusers user_file根据user_file文件来建立账号,只创建家目录而不会复制/etc/skel下的文件
  • 修改用户:usermod
    • usermod -l new_name old_name修改用户名,所修改的用户必须已退出
    • -L 锁定用户,在/etc/shadow密码前加!实现
    • -U,解锁用户
    • -G将用户加入组,useradd -G 组名 用户名
  • 删除用户:userdel [] username
    • 不带参数只能删除passwd、group、shasow、gshadow中的信息
    • -r 除了以上信息,还会删除家目录(/home/username),邮箱(/var/spool/mai/username)
  • 切换用户:su [] [user] [-c command]
    • 不带任何参数,可以直接换用户,普通用户换到root用户需要密码,通过Root直接登录到hly,继承了hly的环境变量
    • 只加“-”,不仅切换用户,还会切换环境变量,即用自己的环境变量,用echo $PATH验证
    • su -c ‘mkdir m1’ hly可以指定用某用户来执行命令,可以是普通用户获取root用户的权限来执行
[root@localhost ~]# vi yan1.txt#批量创建多用户,不能留有空行
hly1:x:2000:2000::/home/hly1:/bin/bash
hly2:x:2001:2002::/home/hly2:/bin/bash
[root@localhost ~]# newusers yan1.txt#批量用户导入
[root@localhost ~]# cat !$
cat yan1.txt
hly1:x:2000:2000::/home/hly1:/bin/bash
hly2:x:2001:2001::/home/hly2:/bin/bash
[root@localhost ~]# vi passwd#创建密码文本
hly1:123456
hly2:123456
[root@localhost ~]# chpasswd < passwd#导入密码
[root@localhost ~]# cp -r /etc/skel/. /home/hly1#批量创建用户,出现家目录缺少文件
[root@localhost ~]# cp -r /etc/skel/. /home/hly2
[root@localhost ~]# cd /home
[root@localhost home]# ll
总用量 2
drwx------   3 hly1 hly1   78 2月  28 21:44 hly1
drwx------   3 hly2 hly3   78 2月  28 21:44 hly2
[root@localhost home]# usermod -l y7 yan7#修改用户名,这里显示无法修改,进程被使用
usermod: user yan7 is currently used by process 30933
[root@localhost home]# ps -aux#查看用户登录后台进程,发现yan7在使用,输入exit退出登录
yan7      30933  0.0  0.1 116740  3244 pts/0    S    20:26   0:00 bash
[yan7@localhost root]$ exit
exit
[root@localhost ~]# usermod -l y7 yan7#这里修改成功
drwx------   5 y7   yan1  144 2月  28 22:27 yan7
[root@localhost home]# usermod -G hly2 hly3#把hly3加到hly2组中和上面附加组一样
[root@localhost home]# id hly3
uid=2002(hly3) gid=2002(hly3) 组=2002(hly3),2001(hly2)
组管理
  • 添加组:groupadd [ ] groupname

    • -g gid指定要添加的组
    • -r指定要添加的组为系统组(gid为1-999)
  • 修改组:groupmod [ ]
    • -n new_groupname old_groupname更改组名,也可以是先old_groupname new_groupname(区别用户修改用户名时先写新用户名,后写之前的用户名)
    • -g gid groupname修改组的gid
  • 删除组:groupdel groupname,这里不能直接删除用户自己产生的组
密码管理
  • 用户密码:passwd [ ] username

    • 不带任何参数,用于修改当前用户的密码,普通用户只能修改自己的
    • echo “passwd” | passwd --stdin username修改密码
    • -S username 显示用户的密码状态
    • -l/-u username 锁定解锁用户,再shadow中的密码前会加/减上!!,
    • -L/U username锁定解锁用户,只会出现一个!,解锁密码为空的用户需要加参数-f
    • -d username 删除用户密码,免密登录,创建用户时必须设定密码才能登录,未设定和免密不一样
    • chpasswd,同上面批量添加用户
  • 组密码:gpasswd [ ] groupname
    • 不带参数,修改组密码
    • -r groupname,删除组密码
    • -R groupname ,锁定组密码,将gshadow处加!
  • 密码有效期管理:chage [ ] username
    • -l 查看,用户的有效期
    • -d date/n 设置密码最后一次修改时间,为0时登录组要修改密码
    • -m n设置修改密码最小天数,n天内不允许修改密码,0为用不限制
    • -M n设置修改密码最大天数,n天内必须修改密码,99999为永不限制
    • -l n设置密码过期后锁定账号的天数
    • -E n设置密码过期时间,同时配合上一条命令使用,更改/etc/shadow文件,为0则立即过期,为空或-1为永不过期
[root@localhost ~]# passwd -l hly
Locking password for user hly.
passwd: Success
[root@localhost ~]# cat /etc/shadow#锁定用户hly,会发现密码处多了两个!
hly:!!$6$rOMzMIlKEeRFJQpT$1eb2Fm4KNeRi/c4uO8fpDbuAMkYDeJ/7FN3Vv.TzZ
组员管理
  • 临时加组员:newgroup

    • newgroup groupname将当前登录者临时加到groupname。当当前用户是groupname的组员时,不需要密码,如果不是groupname组员,则需要密码,所以需要设置组密码
    • 组员管理:gpasswd [ ]
      • -A [user1,user2,…] groupname指定用户user1 user2加到groupname组的管理员,若用户部分为空,则删除所有管理员,/etc/gshadow/下面存储
      • -a/d user groupname 设置user为groupname的组成员,(区别于usermod -G 组名 用户名) ,存储在/etc/gshadow和/etc/group里面
yan1:x:1001:yan3
[hly@localhost home]$ newgrp yan1#hly不是yan1的组员,所以要密码
Password:
Invalid password.

5,权限设置&文件管理

文件权限控制

基本权限
  • 权限分类:r表示可读权限,数字表示为4,可以读取或者显示文件内容的权限;w表示可写权限,数字表示为2,可以进行编辑创建删除等;x表示可执行权限,数字表示为1,可以执行文件或者切换目录;-表示无权限,数字表示为0
  • 权限对象:拥有者权限(u)、拥有者所在组的其他成员权限(g)、既不是拥有者也不是组成员权限(o)
  • ls -l 查看时,文件的第一栏有十位的字符串,分别代表:第一个字符为-代表是文件,d代表目录;第234个字符代表拥有者的读写执行权限;第567个字符代表拥有者所属组的读写执行权限;第8910个字符代表非拥有者非组员的读写执行权限
基本权限设置
  • 修改权限:chmod

    • chmod [-R] (u/g/o)+/-/= (r/w/x) filename,给filename加或减相应权限,-R参数是进行递归操作
    • chmod [-R] num filename
[root@localhost m1]# ll
总用量 0
-rw-r--r-- 1 root root 0 3月   3 21:29 f3#可以看到f3文件的相应权限
[root@localhost tmp]# chmod -R g+w m1/f3#给m1目录下的f3的g添加写权限
[root@localhost tmp]# cd m1
[root@localhost m1]# ll
总用量 0
-rw-rw-r-- 1 root root 0 3月   3 21:29 f3#f3的写权限设定成功
drwxr-xr-x 2 root root  6 3月   3 21:29 m2#m2的权限可见[root@localhost tmp]# chmod g-x m2#对m2目录的g进行减去执行权限
drwxr--r-x 2 root root  6 3月   3 21:29 m2
-rw-r--r-- 1 root root  0 3月   3 21:29 f1#可以看到f1o的权限只有r,即读[root@localhost tmp]# chmod o=w f1#让f1o的权限只有w,即写
-rw-r---w- 1 root root  0 3月   3 21:29 f1#可以看到f1中o的权限变为w
-rw-r--r-- 1 root root  0 3月   3 21:29 f2#可见f2的权限值为644
[root@localhost tmp]# chmod 755 f2#7代表u的rwx,4+2+1。5代表g的r-x,o同理
[root@localhost tmp]# ll
总用量 0
-rwxr-xr-x 1 root root  0 3月   3 21:29 f2#权限值变为755
  • 修改拥有者:chown

    • chown [-R] user:usergroup file设置文件的或者同时设置拥有者和组
    • chown user file修改文件的拥有者
    • chown :usergroup file 修改文件组
drwx------ 15 hly  hly  294 3月   4 13:30 hly
drwx------  3 hly1 hly1  78 3月   4 13:25 hly1
[root@localhost home]# chown hly1:hly1 hly#修改hly的拥有者和组名
[root@localhost home]# ll
总用量 0
drwx------ 15 hly1 hly1 294 3月   4 13:30 hly#拥有者和组名由hly变为hly1
drwx------  3 hly1 hly1  78 3月   4 13:25 hly1[root@localhost home]# ll
总用量 0
drwx------ 15 hly  hly  284 3月   3 21:28 hly
drwx------  3 hly1 hly1  78 3月   4 13:25 hly1
[root@localhost home]# chown hly hly1#修改hly1的拥有者为hly
drwx------ 15 hly hly  294 3月   4 13:30 hly
drwx------  3 hly hly1  78 3月   4 13:25 hly1#hly1变为hly
  • 修改文件:chgrp

    • chgrp [-R] group file,修改文件的组
-rw-r--r--  1 root root   0 3月   4 14:11 f2
drwx------ 15 hly  hly  294 3月   4 13:30 hly
[root@localhost home]# chgrp hly f2#将f2的root组改为hly组
-rw-r--r--  1 root hly    0 3月   4 14:11 f2
  • 权限总结

    • 关于目录:

      • 超级用户:无论是否有读写权限,都可以进入目录查看,并且增删改操作,包括拥有者是其他用户
      • 普通用户:需要拥有相应权限才可以进入目录进行查看或增删改
    • 关于文件
      • 超级用户:无论是否有权限都可以查看文件,但是编辑或执行需要写权限和执行权限,如果没有写权限也可以用wq!保存退出进行编辑
      • 普通用户:需要有相应的权限才可以对文件进行读写编辑创建等权限
umask权限掩码
  • umask可以轻松决定使用者在建立新文件或目录最后的权限
  • 预设权限:文件666(rw-rw-rw-)目录777(rwxrwxrwx)
  • 默认umask:root默认umask为022,普通用户的为002
  • 最终权限的产生:用户的umask遮罩某些权限得最终权限,其实类似于做减法,相同为0,0减去任何为0
    • 例:创建umask为033的文件和目录最终权限

      • 文件:666-033,即(rw-rw-rw-)-(----wx-wx)=rw-r–r--,即644,注意-减x为-
      • 目录:777-033,即(rwxrwxrwx)-(----wx-wx)=rwxr–r--,即74
特殊权限
  • 特殊权限用字母表示:suid—s,u的最后x权限用s表示;sgid—s,g的x权限用s表示;sticky—t,o的x权限用t表示
  • 特殊权限用数字表示:suid为4,sgid为2,sticky为1,放在其他权限前面表示
  • 显示规则,相应的特殊权限中的x用相应的s或t替换,表示我有特殊权限和x权限,如果 原来的权限中x是-,则用S/T表示,表示我具有特殊权限但是没有x权限
  • 设置特殊权限:chmod
    • chmod u+s/g+s/o+t file,给相应对象的x权限进行修改
    • chmod 2755 file.即g+s
    • chmod 7755 file ,即 u+s、g+s、o+t
-rw-r--r--  1 root hly    0 3月   4 14:11 f2#f2的u没有x权限
[root@localhost home]# chmod u+s f2#修改f2权限为特殊权限
[root@localhost home]# ll
总用量 0
-rwSr--r--  1 root hly    0 3月   4 14:11 f2#可以看到u权限的x变为S,由于之前就没有x权限,所以这里用大写表示
  • 对文件作用:suid,使用者在执行这个带有suid的特殊权限的文件时,是以文件拥有者的身份执行,而不是本身,目录设置此权限无效,如/usr/bin/passwd文件拥有suid权限,那么普通用户在执行时会以root的权限来修改内容
  • 对目录作用:
    • sgid,设有sgid的目录,在此目录下创建的目录或文件都会继承父目录的组权限,如root用户创建的group目录,并更改权限为2757,普通用户在该目录下创建文件后,该文件属于root组。作用就是当有多个用户需要共享一个目录时,该组的用户都可以处理
    • sticky,设有sticky权限的目录,只有文件的拥有者才可以删除文件,而不是看w权限来决定,在文件上设置此权限无效,如/tmp目录带有sticky权限,只有Root和文件拥有者才可以删除文件,作用就是tmp相当于共内容,所有用户可以对这个目录进行操作,但是不能破坏
    • find / -perm -0007 -type d找出危险目录
[root@localhost home]# ll /usr/bin/passwd#passwd有s特殊权限
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[hly@localhost home]$ passwd#普通用户可以更改
更改用户 hly 的密码 。
为 hly 更改 STRESS 密码。
(当前)UNIX 密码:
[root@localhost home]# chmod u-s /usr/bin/passwd#给u去掉s权限
[root@localhost home]# ll /usr/bin/passwd
-rwxr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd
[hly1@localhost ~]$ passwd#普通用户修改密码失败
更改用户 hly1 的密码 。
为 hly1 更改 STRESS 密码。
(当前)UNIX 密码:
passwd: 鉴定令牌操作错误
[root@localhost home]# chmod 7755 m2#特殊权限对目录的作用,给m2
[root@localhost home]# ll
drwsr-sr-t  2 root root   6 3月   4 17:17 m2
[root@localhost home]# cd m2
[root@localhost m2]# touch f3
[root@localhost m2]# mkdir m3
-rw-r--r-- 1 root root 0 3月   4 17:17 f3
drwxr-sr-x 2 root root 6 3月   4 17:17 m3
ACL权限----setfacl
  • 给用户设定acl权限:setfacl -m u:用户名:权限(rwx)(+ -R递归) +指定文件名
  • 给用户组设定acl权限:setfacl -m g:用户名:权限(rwx)(+ -R递归) +指定文件名
  • 查看文件的acl权限:getfacl 文件名,(这里设定的acl权限是与mask的权限相与得到的真正权限,而mask默认权限为rwx)
  • 设定默认权限:setfacl -m m:权限 文件名
  • 删除acl权限
    • 删除用户的acl权限:setfacl -x u:用户名 文件名
    • 删除用户组acl权限:setfacl -x g:用户组名 文件名
    • 删除文件的所有acl权限:setfacl -b 文件名
  • 默认acl权限:setfacl -m d:u/g:用户(组)名:权限 文件名,父目录设定的acl权限会被新建的子目录继承
-rw-r--r-- 1 root root 0 3月   8 17:59 a
[root@localhost tmp]# setfacl -m u:yan:x a#给用户yan添加对文件a的acl权限
-rw-r-xr--+ 1 root root 0 3月   8 17:59 a#可以看到多了一个+,表示acl权限
[root@localhost tmp]# setfacl a#查看文件a的acl权限
# file: a
# owner: root
# group: root
user::rw-
user:yan:--x#yan对a的x权限
group::r--
mask::r-x
other::r--
[root@localhost tmp]# setfacl -m d:u:yan:wx c#给目录c设定默认acl权限
[root@localhost tmp]# getfacl c
# file: c
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x
default:user::rwx
default:user:yan:-wx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@localhost tmp]# cd c
[root@localhost c]# touch cc#在目录c下边创建文件cc
[root@localhost c]# getfacl cc#可见cc继承了c的acl权限
# file: cc
# owner: root
# group: root
user::rw-
user:yan:-wx                    #effective:-w-
group::r-x                      #effective:r--
mask::rw-
other::r--
sudo
  • 此命令可以让普通用户来执行只有root才可以执行的命令,使用root的uid和gid来执行命令
  • 定义文件是/etc/sudoers,里边记录了sudo用户的权限信息,即分组信息,用命令visudo才可以编辑sudoers文件,为了防止多用户同时修改此文件,默认visudoers不会保存错误的配置文件
    • sudo -l ,查看用户的可执行和不可执行 的命令
    • sudo -k,清除此前缓存的用户成功认证的时间戳,默认缓存时间为5分钟
    • visudo ,进入sudoers文件中,修改以下内容,也可以在%wheel的方式来指定系统中存在的组,而不是单个用户,例:%hly ALL= /bin/more /etc/shadow,组hly里边的用户可以查看shadow内容。
[hly@localhost ~]$ sudo passwd root#hly用root权限来修改密码
更改用户 root 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
hly     ALL=(ALL)       ALL#添加hly用户的权限为所有,第一列ALL为用户,第二列ALL为主机,第三列ALL为身份 ,第四列ALL为执行什么,即在什么主机上以什么身份执行什么命令

磁盘基础

机械磁盘

  • 结构:主轴、磁头驱动结构、盘片、读取头、磁头组件、控制电路、接口
  • 术语:磁区/扇区、磁轨、磁柱

磁盘介绍

  • Cylinder柱面数表示盘面上有几条磁道,编号从0开始,最大为1023
  • Head磁头表示磁盘有几个磁头,即盘面,编号从0开始,最大为255
  • Sector/Track扇区数表示每个磁道上的扇区数,编号从1 开始,最大63,每个扇区512字节,磁盘最小存储单位
  • 扇区组成磁道,磁道组成磁柱
  • 1024柱面 * 63扇区 * 256磁头*512字节=8.4G
硬件参数
  • 硬盘容量:容量单位为MB/GB
  • 转速(Rotational Speed):磁盘盘片每分钟转过的圈数,单位为EPM,普通转速为5400/7200
  • 缓存(cache):由于CPU和硬盘之间存在速度差距,为了减少cpu等待时间,加入cache,提供交换数据的速度,提高了cpu的处理时间
常用接口
  • ATA(Advanced Technology Attachment):高级技术附加装置,又称IDE,已过时

    • 特点:价格低,兼容好,但速度慢,内置使用,抗干扰性差,不利于散热,被SATA取代
  • SCSI(Small Computer System Interface):小型计算机系统接口,SCSI硬盘并发处理优异,常用于企业
    • 特点:适用广,占用cpu资源低,速度快,支持热插拔,性能高,但是价格高,安装复杂
  • SATA(Serial ATA):串行ATA,采用串行进行数据传输,接口速率比IDE接口高,最低为150MB(1.0),300MB(2.0),最新达600。采用点对点连接,支持热插拔,即插即用
    • 特点:7+15针,采用单通道,传输速率高 ,抗干扰性好
  • SAS(Serial Attached SCSI):串行链接SCSI,点对点,全双工,双端口的接口
    • 主要用作商业或者数据中心,高性能,向下兼容SATA,可以进行两路传输,即同时传输两个600MB,抗干扰能力好,实现高可用性及低成本,扩展性能好
存储介质
  • 机械硬盘:主轴磁头驱动器寻道时间久,有机械延迟
  • 固态硬盘(SSD/FD):没有机械运动部件,有芯片,电子存储,快,响应时间短,读写效率高但是寿命短,多通道并发,性能高低功耗。
磁盘分区
MBR
  • MBR:主引导记录,相当于小镜像,位于硬盘第一个物理扇区,包含硬盘的主引导程序和硬盘分区表,分区表有4个记录区共64字节,每个分区16字节,所以一个磁盘只能最多分4个分区,通常使用3p(主分区)+1e(扩展分区)的结构

    • 主分区
    • 扩展分区 >>>>逻辑分区
    • Linux必须分区:根分区(/),swap分区(交换分区,内存的两倍),启动分区(/boot,200M)
文件系统:
  • 将文件存储在硬盘时所必须的数据结构及硬件数据的管理方式
  • 存储结构:目录项,inode(储存文件元信息,包含文件字节数、文件拥有者、组id、读写执行权限、文件时间戳、链接数、文件数据block位置,查看命令为ls -li),数据区
  • Linux文件系统:/ (/dev/sda3)>>>/boot(/dev/sda1)&/etc(passwd,shadow,group)&/home(/dev/sda2)
磁盘管理
添加硬盘:
  • 先在编辑虚拟机里面添加,再用命令echo “- - -” > /sys/class/scsi_host/hostn/scan 扫描磁盘磁盘信息,其中 n代表数字0-4扫描,粘贴命令注意英文的引号

  • 磁盘配置:fdisk

    • 查看磁盘信息:fdisk -l(查看磁盘已格式化为文件系统);fdisk -h(查看已挂载磁盘信息);lsblk
  • 分区:

    • fdisk -c /dev/sdn
  • 磁盘配置及分区(fdisk用于MBR,小于2T,parted使用GPT,大于2小于18)

  • 挂载磁盘

    • 临时挂载:mount

      • mount /dev/sdb1 /tmp/yb 将设备sdb1挂载到yb上
    • 永久挂载:vi /etc/fstab,需要重启
  • 卸载磁盘:unmount,可以卸载磁盘(unmount /dev/sdb1),也可以卸载挂载目录(unmount /tmp/yb)

GPT磁盘管理—超大容量
创建SWAP分区
  • 不能是已经格式化的
  • 创建交换分区:mkswap /dev/sdb5
  • 开启交换分区:swapon /dev/sdb5
  • 关闭交换分区:swapoff /dev/sdb5
  • df查看磁盘情况
    • df -i /dev/sdb5,显示inode
    • df -h /dev/sdb5,
    • df -T /dev/sdb5

运维

进程
概述
  • 进程:程序执行的过程,需要占用系统资源,包括CPU、内存等,
  • ls/du proc,特殊文件系统,每个目录对应一个进程,显示的是进程信息,所以本身不占内存,
    • cat cpuinfo,查看当前服务器所使用的CPU
    • cat meminfo,内存使用情况和信息
  • ps
    • ps -aux,了解进程的pid,占用内存、cpu的使用情况
    • ps -l,查看shell登录和脚本,会发现bash的pid与ps的ppid一样,则表明父子进程,所以ps是在bash下产生的
  • top
    • 交换分区、内存、cpu使用情况,任务详情,(buff可以快速访问,就是将经常访问的进场存在内存里,不释放,,cache就是用完进程会在内存释放掉,在访问就去磁盘获取,麻烦)
  • sar,系统维护的工具,帮助掌握系统资源的使用情况,尤其是内存,sar [ ] n m
    • sar -r n m,看内存使用情况,间隔n秒共采集m次,还会显示平均值
    • sar -u n m,看cpu使用情况,间隔n秒共采集m次,还会显示平均值
  • free,查看内存
    • free -m ,查看内存,并且单位为m,默认为kb
进程优先级
  • PRI,优先级默认80,优先级越高,则获取cpu时间越多,数值越低优先级越高,整数表示
  • nice,-20到19,默认为0,不起作用,为负则是减少优先级值,为正表示加优先级值
    • nice -n -5 vi /etc/tmp/a.txt &,修改优先级减5,并且转入后台,设定要启动(即还未启动)的程序,如果程序已经启动,则用下面命令
    • renice -n +5 pid ,给程序加优先级,这是在优先级为80的基础上加,而不是其他值
作业控制
  • ping www.baidu.com > ping.txt,可以在克隆的里边查看,也可以在此处点击CTRL+z放在后台运行,但是会停止,yongjobs可以查看,所以输入bg 1命令,就是将后台第一个进程运行,再看时就开始运行了,fg 1就是将后台运行切换到前台,再按ctrl +c就是停止运行
  • ping www.baidu.com > ping.txt &,作用和上边一样,直接前台切换后台运行,关闭的方法同上
任务调度
  • at一次性任务计划,注意用修改时间做测试时,时间每做一个推一天

    • at 18:00,shutdown -r now,再按ctrl +d退出来并执行
    • atq查看有多少个命令在执行
    • at -c 查看内容
    • atrm n 删除n命令
  • cron,更常用,周期性的将系统自动放在后台运行,
    *
  • -i -w -c

Linux系统基础小白学习(更新中)相关推荐

  1. linux系统基础知识学习笔记

    /  根分区 boot 系统引导程序(内核,GRUB配置文件等) bin  存放终端二进制命令 etc 系统配置文件(大多数配置文件都是文本文件) dev  存放设备文件(系统将计算机中的各种设备资源 ...

  2. linux 系统优化基础,Linux系统基础优化总结

    请称呼我搬运工,哈哈 优化综合 https://www.cnblogs.com/yinshoucheng-golden/p/6149556.html (1)不用root管理,以普通用户的名义通过sud ...

  3. python语言自学-零基础小白学习Python编程语言的正确姿势(纯干货)

    原标题:零基础小白学习Python编程语言的正确姿势(纯干货) 敢问有哪种编程语言集简洁.优雅.简单.全能于一身?Python绝对算的上是一个.举个例子,比如完成同一个任务,C语言需要写1000行代码 ...

  4. 前排!零基础小白学习3D建模的必经之路

    随着游戏行业的迅猛发展,3d建模这一职业也成为了越来越多人的选择,但是掌握一项新技能是需要时间和精力的,今天想和大家分享一下零基础小白学习3d建模的必经之路,希望能够帮到大家. 01 可以自学3D建模 ...

  5. Linux系统基础知识

    Linux系统基础知识 1.在Linux系统中,以文件方式访问设备.   2. Linux内核引导时,从文件 /etc/fstab中读取要加载的文件系统. 3. Linux文件系统中每个文件用 ino ...

  6. Linux操作系统基础知识学习

    Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会(Free Software Foundation,FSF)的一个项目, ...

  7. Linux实战教学笔记06:Linux系统基础优化

    第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...

  8. android checkbox监听另一个checkbox选中和不选中_一个真正0基础小白学习前端开发的心路历程...

    摘要:真正的0基础小白学习前端开发的心路历程. 距离第一阶段的结束敲响了末尾的声音,抱着初心从开始8号的学习到第一阶段的结束这期间要应付期末考试应付自己的各种事情学习时间总是挤出来的这次学习让我受益匪 ...

  9. 一个真正0基础小白学习前端开发的心路历程

    摘要:真正的0基础小白学习前端开发的心路历程. 距离第一阶段的结束敲响了末尾的声音,抱着初心从开始8号的学习到第一阶段的结束这期间要应付期末考试应付自己的各种事情学习时间总是挤出来的这次学习让我受益匪 ...

最新文章

  1. Python 第十五天 串讲
  2. 记一次关于MySQL与PHP的蠢事
  3. 如果我的接口必须返回Task,那么实现无操作的最佳方法是什么?
  4. centos nfs端口固定
  5. Linux CENTOS6.5 图形命令互转
  6. make,makefile,cmake“暴力编译法”的个人经验或理解。
  7. 独立思考者模型:寻找潜藏在表象背后的真相 探寻真相的方法
  8. 前端学习(2043)vue之电商管理系统电商系统之优化web.config.js的配置文件
  9. [LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项
  10. 案例 宠物医生给小动物看病 c# 1614100379
  11. MySQL筛选重复数据
  12. PHY芯片88EE1111 MDIO接口调试
  13. pyqt——布局管理
  14. [活动]《博客园精华集》设计模式分册第2轮筛选结果公示
  15. android屏幕重力感应器,android屏幕重力感应如何实现,很质量的一个问题
  16. Guarded Blocks 保护块
  17. 162_apt-cyg安装
  18. SaaSBase:免费的思维导图软件:2022年9种最好的工具
  19. modbus tcp主站和从站_组态王与西门子 PLC无线Modbus通讯
  20. 由浅入深理解区块链技术

热门文章

  1. IMX6ULL裸机开发之点亮LED灯
  2. 七牛数据处理再添新兵——图片瘦身
  3. Android无线调试 Wifi连接ADB不用数据线
  4. 简单的Android程序多少钱,Android简单程序利息计算器
  5. 基于GIS、、geosever插件实现当地旅游资源网格化管理系统的架构
  6. e580显卡驱动_搭载AMD RX 550独显!联想Thinkpad E580评测:能玩大型游戏的亲民商务本...
  7. 六级阅读真题词组(2016)
  8. 张果老能是鸿蒙时期一蝙蝠,感谢唐明皇,为我们弄清了张果老原来是只白蝙蝠...
  9. 开发一个app需要多少钱
  10. java面向对象高级特性 ---接口案例(学校中有教师和学生两类人,而在职研究生既是教师又是学生)