Linux基础

第一天
1.什么是操作系统
操作系统是什么?操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是配置在计算机硬件上的第一层软件,任何其它软件都必须在操作系统的支持下才能运行。
操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用的接口(应用编程接口API,由操作系统实现提供的所有系统调用所构成的集合,是应用程序和系统之间的接口)呈现给用户。系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理的结果返回给应用程序。

硬件:框架
冯诺依曼体系结构:
1946年美籍凶牙利科学家冯诺依曼提出存储程序原理,把程序本身当做数据来对待,程序和该程序处理数据用同样的方式存储,并确定了存储程序计算机的五大组成部分和基本工作方法。
特点:
(1)计算机处理数据和指令一律用二进制数表示
(2)顺序执行程序
计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器(内存),计算机执行程序时,将自动地并按顺序 从主存储器中取出指令一条一条的执行,这一概念称为顺序执行程序。
(3)计算机硬件由运算器、控制器、存储器、输入设备、输出设备五大部分组成。

memory:编址存储设备
假设我们的存储器为一个长条,其中每八位(bit)作为一个单元,我们把它称为字节byte,字节又称为cell。
 
机器语言:二进制指令 (但是对于编程 人员来说二进制语言太难懂(太简陋,太底层),但是程序员想用简单点的语言去描述计算机又不懂所以两者之间不能耦合可以加一个中间层–编译器)
汇编语言: 仅是将二进制转为人类语言想接近的语言或者是与人类语言符号相同的类型(+ and/plus)
所以任何一款芯片制造商他们都把机器的代码也就是机器语言提供一个较为简单的稍微向上一点的但任然很简陋的编程接口叫做汇编语言(微码编程语言)

软件:
----汇编语言: (低级语言)
应用:驱动程序
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
eg:操作:寄存器BX的内容送到AX中
1000100111011000              机器指令
mov ax,bx                    汇编指令
(注意:最终识别的还是01二进制数所以还需要将汇编语言转换为二进语言所以需要用到汇编器)
----(高级语言):比较接近人类的思维逻辑 ----(编译器)
系统级: c c++
适用场合大型的对性能要求比较高的服务类程序 如:oracle mysql linux windows /
应用级:java python ruby
2.系统调用的层级关系(系统组成结构)

操作系统内核的功能:
系统调用接口
程序管理
内存管理,虚拟内存—内存交换
文件系统管理
设备驱动

3.Linux简史
Linux 操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU计划、POSIX 标准和Internet 网络。
linux来源于哪里?为什么linux是免费的?
linux的发展历史
1969年 ken.Thompson               使用BCPL(基本组合编程语言)开发出了Unics
1972年 Dennis Ritchie                  用c语言改写Unix
1984年 Richard M.Stallman          创办GNU计划和自由软件基金会,旨在开发一个类似 Unix、并且是自由软件的完整操作系统:GNU 系统,bash工作环境,gcc编译程序等自由软件GPL
1987年 Andrew S. Tanenbaum                  Minix
1991年 Linus Benedict Torvalds                 Linux
1994年 Bob Young Marc Ewing                  RedHat(Linux的发行版之一),是世界上最大的开放源代码的公司之一。
4.linux主要特性
1.基本思想(一切皆文件)
Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
2.完全免费
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。这是其他的操作系统所做不到的。正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变,这让Linux吸收了无数程序员的精华,不断壮大。
3.完全兼容POSIX1.0标准
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
4.多用户、多任务
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
5.良好的界面
Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
6.支持多种平台
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。常见的操作系统:UNIX、Linux类、MacOS、Windows类、iOS、Android、WP、ChromeOS
linux严格来说只是linux内核,我们通常说的linux其实都是基于linux内核的一个发行版本的操作系统。linux这些发行版都是免费使用和自由传播的操作系统并且Linux发行版在服务器上已成为主流的操作系统。
 
红帽认证:
RHCSA redhat certified system administrator
RHCE redhat certified engineer
RHCA redhat certified Architect
 
5.操作系统分类:

桌面操作系统(个人操作系统)
window dos 95 98 2000 2003 Vista xp 7 8 10 架构上 16 32 64位
Mac OS (狮子 雪豹–版本)
手机: Android(谷歌) IOS(苹果) window phone(微软)–诺基亚 Sysbian(诺基亚) BlackBerry OS (黑莓)linux

服务器企业操作系统 (塔式、刀片式、机架式、小型机、大型机)
大型机:通常用于政府、银行、交通、保险公司和大型制造企业。特点是处理数据能力强大、稳定性和安全性又非常高。
windows server (2003 2008)
linux redhat linux、 centos linux、 fedora linux 、suse linux、 Debian linux 、 Ubuntu linux kali
unix IBM-AIX HP-UX sun-Solaris 小型机–迷你裙 (约翰-哥伦将)
Ken Tompson —unics
Dennis Ritchie ----c/unix minx
林纳斯·本纳第克特·托瓦兹 —linux
Richard Stallman史托曼 —GNU计划 gcc
为什么我们要学习红帽的linux操作系统?红帽主要是做什么的?
redhat 全球最大的开源技术厂家;云、虚拟化、存储、Linux 和中间件技术。redhat linux是全球应用最广泛的linux;
1)UNIX是商业软件,而Linux是开放源代码,免费的,自由软件。
2)UNIX系统大多是与硬件配套的,而Linux则可运行在多种硬件平台上.
6.linux的安装准备工作:
windows是64位操作系统
确认电脑开启虚拟化功能
内存最少2G
1、退出或者卸载360等等一系列软件
2、需要的环境:Vmare虚拟化软件(虚拟工具)
3、安装远程连接工具Xshell
4、新建虚拟机:
 
 >>终端
物理终端 /dev/console
直接连接在主机上的显示器、键盘鼠标统称。在实际机架式服务器部署中,
一般是多台服务器共享一套终端,
简称KVM(Keyboard键盘,video显示器,mouse鼠标)
虚拟终端 /dev/tty
默认有6个
ctrl + alt +f1/2/3/4/5/6
同一台终端(物理设备)上虚拟出多个终端,它们之间互相不影响,至少看起来互相不影响。这些终端就是虚拟终端
附加在物理终端之上,用软件方式虚拟实现,Redhat默认启用6个虚拟终端,
可以通过快捷键来切换,切换方式:Ctrl-Alt-F[1–6], 对应的文件是/dev/tty#。
可以同过tty命令来查看当前的虚拟终端号。tty是teletypewriter的简称。
伪终端(远程终端)pty /dev/pts ssh telenet
模拟终端
是一个程序,这些程序用来模拟物理终端
两种应用场景,第一在图形界面下打开的命令行接口,第二基于ssh协议或telnet协议等远程打开的命令行界面,
是运维工程师用的最多的一种连接服务器的方式。pts(pseudo-terminal slave)是pty的实现方法。

GUI (Graphical User Interface) 图形用户界面 对于一些初学者
Gnome: C
KDE : C++
XFace: 轻量级的

CLI (command line interface) 命令行界面 liunx主打命令行操作
bash shell
csh shell
zsh shell
ksh shell
tcsh shell
sh shell

快照
xshell进行远程登录
Linux的基本原则
1、由目的单一的小程序组成
2、一切皆文件,设备的访问入口也是文件
3、避免捕获用户接口,尽量不和用户交互
4、配置文件保存在纯文本格式,只要有一个文本编辑器,足以搞定所有的配置。
命令格式
 
命令
命令 参数
命令 -选项
命令 -选项 参数
 
修改命令的执行特性
短选项        -l
多个选项可以组合
长格式        --long
参数        指定命令的作用对象

=============
基础命令
#ip a /ifconfig 查看IP地址
#dhclient 开启网络连接
#kill-9 ID 结束指定进程 只能是管理员操作普通用户没有权限
Xmanager中的Xshell软件连接到模拟器用户主机:ssh 192.168.220.128
:ssh licong@192.168.220.128
[root@localhost ~]#
用户名 @主机名 打开目录位 置 #管理用户/$普通用户
[root@localhost ~]#pwd 打印目录信息
家目录 :创建一个用户时就会产生一个和用户名相同的目录叫做家目录——一个普通的文件夹
su licong 切换用户但是工作目录没有切换
su -l licong 切换用户 工作目录也随之切换(l可以省略)
[root@localhost 公共]# echo $PATH查看工作环境
ip a 查看ip地址
dhclient 地址请求
kill -9 ID 结束相应的进程
pwd 指出当前工作环境 print workdoing directory
su 切换到root用户并不切换环境(工作目录) switch user
su root 切换用户身份但不切换目录
su - root 切换到root用户并切换环境(切换了工作目录)

cd 切换目录 change directroy
绝对路径 从根开始到目标的路径叫绝对路径
相对路径 相对当前目录开始到目标路径
/ 根
~ 家目录 /root /home/redhat
~ USERNAME(root用户有权限) 直接切换到指定用户的家目录
- 在上一个目录和当前目录来回切换
. 当前目录
… 上一级目录
passwd
修改密码:passwd 用户名 直接输入passwd修改当前用户的密码
删除密码:passwd -d 用户名
root用户:不需要输入原密码,可以不符合密码复杂性规则,可以给任何人修改密码
普通用户:需要输入原密码,必须符合密码复杂性规则,passwd修改密码无法指定用户 
[student@localhost ~]$ su -c passwd普通用户给root用户修改密码

破解密码
1.Reboot the system.
2.Interrupt the boot loader count down by pressing anykey.
3.Move the cursor to the entry that needs to be booted.
4.Press “e” to edit the select edentry.
5.Move the cursor to the kernel command line(the line that start swith linux16.
6.Append rd.break
7.Press Ctrl+x to start.
8.Remount /sysroot as read-write.
switch_root:/# mount -o remount,rw /sysroot
 
9.Switch into a chroot jail, where /sysroot is treated as the root of the filesystem tree
switch_root:/# chroot /sysroot
10.Set a new root password:
sh-4.2# passwd [root]        (change the root password)
or
sh-4.2# passwd -d root        (delete the root password)
11.Make sure that all unlabeled files (including/etc/shadow at this point)get relabeled during boot.
sh-4.2# touch /.autorelabel

  1. sh-4.2# exit
  2. switch_root:/# exit        
     
    eg:破解root密码:
    1、重启虚拟机
    2、在linux16末尾加上 rd.break,ctrl+x执行
    3、mount -o remount,rw /sysroot
    4、chroot /sysroot
    5、passwd root
    6、输入新密码:
    7、确认密码
    8、touch /.autorelabel
    9、exit
    10、exit
    重启:reboot
    关机:shutdown -h now,poweroff
    查看当前Linux发行版本信息:cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 7.2 (Maipo)
     
    [root@localhost 桌面]# uname -r 内核版本号
    3.10.0-327.el7.x86_64 主版本号 . 子版本号 [ 修正版本号 [. 编译版本号 ]]
    3主版本号
    10次版本号,一般偶数表示较稳定版本
    0修订版本号
    327.el7 表示修改了327次
    1.项目初版本时,版本号可以为 0.1 或 0.1.0,也可以为 1.0 或 1.0.0
    2.当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1;
    3.当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0,因而可以被忽略掉 ;
    4.当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1;
    5.另外,编译版本号一般是编译器在编译过程中自动生成的,我们只定义其格式,并不进行人为控制 .
     
     作业:
    1.查看linux发展历史,了解什么是开源为什么linux是开源软件,
    去了解unix和linux之间到底有什么不同或者有什么相同。
    2.学会如何装linux操作系统
    3.如何破解密码。
    4.ip a
    dhclient
    kill -9
    passwd
    -d

第二天
基础命令
命令格式:主命令 选项 参数(操作对象)
列出目录下的内容(list):ls
ls -l        以长列表方式列出 =ll
ls -r        逆序列出
ls -d         查看当前目录.
ls -ld        长列表列出当前目录的详细信息
ls -lh 显示目录或文件大小
ls -a        列出隐藏文件,包括.和…
ls -A        列出隐藏文件,不包括.和…
ls -i 显示文件索引节点号(inode)。一个索引节点代表一个文件,在linux中保存在磁盘分区中的文件都给它分配一个编号,称为索引节点号inode。
man ls        查看ls的使用手册
enter键可以一行一行的翻,空格键可以一页一页的翻
按q键退出
linux的文件类型:
-        普通文件,类似于Windows的记事本
d        目录文件,类似于文件夹
c        字符设备文件,串行端口设备,顺序读写,键盘
b        块设备文件,可供存储的接口设备,随机读写,硬盘
p        管道文件,用于进程间的通信
l        link,链接文件
s        套接字文件,通常用于网络上的通信。可以启动一个程序来监听客户端的要求,客户端可以通过套接字来进行数据通信
-rw-------. 1 root root 1789 1月 13 13:47 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 1月 13 11:46 公共
rwx rwx rwx .
权限标识符 rwx
所属用户标识位
所属组标识位
. 扩展权限标识位(没有)

  • 添加了扩展权限

硬链接次数
所属用户 所属组
大小 byte
创建时间(最后一次修改文件时间)

2-10 文件权限 rwx
. acl 扩展权限
硬链接次数 (备份文件 内容是同步变化的)
所属用户 所属组
大小
时间
文件、目录名

在linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode。
(1)符号链接又叫软链接,和原文件不是一个文件。例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了。符号链接记录的是目标的path。符号链接可以跨越文件系统,也可以为目录建立。软链接有自己的node,是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径。
创建链接文件:ln -s 原文件 链接文件
(2)硬链接,只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接记录的是目标的inode
创建硬链接: ln 原文件 新文件

如何创建软硬连接ln
eg:在root家目录创建文件file, 在/目录下创建file文件的软链接文件haha
~]#touch file
/]#ln -s /root/file haha
~]#ln -s file /haha
touch 文件名 创建文件
ln 原文件 目标文件 创建硬链接
ln -s 原文件 目标文件
nano 文件名 编辑文件
cat 文件名 查看文件
rm 文件 删除文件
which 查找命令路径
which 只想查看命令路径但是不想查看别名路径
#\which ls
#which --skip-alias ls
who 查看谁登陆到当前系统相关用户信息
root :0 2019-03-17 09:58 (:0)
root pts/0 2019-03-17 10:01 (:0) 伪终端0
-b 最近一次系统是什么时间启动的 tty本地虚拟终端
-d 显示死亡进程
-r 显示运行级别
w就是who是增强版的who(可以显示登录用户,以及在做什么)
14:50:45 up 4:54, 2 users, load average: 0.00, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 09:58 ?xdm? 1:56 0.23s gdm-session-worker [pam/
root pts/0 :0 10:01 5.00s 0.59s 0.05s w
用户 终端 从哪天主机登录 连接多长时间 空闲多长时间 cpu累计时间 pcpu 现在运行什么命令
文件查找: find
eg:查找一个文件下有哪些硬连接:
#find / -inum id
[root@localhost ~]# find / -inum 69243921
/root/file1
/file1
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# find / -name bbb
/bbb

FHS:filesystem hierarchy standard文件系统层级标准,定义了在类Unix系统中的目录结构和目录内容,即让用户了解到已安装软件通常放置于哪个目录下。
可执行文件:指的是可以由操作系统进行加载执行的文件
FHS采用树形结构组织文件。FHS文件系统层级图
 文件系统:操作系统用于明确存储设备或分区上的文件的方法和数据结构;
(磁盘上组织文件的方法 在操作系统中负责管理和存储文件信息的软件机构)
linux里面有哪些目录:
/                根目录,通常不在这里存储文件
/bin        可执行文件,ls,cd
/sbin 可执行文件
/boot        开机启动的文件,包括linux内核以及开机菜单与开机所需配置文件等
/dev        设备文件,任何设备与接口设备都是以文件形式存在于这个目录的
/root        root用户的主目录
/home        普通用户的主目录
/mnt        挂载点目录
光盘必须和/下的某个目录节点建立联系才能使用。
把光盘和指定的挂载点目录建立联系的过程叫做挂载。
mount /dev/sr0 /mnt
/media        媒体目录,也是挂载点目录
/opt        可选目录。存放第三方软件包和数据文件
/var        可变目录,用以存放经常变化的文件,如日志文件
/etc        配置文件
/lib 系统的函数库
/proc 该目录是一个虚拟文件系统,它放置的数据都在内存当中
/run 系统运行时所需文件
/usr 放置的数据为可分享的与不可变动的,unix操作系统软件资源所放置的目录,而不是用户数据
/srv service的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录
/tmp 让一般用户或者是正在执行的程序暂时放置文件的地方
/sys 这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要是记录与内核相关的信息

命令分为两类:
由shell程序的自带的命令:内置命令(builtin)
由独立的可执行程序文件,文件名即命令名:外部命令
选项:指定命令的运行特性,指明要运行命令中的哪一个功能代码
选项有两种表现形式 :
短选项:例如:-l,-d
如果同一命令同时使用多个短选项,多数可合并
注意:有些命令的选项没有-
长选项:例如–help,–human-readable
注意:有些选项可以带参数,此称为选项参数
参数:命令的作用对象:命令对什么生效
注意:不同的命令的参数,有些命令可同时带多个参数,多个之间以空白字符分隔。
??那命令怎么知道是那个路径下的命令呢?系统为了让用户在命令行快速方便地执行命令,用一种机制来实现,
这种机制就叫做环境变量,
变量是什么?变量是命名的内存空间。
变量赋值
NAME=haha int a=123
变量声明的过程就是申请内存使用的过程
环境变量
定义当前用户工作环境属性的变量
PATH
 
 
 
hash 实现缓存管理 哈希
缓存,命中率相当高,在hash表中保存了执行过的所有的路径,
当缓存很大时,一定比PATH查找速度快吗?

hash 命令哈希
-p /bin/ls haha 添加哈希表
-t ls 查看指定命令的哈希表
-d ls 删除指定命令的哈希表
-r 清空所有的hash表

alias 添加指定命令别名
alias 目标命令名称=‘需要执行的命令串本身’
/etc/bashrc 对所有用户全部生效的别名信息
nano ~/.bashrc 别名信息仅对当前用户生效
source ~/.bashrc 生效

unalias 别名 删除指定的命令别名
 
 
 
与时间有关的命令:
date 输出和更改日期时间:(软件、系统时间)
更改日期的格式 月日时分年.秒
date -s “” ‘’
date -s 只有root才能设置,其它只能查看
date -s 20160813 日期为20160813,时间为00:00:00
date -s 01:01:01 设置具体时间,不会对日期做更改
date -s “01:01:01 2016-08-13″ 设置全部时间
date -s “01:01:01 20160813″ 设置全部时间
date -s “2016-08-13 01:01:01″ 设置全部时间
date -s “20160813 01:01:01″ 设置全部时间
 
查看硬件时间:clock
查看硬件时间:hwclock
-w        系统时间给硬件时间
-s        硬件时间给系统时间
查看日历:cal
cal         查看当年当月的日历
cal 年份                查看一年日历
cal 月份 年份        查看当年当月的日历
cal -1                         查看该月的日历
cal -3                        查看前一个月,本月,下月的日历
将输入接到标准输出(从键盘输入,从显示器输出):echo
命令使用帮助
内部命令
help COMMAND
COMMAND --help/-h
外部命令
COMMAND --help
命令手册 manual
man COMMAND
man手册分段
NAME 命令名称及功能简要说明
SYNOPSIS 格式说明,用法说明,包括可用的选项
DESCRIPTION 命令功能的详尽说明,可能包括每一个选项的意义
OPTIONs 选项,说明每一个选项的意义
EXAMPLE 示例,举例说明
FILES 此命令相关的配置文件
AUTHOR 作者
REPORTING BUGS bug反馈
COPYRIGHT 版权
SEE ALSO 参见
0 成功
1-255 错误状态
man手册章节
从1到8哪个章节先出现就显示哪个,如man mount就显示第8章节,那如何知道命令有哪些章节呢?
用whatis read
举例man read,man 2 read,export LANG=en修改字符集
1 用户命令,/bin,/usr/bin,/usr/local/bin
2 系统调用,系统调用和命令有可能重名,但是不是一回事
3 库调用,只有库才有库调用
4 特殊文件,如设备文件,系统上的设备文件只是设备的访问入口,文件中不存储任何内容
5 文件格式,配置文件的格式说明,举例passwd
6 games,游戏,休闲益智类的游戏
7 杂项,不便归类的杂项,Miscellaneous
8 管理命令,/sbin,/usr/sbin,/usr/local/sbin
手册符号说明
[] 可省略
<> 必选
… 多选多
{} 分组
翻屏
下翻一页 空格
上翻一页 b
下翻一行 回车
上翻一行 k
查找
/KEYWORD 向后
n 下一个
N 前一个
?KEYWORD
N 下一个
n 上一个
退出
q

touch创建普通文本文件
文件命名规则:
(1)不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的
(2)文件名不能超过255个字符
(3)区分大小写file File FILE fIle
(4)目录也是文件,在同一路径下,两个文件不能同名
创建多个普通文件:
方法1:touch 文件名1 文件名2 文件名3
方法2:touch {文件名1,文件名2,文件名3}
touch {1,2}{3,4}
touch abc{1…100}
stat查看文件的详细信息
touch不仅可以创建空文件,还可以改变文件的修改时间
atime         access time        看了一下内容 cat        
mtime         modify time 文件内容被改变了,ctime也会发生改变
ctime        change time         元数据被改变,重命名

mkdir 目录名 创建目录文件
-p        parents        父目录
-v        verbose        详细信息
 
rm 删除文件,命令别名默认带-i,该选项用来提示用户进行交互。 
-f force,强行删除,不提示
-r recursive,递归删除来删除目录

cp复制文件:

  • r 复制目录
    -p 复制的时候保留文件原有的属性,时间戳等信息
    -a 归档复制,常用于备份
    单源复制: cp [OPTIoN]… [-T] SOURCE DEST
    多源复制: cp [OPTIon]… SOURCE… DIRECTORY
    cp [OPTION]… -t DIRECTORY SOURCE…
    -i: 交互式复制,即覆盖之前提醒用户确认
    f:强制覆盖目标文件:
    r:递归复制目录:
    d:复制符号链接文件本身,而非其指向的源文件
    a:dR --preserve-all, archive, 用于实现归档
    – preserv=
    mode:权限
    ownership: 属主和属组timestamps
    时间戳context
    安全标签xattr
    扩展属性links
    符号链接all
    上述所有属性
    如果DEST不存在:错误;如果DEST存在:
    如果DEST是非目录文件:错误;
    如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名:
     
    mv移动文件: 等同Windows里面的剪切,移动之后原文件消失
    -i 提示
    -f 强制覆盖
    -t 先写目标 后写源

练习题
1、创建目录
在/mnt下创建boot和sysroot目录
在/mnt/boot下创建grub目录
在/mnt/sysroot下创建proc,sys,bin,sbin,lib,usr,var,etc,dev,home,root,tmp
在/mnt/sysroot/usr下创建bin,sbin,lib
在/mnt/sysroot/lib下创建modules
在/mnt/sysroot/var下创建run,log,lock
在/mnt/sysroot/etc下创建init.d
2.如何一次性在/test目录创建以abc表示的100个文件,例如{abc1,abc2,abc3,…abc100}

查看文件命令
cat 连接并显示文件到标准输出
-n 显示行号,行号只是行号,不是文件内容
不带任何选项时,从标准输入接收输出到标准输出
tac 按行逆序显示文件,同cat
more 支持向后翻,在没有翻到最后一屏时支持向前翻,空格/k/回车
less 前后翻,用法同man,man手册就是用less命令打开的
head 查看文件前n行,默认是10行
-n 指定多少行
-LINE NUMBER 直接用行数作为选项
tail 查看文件后n行,默认是10行
-n 指定多少行
-f follow,查看文件后并不退出,滚动显示追加内容
/var/log/messages
 
 
作业题:
1.在root用户的主目录下创建两个目录分别为haha和hehe,复制hehe目录到haha目录并重命名为apple。
2.将hehe目录移动到apple目录下,在haha目录下创建一个普通文件为heihei.txt。
3.写一个命令别名为aoe,他实现的功能为:列出上一题haha目录下的详细内容。
4.在/usr/local/etc下创建一个目录为mulu1,创建一个普通文件为wenjian1。在/usr/local/bin创建一个目录为mulu2,创建一个普通文件为wenjian2。创建成功后使用ls命令以及它的选项来检查该题的正确性
5.创建目录/test/sysroot在该目录下创建三个文件a,b,c 之后再将sysroot目录移动到/tmp目录下改名为sys保证目录下三个文件也存在。
6.删除 /tmp/sys/a 文件。
7.创建目录/tmp下创建4个目录,并在这四个目录下分别创建一个test目录
8.创建一个test目录,在该目录下创建一个文件,内容写
9.在/dir下创建目录dir2和文件file1,移动文件file1到上面创建的test目录中,将目录dir2复制到test目录中
文本处理
cut 文本切割显示:
cut -d 指定分隔符 -f 指定第几列 被切割文件
-f 1,3第一列和第三列
-f 1-3第一列到第三列
-c 1-4 指定第一到第四个字符
指定分隔符的时候空格需要用单引号或双引号引起来
cut -d : -f 1-3 --output-delimiter=@ /etc/passwd
echo 回声 标准输入输出指令
$ 引用变量
> 重定向
>> 追加重定向
| 管道就是将前面命令输出作为管道后面命令的输入
反引号,命令替换
" " 双引号,可以实现变量替换 不加引号的方式 echo P A T H ‘ ’ 强 引 用 , 不 完 成 变 量 替 换 e c h o ′ PATH ‘ ’ 强引用,不完成变量替换 echo ' PATHechoPATH’
 
文本排序显示:sort
排序显示(默认根据字符在ASCII码中的升序排序):sort 文件名
按照数值大小排序:sort -n 文件名 
排序并去掉重复的:sort -u 文件名
逆序排序:sort -r 文件名
按照用户uid数字大小排序显示:
sort -t 指定分隔符 -k 指定第几列 -n /etc/passwd
   -f        排序时忽略字符大小写
去掉重复的行,重复的行必须相邻:uniq 文件名
-d        只显示重复的行
-D        显示所有重复的行
-c        显示重复行重复的次数
 
文本统计:wc——word count
显示文件行数、单词数、字节数和文件名:wc 文件名
###在UTF-8编码格式里面,显示时一个字符占一个字节,一个中文字占用3个字节
只显示单词数:wc -w 文件名
只显示字节数:wc -c 文件名
只显示行数:wc -l 文件名
只显示字符数:wc -m 文件名
显示最长的一行的字符数:wc -L 文件名

模式匹配器
grep 过滤关键字显示所匹配到的行[root@localhost ~]# grep root /etc/passwd
–color 匹配项着色
-o 显示匹配到的字符串 [root@localhost ~]# grep -o root /etc/passwd
-i 忽略大小写
-v 只显示没有匹配到的行 [root@localhost ~]# grep -i o /etc/passwd
^# 以#号开头 # ; // ----注释行
^$ 空白行
-A 2 指定数字显示说匹配到的下几行
-B 2 指定数字显示所匹配到的上几行
-C 2 显示所匹配到的上下几行
查找文件里的字符和字符串:

匹配整个单词:grep -w 单词 文件名
匹配以q开始的行:grep 1 文件名 ^行首 行 尾 匹 配 以 q 结 束 的 行 : g r e p q 行尾 匹配以q结束的行:grep q qgrepq 文件名
匹配以数字开头的行:grep 2 文件名
匹配以q或者f开头的行:grep 3 文件名
如果要明确搜索子目录:grep -r h ./*
忽略子目录:grep -d skip h ./*

练习题:
1.创建目录/test/sysroot在该目录下创建三个文件a,b,c 之后再将sysroot目录移
动到/tmp目录下改名为sys保证目录下三个文件也存在。
2.删除/tmp/sys/a 文件。
3、创建目录/tmp下创建4个目录,并在这四个目录下分别创建一个test目录
4、创建一个test目录,在该目录下创建一个文件,内容写 ‘我很瞌睡’
5、在/dir下创建目录dir2和文件file1,移动文件file1到上面创建的test目录中,
将目录dir2复制到test目录中
6.将/etc/passwd 中第一个字段(用户名)截取到user文件中
cut -d : -f 1 /etc/passwd > user
7.将3,4 字段分别截取出来写入文件UID和文件GIU但是要使这两个文件中的信息
是以数值由大到小的形式显示;
cut -d : -f 3 /etc/passwd | sort -nr > UID
截取当前日期的年月日显示在文件A.txt 中?
date |cut -d " " -f 1-3
统计/etc/passwd 一共有多少行但不显示后面的文件名?
文本统计

作业题:
1.将/etc/passwd 中第一个字段(用户名)截取到user文件中
2.将3,4 字段分别截取出来写入文件UID和文件GIU但是要使这两个文件中的信息
是以数值由大到小的形式显示;
4.通过查看时间命令将分别将年月日时分写入A文件,将当前显示为星期几追加写
入A文件。或者在屏幕上输出“the day is (星期几)”
5.并将文件通过合并命令将UID与GID文件中的信息写入USERID文件 。
6.告诉用户当前系统有多少用户?
7.通过过滤指令将/etc/login.defs 文件中关键的配置信息显示在file文件中。
1.在/home下创建普通文件file1,在/下给它创建一个硬链接文件为file1.bak,在root用户的家目录下给file1.bak文件创建一个硬链接为file1.bak.bak,给file1.bak.bak创建一个软链接为f1。
2.找出root用户的家目录下以f开头的文件。
3.写出一个永久生效的命令别名为cha,该命令别名可以显示出以上四个文件的详细属性和inode号
4.将/etc/passwd的内容添加到file1.bak文件中,保留file1.bak文件中前9行的内容,删除其他行的内容。
5.查找出file1.bak的路径。
6.将file1.bak文件的第一列和最后一列输入到文件/root/zuoye。
7.将file1.bak.bak文件的第一行和最后一行输入到文件/test。
8.有一个文件叫lianxi.txt,文件内容为排序过的file1.bak内容的第三列和第三列的行数。

第三天

文本编辑vim:
命令模式:按esc键可回到命令模式
dd                删除当前行
dw                按单词删除
u                撤销当前操作
ctrl+r        重做
yy                复制光标所在行
2 yy        复制光标所在行和光标下一行
p                粘贴到光标下一行
cc 剪切
行数cc 剪切当前行开始的几行
x                删除光标所在位置的内容
w,b                按单词进行移动光标
gg                跳转到文档首部行首
dgg 删除光标至文档首部
G                跳转到文档尾部行首
/字符串1        查找字符串1
$        行尾
^        行首
h        往左按字符移动光标
j        往下(后)按行移动光标
k 往上(前)按行移动光标
l 往右按字符移动光标
H 跳转到当前屏幕输出的最上面一行
L        跳转到当前屏幕输出的最下面一行
M        跳转到当前屏幕输出的中间那一行
 
插入模式:
i 在光标前插入
I在光标所在行行首插入
a 在光标后插入
A 在光标所在行末尾插入
s 删除光标所在位置字符并插入
S 删除光标所在行并插入
o 在光标所在行下一行插入
O 在光标所在行上一行插入
 
末行模式:
:wq        保存退出
:q                退出(未修改文件内容才可以退出)
:wq!        强制保存退出
:q!        强制退出,不保存
:set nu        显示行号
:set nonu        不显示行号
:行号 跳转到指定行号
:3,5 d                删除3-5行
:r 文件名1        读出文件1的内容到当前文件里
:%s/字符串2/字符串3                字符串3替换字符串2
:%s/1/2/g        将1替换为2,全局修改
:w 文件名1        另存为文件名1
练习题:
1.去掉DNS域名解析:vim /etc/ssh/sshd_config
修改:                UseDNS no
重启服务:        systemctl restart sshd
2.当前用户永久生效的命令别名
[root@server ~]# vim ~/.bashrc 别名的配置文件里面设置
(1)写一个命令别名为hello,实现的功能为每输入一次hello命令,就有hello,everyone写入到文件/file.txt文件中。
(2)写一个命令别名为shuaxin,实现的功能为每输入一次该命令,file.txt文件的所有时间就更新为当前时间。
[root@server ~]# source .bashrc 使其生效
3.所有用户生效的命令别名
[root@server ~]# vim /etc/bashrc
(1)写一个所有用户都生效的命令别名为hh,输入这个命令之后可以在当前用户家目录下面创建一个file1文件。
4、配置postfix服务
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
vim /etc/postfix/main.cf
#配置邮件服务器主机名
76 myhostname = mail.openlab.com
#配置域名
83 mydomain = openlab.com
#指定邮件发送时的域名
99 myorigin = $mydomain
#指定网络接口
113 inet_interfaces = all
116 加注释
#指定服务器的目标区域
164 mydestination = m y h o s t n a m e , l o c a l h o s t . myhostname,localhost. myhostname,localhost.mydomain,localhost,$mydomain
#指定允许网络网段地址
264 mynetworks = 192.168.221.0/24
#转发域
296 relay_domains = KaTeX parse error: Expected 'EOF', got '#' at position 76: …ot@localhost~] #̲systemctl resta… mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
“/var/spool/mail/redhat”: 2 messages

1 root Sun Dec 16 14:46 19/658 “tianhaoleng”
2 root Sun Dec 16 15:01 19/583 “haihaohei”

bash 基础特性
用户接口shell:壳,命令解释器,负责解析用户输入的命令
shell是离用户最近的程序,也是计算机和用户进行交互的程序
广义上的shell包含两类:
GUI Gnome,KDE,Xfce
CLI bash shell
系统启动后,shell程序只有一个 ,但是shell进程却可以有很多,linux允许一个用户登录多次,在每个登陆进程看来,
当前主机只存在当前进程,以进程号识别进程,进程是程序的副本,进程是程序执行的实例,进程是有生命周期的。
shell自己是外部程序,但是shell有自己的内置命令

shell有子shell,对于父shell来说,子shell只是一个程序 
pstree命令看系统的进程树型结构,pstree可以用来以树状的方式变现进程的父子关系	
特性:
	1、命令行编辑
		Ctrl+a	跳到命令行行首
		Ctrl+e	跳到命令行行尾
		Ctrl+d	向后删除,类似delete
		Ctrl+u	删除光标至行首的内容
		Ctrl+k	删除光标至行尾的内容
		Ctrl+左右箭头	在模拟终端中支持按单词跳转
		Ctrl+l	清屏,等同于clear
		Ctrl+c  取消执行当前命令
	2、命令历史 (shell进程在其会话中保存此前用户提交执行过的命令)
		history		命令历史管理(命令历史列表)
				命令历史文件为~/.bash_history
				命令历史大小由环境变量HISTSIZE来指定,默认为1000
				变量配置文件为/etc/profile
			-c	清空整个命令历史
			-d	删除指定命令历史
			-w	将缓冲区中的命令历史保存到命令历史文件	
		使用技巧
			!n	执行命令历史中第n条命令
			!-n	执行命令历史中倒数第n个命令
			!!	执行上一条命令
			!KEY	执行最近一次以指定KEY开头的命令
			!$	引用上一个命令中最后一个参数
			ESC+.	同上,多次按还可以切换
			ALT+.	同上,在远程终端无效?
	3、自动补全
		命令补全
			在PATH环境变量下搜索补全要输入的命令
		路径补全
			在输入的字符开始的路径下补全

4、shell的变量功能:
变量简单说就是让某一个代特定字符串表不固定的内容。
设置变量(变量名的规则:用“=”连接;等号两边不能有空格符;只能使用数字和字母,且不能用数字开头;):
myname=redhat(变量声明的过程就是申请内存使用的过程)
环境变量
定义当前用户工作环境属性的变量
echo $PATH
取消变量:unset 变量名称

	5、命令替换
		把命令中某个子命令替换为其执行结果
		$()
			echo "The current directory is $(pwd)."    
			touch ./file$(date +%H-%M-%S).txt
		``	
			echo "The current directory is `pwd`"
			echo 'The current directory is `pwd`'
		bash支持的引号
			``	反引号,命令替换
			""	双引号,可以实现变量替换
			‘’	强引用,不完成变量替换			
####	5.控制命令历史的记录方式
		 环境变量:HISCONTROL
		 ignoredups:忽略重复的命令
		 ignorespace:忽略以空白字符开头的命令
		 ignoreboth:以上两者同时生效  --(这种修改只对当前shell有效)

6.bash 配置文件        
》》 登录式shell和非登录式shell
登录shell:是需要用户名、密码登录后才能进入的shell(或者通过–login”选项生成的shell)。
非登录shell:当然就不需要输入用户名和密码即可打开的Shell,例如:直接命令“bash”就是打开一个新的非登录shell,在Gnome或KDE中打开一个“终端”(terminal)窗口程序也是一个非登录shell。执行exit命令,退出一个shell(登录或非登录shell);执行logout命令,退出登录shell(不能退出非登录shell)。
 
》》 交互式登录shell和非交互式登录shell的区别
交互式登录:(清除掉所有变量,通过文件重新读入)
(1)直接通过终端输入账号密码登录
(2)使用“su - UserName”切换的用户 #passwd root
执行顺序:(影响该shell的配置文件)
/etc/profile --> /etc/profile.d/.sh --> ~/.bash_profile–> ~/.bashrc–> /etc/bashrc
非交互式登录:(会继承上一个shell的全部变量)
(1)su UserName #echo redhat | passwd --stdin root
(2)图形界面下打开的终端
(3)执行脚本   (当我们执行脚本的时候.我们就已经进入到了一个子shell)
(4)任何其它的bash实例
执行顺序:(影响该shell的配置文件)
~/.bashrc–> /etc/bashrc–> /etc/profile.d/
.sh
 使用./test.sh或者 bash ./test.sh执行脚本的时候,是开启一个子shell,这个子shell能继承上一个父shell的变量,而这个子shell的变量,随着子shell的退出而消失。当我们用. test.sh 或者source test.sh时,不开启子shell,在当前shell运行,子shell中的所有值都影响当前。
一般我们对shell进行一些配置的时候,通常都是对~/.bashrc 和/etc/bashrc这两个文件进行一些配置
 
7. bash特性之多命令执行:
~]#COMMAND1; COMMAND2; COMMAND3;
逻辑运算:
运算数:真(true,  yes, on, 1)
假(false, no, off, 0)
与:
1 &&1=1
1 &&θ=θ
θ&&1=θ
θ&&θ=θ
或:
1 || 1 =1
1 || 0 = 1
0 || 1 =1
0 || 0 = 0
非:
!1=0
! 0=1
短路法则:

查看帮助

/bin/bash优点:
命令与文件补全功能
命令别名设置功能
命令记忆功能
通配符等等

多用户管理
3A认证
Authentication: 认证机制,通过某种方案来确认用户是其声称的用户,如密码、生物识别等
Authorization: 授权机制,资源使用级别(Linux只有管理员和普通用户两级分配机制,权限)
Audition: 审计机制,监督权限的使用 ,log审计凭据—额外审计功能SElinux
用户,组,权限
重点:/etc/passwd 用户相关信息
/etc/login.defs 设置用户创建时默认相关信息
/etc/defualt/useradd 用户添加时会创建的相关信息设置
/etc/skel 用户家目录下相关隐藏文件
/etc/group 组相关信息
/etc/gshadow 组密码
/etc/shadow 用户密码
/var/spool/mail 用户邮箱记录
用户类别 /etc/passwd
管理员 0 root
普通用户 1-65535,2^16个
| 1-200 系统中的管理用户
|-系统用户 201-999,专门用来运行后台进程和服务的用户,不允许登陆系统(服务用户)
|-一般用户 1000-60000,后面的很少使用

用户组类别
按照用户类别的分法
管理员组 root root
普通组
|-常用分法
|-(主)基本组,用户的默认组 redhat redhat
|- 附加组 额外组,默认组以外的其他组 redhat grp1
用户管理
查看用户信息 useradd usermod userdel -r
/etc/passwd (用户配置文件)
冒号隔开的七个字段
account 用户名
password 密码,x为密码占位符,目标为/etc/shadow第二个字段
UID 用户ID
GID 基本组ID,额外组信息在/etc/group文件中
CECOS 用户基本信息
HOME DIR 用户家目录,系统用户不允许登陆
shell 用户的默认shell,/etc/shells保存了所有的合法shell

useradd     /etc/passwd   /etc/group   /home   /var/spool/mail  
            /etc/login.defs   /etc/default/useradd
adduser			
			
   useradd USERNAME/adduser
    -l
	-u UID	指定UID
	-g GID	指定基本组
	-G GID1,GID2,...	指定附加组
	-c	“注释信息”		指定用户注释信息      chfn 
	-d	/path/to/dir	指定某个目录为用户家目录
	-s	/shell			指定用户使用的shell    chsh -s
chsh	-s修改用户shell
usermod	修改用户相关信息,选项同useradd 
	-u	修改UID
	-g	修改基本组,基本组必须事先存在
	-G	这个选项会覆盖之前的附加组,和-a选项配合使用
		usermod -a -G 追加附加组
	-c	修改用户注释信息
	-s	修改用户shell
	-l	修改登陆名
userdel
	userdel USERNAME
	-r	删除用户时删除用户家目录和用户的邮箱
	
id		查看用户的ID信息,选项同useradd
	-u	显示UID
	-G	显示附加GID
	-g	显示GID	

组管理
/etc/group
组名:
组密码占位符:
GID:
以该组为附加组的用户名
groupadd 添加一个组
-n
-g GID
-r 添加系统组
groupdel 删除一个组 (不能删除基本组)
groupmod 修改一
个组
-g GID
-n GRPNAME 修改组名

相关文件
/etc/login.defs
用户的相关默认属性
添加用户就是在/etc/passwd、/etc/shadow、/etc/group中添加用户相关信息
默认属性都来自什么地方呢?来自 /etc/default/useradd /etc/skel

	/etc/default/useradd
	文件格式
	GROUP=100			组(在linux当中用户默认组有两种模式公有模式,私有模式当前我们学习的linux是一种私有模式)
	HOME=/home			家目录
	INACTIVE=-1			密码宽限期限
	EXPIRE=				账户过期期限不启用
	SHELL=/bin/bash		指定shell
	SKEL=/etc/skel		默认文件
	CREATE_MAIL_SPOOL=yes	邮件配置

修改家目录会出现的一些问题!!!
1.当正确添加用户后,然后更改用户的家目录,切换用户时发现状态不对。------------将用户家目录再次修改为创建默认家目录就好

2.当创建用户时从新指定了家目录,在用户切换时状态不正确-----解决方法将/etc/skel 下的隐藏文件拷贝到当前用户默认的家目录下
/etc/shadow 冒号隔开的九个字段
account 用户名
password 加密后的密码,格式为 6 6 6???$*
!!或者* 账户锁定 salt
最后一次修改时间 从1970年1月1日到最后一次密码改变的时间所经过的天数
密码最短使用期限 为0表示不限制
密码最长使用期限 密码使用多长时间之后必须要改密码,99999表示可不更改
密码过期警告时间 密码过期前多少天进行警告,提示用户改密码,但是不锁定用户
密码过期宽限期限 密码过期后必须改密码的时间,如果还没改,锁定用户,就只能找网管了
账号过期精确时间 如果为99999,意味着永不过期
保留字段
haha:!!:17432:0:99999:7:::
12/10 12/20 12/19 12/12
最后一次修改 最长 过期警告时间 过期精确时间
用户名-----密码---------|------------|--------------|----------|-----------------|------------|
最短使用期限 过期宽限时间 保留字段
12/17 3
12/23
passwd 修改用户密码
–stdin
echo “redhat” | passwd --stdin USERNAME
-l 锁定用户账号密码
-u 解锁用户账号
-d 删除用户密码,在redhat中,空密码用户禁止登陆
-n 指定密码最短使用期限
-x 指定密码最长使用期限
-w 指定警告时间
-i 指定宽限动时间

chage change age
-d 指定最后一次修改密码日期
-E 过期日期
-I 宽限时间
-m 最短使用期限
-M 最长使用期限
-w 警告时间
gpasswd +用户名设置组密码
-a 添加用户到组 usermod/useradd -G GID username
-d 将指定用户移出本组
-M 设置组成员列表
-A 指定管理员(组长)
-r 删除组密码
-R 限制用户登录组,只有组中成员才能加入该组 newgrp
newgrp 登陆一个新组
使用exit退出新组
练习题:创建用户和用户组
请按照以下要求创建用户、用户组:
1.新建一个名为adminuser的组,组id为40000
2.新建一个名为natasha的用户,并将adminuser作为其附属组
3.新建一个名为harry的用户,并将adminuser作为其附属组
4.新建一个名为sarah的用户,其不属于adminuser组,并将其shell设置为
不可登陆shell
5.添加用户maomao,修改它的家目录为/maomao,要求切换maomao时命令提示
显示正常。
6.创建std1 ,std2两个组,要求std1组中有三个用户,{1 2 3}
7.natasha、harry和sarah三个用户的密码均设置为glegunge创建用户
8.请创建一个名为alex的用户,并满足以下要求:
用户id为3456,描述名为alian密码为glegunge
9.创建g1组,要求创建一个属于redhat用户g1组的文件redhat.txt

###################用户管理作业题#########################
1.创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
2.创建下面的用户/组.用户natasha,使用admins 作为附属,用户harry也使用admins 作为附属组,用户sarah不可交互登录系统,且不是admins 的成员,natasha,harry,sarah密码都是centos
5.查看UID、GID范围的配置文件,修改为501-60000。并查看密码加密算法
6.查看创建用户时的模板配置文件
7.修改创建用户时的默认设置,家目录/www,默认shell 为/sbin/nologin。
8.修改aubin2用户UID672、主组root、添加新的附加组admins且保留旧的附加组。
然后锁定用户
9.用标准输入给aubin1设置密码hello。
10.显示curry用户UID、GID、显示用户名、显示用户所属组ID
11.锁定curry用两种方法
12.指定aubin3的密码最短使用日期为10天,最常使用日期为20天, 提前7天提示修改密码
13.从标准输入设置aubin3的密码
14.创建系统组liuliansha 指定GID为66
15.修改liuliansha组名为six 修改GID为67
16.将用户aubin1添加进组six,将aubin从six组中删除。
17.设置curry用户的详细描述,然后查看
18.删除用户aubin1、aubin2并删除家目录

综合练习:
1.新建用户组,shengchan,caiwu,jishu
2.新建用户要求如下:
* wjx 是shengchan组的附加用户
* liuy 是caiwu组的附加用户
* zxx 是jishu组的附加用户
* 新建admin用户,此用户不属于以上提到的三个部门

3.解释以下配置文件所有信息
/etc/passwd
/etc/login.defs
/etc/defaults/useradd
/etc/shadow
/etc/group
/etc/gshadow
实验
创建学习组1,学习组2 ;他们的组gid分别为1111,2222,添加成员并将uid为1088,
和uid为1066的成员为两组的组长,其中一组组长有一个‘外号’laoda。
不同学习组进入需要密码才能进入(设置密码);
作为学习组长可以将指定成员拉进本组,和移出本组其他成员没有权利干涉。
(只能一个一个拉和删);即使密码泄露也不希望组之外的成员进入。

第四天
文件详细信息:
dr-xr-x—. 16 root root 4096 Aug 26 09:47 root
文件类型        权限        硬链接次数        属主        属组        文件大小 文件的最后一次修改时间        文件名 
权限:属主的权限u         属组的权限g                其他人的权限o
读:r 4
写:w         2
执行:x 1        
000 0 —
001 1 --x
010 2 -w-
011 3 -wx
100 4 r–
101 5 r-x
110 6 rw-
111 7 rwx
rwxr-xr-x:755
查看权限掩码:umask                 0022
当前面第一位为2和4权限就叫强制位,1的权限就是冒险位,2代表GID,4代表的是uid,1代表的是sticky
权限掩码:控制创建文件的权限
查看权限掩码:umask
修改权限掩码:umask 022
普通文件的权限属性:666
目录文件的权限属性:777

对于普通文件:
r----可读取此文件的实际内容(cat查看文件);
w—可编辑该文件的内容(vim,echo),但并不具备删除该文件本身的权限(删除文件由文件的上层目录控制,跟文件本身的权限无关。)
x— 该文件具有可以被系统执行的权限。
对于目录文件:
r—具有读目录结构列表的权限,可以查询该目录下的文件名数据(ls将该目录的内容列表显示出来)
w—空
x—用户能否进入该目录(cd)
同时有w和x权限才可以创建文件和目录
修改权限:chmod 777 文件名
chmod u/g/o/a =/+/- r/w/x 文件名

安全上下文(一类定义某个进程允许做什么的许可和权限的集合)
权限 特权 完整性等级、访问令牌
进程的权限取决于用户的发起者的权限,而并非执行文件本身。

进程访问文件时,先查看用户权限,如果不是,再查看进程的发起用户是不是目标文件所属组成员 系统任何进程开始都保存为一个文件,由用户执行可执行文件后成为进程,而能否执行,取决于用户对可执行文件有没有权限,而程序一旦执行后转为进程,那么进程就与之前的可执行文件无关,进程的权限为进程发起者的权限,而进程能否访问某个文件,则取决于发起者是否有权限访问目标文件,而这一切就叫做安全上下文
安全上下文(进程的权限取决于用户的发起者的权限,而并非执行文件本身。)
SUID --仅对可执行文件设置(目标文件的所属用户是可执行文件自身的所属用户)
SGID --可执行文件设置 (目标文件的所属组是可执行文件自身的所属组)
–目录设置(对当前目录设置GID强制位,则当前目录下所有文件(-/d)的所属组都是当前目录的所属组
o+t --仅对目录设置(在一个公共目录,每个用户都可以创建文件,删除自己的文件,但不能删除别人的文件)  
特殊权限:u+s
suid:让进程不再属于它的发起者,而是属于程序文件本身。(suid只对二进制文件有效;调用者对该文件有执行权;在执行过程中,调用者会暂时获得该文件的所有者权限;该权限只在程序执行的过程中有效)
查找passwd的程序文件位置:which passwd
chmod u+s /usr/bin/passwd
查看进程信息:ps -ef
练习题:使用suid来实现普通用户可以查看密码文件
先找到查看命令的程序文件位置,which cat
sgid:g+s,对于普通文件,以组的权限执行修改/usr/bin/touch的g+s,touch文件后文件所属组为root(作用于普通文件时,和suid类似);对于目录文件,目录的属组是谁,在目录下创建的文件的属组是目录的属组。
练习题:创建共享目录/test,share组的用户对/test目录里的文件可读可写。
1、创建/test,修改属组为share
2、g+s 共享目录里面新创建的文件属组是share
3、umask 002修改权限掩码,使新创建文件权限为664
 
sticky,o+t:不能够删除其他用户在同目录里创建的文件,也无法修改其他用户创建的文件的内容,可删除修改自己创建的文件
 
 
ACL可以对某个文件设置该文件具体的某些用户的权限,意思就是通过ACL可以对一个文件权限做扩展,可以不同的用户对某个文件有不同的权限。
获取文件的访问控制信息:getfacl 文件名
sefacl 设置文件的acl
修改文件的acl:setfacl -m u:用户名:权限 文件名/目录名
setfacl -m g:组名:权限 文件名
setfacl -b 文件名
setfacl -x g:组名 文件名
 
 
 
磁盘管理:

linux里面硬盘根据硬盘接口的不同来命名:
IDE                        hd(a-d)
SATA/SCSI         sd(a-z)        
 
一块磁盘默认可被分为四个分区,这四个分区分别为主分区或者扩展分区,在扩展分区上可创建逻辑分区。
boot loader 开机管理程序:初始化硬件程序
df -h 查看磁盘分区情况
fdisk -l 查看分区列表
fdisk /dev/sda
partprobe 将分区信息加载到内核
mkfs.ext4 /dev/sda5 添加文件系统,即格式化磁盘
 
临时挂载:mount /dev/sda5 挂载点目录
mount 查看所有挂载的信息
mount -a 更新挂载信息
卸载:umount /dev/sda5        或        umount 挂载点目录
 
练习题:1、新建两个分区,它们的大小分别为1G,分别将它们挂载在/apple和/orange目录下。
2、添加一块10G的硬盘,如果我想将该硬盘暂时分为4个分区,同时还有其他的剩余容量可以让我在未来的时候进行规划,我应该如何分区?
3、我要将大小为5G的/dev/sdc划分为6个分区,我应该如何分区?
永久挂载:通过blkid命令查看分区的uuid
vim /etc/fstab
uuid 挂载点目录 文件系统格式 default 备份(0表示不备份) 检查(0表示不检查)
reboot重启虚拟机
 
 
 
 案例: 磁盘配额实验(磁盘使用限制)用户 组
1.关闭selinux
setenforce 0
systemctl stop firewalld
2.创建测试用户 hehe
3.创建逻辑分区,ext4并实现开机自动挂载
4.该分区支持quota操作
vim /etc/fstab
UUID=“23675f12-e603-4f9d-99f6-c31fa9f1f5e7” /mnt ext4 defaults,usrquota,grpquota 0 0
mount -a
或者: mount /dev/sda5 /mnt
mount -o remount,usrquota,grpquota /mnt
5.生成配置磁盘配置的数据库文件quotacheck -vug /mnt
6.指定用户添加磁盘限额:edquota -u UNAME
Linux磁盘限额的特点
作用范围:针对指定 文件系统(分区)
限制对象:普通用户帐号、组帐号
限制类型:磁盘容量(默认单位为KB)、文件数量
限制方法:软限制、硬限制
quota对文件系统的限制主要分为:容量限制或文件数量限制
限制inode用量:就是用户可以新建的文件数量
限制block用量:就是用户可以使用的磁盘容量,比较常见的限制方式
Disk quotas for user hehe (uid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 0 300 KB 500 0 4 6
7.开启所有磁盘限额:quotaon -a
创建指定大小的文件:
dd if=/dev/zero of=/mnt/aa bs=1K count=400
8.关闭磁盘配额
#关闭单个磁盘的磁盘配额
quotaoff /mnt
#关闭所有已经开启的磁盘配额
quotaoff -a
#反之,开启所有磁盘配额
quotaon -a
#如果不再使用磁盘配额,可以将配置文件也删除
rm -rf /mnt/aquota.*
#最后删除/etc/fstab中的自动挂载即可
umount /dev/sda5

作业题:
1.添加一块10G大小的磁盘,将该磁盘分为两个主分区,大小为1G、2G。将剩余的空间全部划分为扩展分区。划分一个逻辑分区,大小为3G。(主分区文件系统类型为ext4,逻辑分区文件系统类型为xfs)
2.将三个分区分别挂载到/donggua、/xigua、/nangua。
3.在第一个主分区中创建一个文件为file1,内容为this is partition1。在第二个分区中创建一个文件为file2,内容为this is partition2。在第三个分区中创建一个文件为file3,内容为this is partition3。
4.实现一个功能,当使用任何用户创建目录的时候,它的所属者为root。
5.创建一个目录为/exercise,在该目录下创建一个目录为red,实现一个功能:任何用户在red目录下创建文件的时候的所属组为redhat。
6.在exercise目录下创建一个目录为nochange,任何普通用户都只能删除自己在该目录下创建的文件,无法删除其他用户创建的文件。 
 
第五天
软件安装:
软件安装
(.rpm)
1.mount /dev/sr0 /mnt (本地获取/)
2.cd /mnt/Packages
rpm -ivh /mnt/Packages/tree-1.7…
3.安装–软件包名
4.卸载—软件名
5.手动解决依赖关系
rpm redhat package manager
-ivh        安装 v打印相关进度信息install–verbose–hash
-evh                删除
-qa                查询所有安装的软件包 ,一般在后面跟上管道符使用grep来过滤关键字
-ql                查看软件包释放的文件列表[Query list]
-qf                查看某个文件是哪个软件包释放的[Query File];
-Uvh 升级软件包–Update;
-qpi 列出软件包的详细信息
-Va 校验所有的RPM软件,查找丢失的文件[View Lost];
-e:删除包
-v verfiy 核对证实
-h hash 进度条
 
 
 
 
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat
以及CentOS中的Shell前端软件包管理器。基于RPM包管理,
能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,
并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
 
 
 
1.mount /dev/sr0 /mnt (获取软件包)
2.vim /etc/yum.repos.d/base.repo (定义yum仓库文件)
[base] 源标识 (表示仓库存在)
name=haha 源名称 (仓库命名)
baseurl=file:///mnt         (定义包的资源定位符/定义安装软件包的绝对路径)
gpgcheck=0 (关闭软件包公钥检查)
enable=1
3.yum repolist 查看仓库状态 本地4620 / 0 7.2
4.yum install 软件名 -y
5.yum remove 软件名 -y
yum clean all 清除yum缓存        
yum grouplist
yum groupinstall
 
本地源 内网源 互联网源

yum 会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all全部清除
[root@localhost ~]# cd /var/cache/yum/x86_64/7Server/base/
查看源标识、源名称、状态:yum repolist
安装软件:yum install
删除软件:yum remove
本地rpm软件包:localinstall
 
开启两台虚拟机本地 获取ip地址
=========内网源
服务端
yum install vsftpd -y
systemctl stop firewalld
setenforce 0
systemctl restart vsftpd
mount /dev/sr0 /var/ftp/pub
客户端
vim /etc/yum.repos.d/base.repo
内容为:
[base]
name=base
baseurl=ftp://ip/pub
enable=1
gpgcheck=0 是否进行数字签名检查,已防安装别篡改软件包
实现软件安装
第六天
tar文件的压缩与解压缩:
常见的压缩文件扩展名:
*.gz gzip程序压缩的文件
*.bz2 bzip2程序压缩的文件
*.tar tar程序打包的数据,并没有经过压缩
*.tar.gz tar程序打包的文件,其中经过gzip的压缩
*.tar.bz2 tar程序打包的文件,其中经过bzip2的压缩
 
linux上常见的压缩命令就是gzip与bzip2
压缩文件gzip: gzip 文件名(原文件不存在)
gzip -c 文件名1 >文件名1.gz (保留原文件)
 
解压文件: gzip -d 文件名.gz(不保留)
gunzip 文件名.gz
gzip -cd 文件名2.gz >文件名2(保留原文件)
 
查看压缩过的文本文件内容:zcat 文件名.gz
压缩文件bzip2(用法同gzip):bzip2 文件名
bzip2 -c 文件名1 >文件名1.bz2(保留原文件)
解压文件: bzip2 -d 文件名.bz2(不保留原文件)
bunzip2 文件名.bz2
bzip -cd 文件名2.bz2 > 文件名2(保留原文件)
查看压缩过的文件内容:bzcat 文件名.bz2
 
 
文件的归档即打包文件:tar [主选项+辅选项] 文件或目录
主选项:只能出现一个主选项
c— create 创建一个新归档文件
x— 从归档文件中提取文件出来
t— 列出归档文件的内容,查看已经打包了哪些文件,重点在查看文件名

辅选项
z—通过gzip的支持进行压缩/解压缩,一般格式为*.tar.gz
j— 通过bzip2的支持进行压缩/解压缩,一般格式为*.tar.bz2
v— 归档或解包过程中显示被打包的文件
C—这个参数用在解压缩时,若要在特定目录解压缩,可以使用这个参数
f— 输出结果到文件,必须写该选项
–exclude FILE:在打包的过程中,不要将 FILE 打包! --排除某个文件打包

两种压缩方式:jcvf                zcvf
打包、压缩文件1和2并重命名:tar zcvf 新文件名 文件名1 文件名2 文件名3 文件名4
解压:tar xvf 文件名 该命令会自动判断归档文件的压缩格式,自动调用相关程序进行解压缩        
解压到指定路径:tar xvf 文件名 -C 目标路径
tar -xjv -f filename.tar.bz2 -C 欲解压缩的目录
查看已压缩文件:tar tf 文件名
 
练习题:
1.将/etc/passwd文件中ntp用户的信息写入root用户家目录下的file1文件中,将sshd用户的信息写入root用户家目录下的file2文件中。
2.将file1和file2文件打包并以bzip2的方式压缩为ff.tar.bz2。
3.保留ff.tar.bz2文件并将其解压到redhat用户的家目录下。
》》源码安装 
源码安装: tar tree
gcc
配置configure(预编译过程) 编译make安装make install

#yum install gcc*在配置之前要保证我们的编译器完整才可以进行配置,配置完成后进行编译,编译好进行安装
#mkdir /test
源码安装(配置(configure),编译(make(GNU compiler Collection 编译器集合)),安装(make install))
[root@haha test] #tar -zxvf tree-1.7.0.gz
[root@haha test] #cd tree-1.7.0
[root@haha test] #make install
[root@haha test] #tree / -----测试
[root@haha test]#tar zxvf tar-1.29.tar.gz
tar备份
[root@haha test]#mv /usr/bin/tar /usr/bin/tar.bak
[root@haha test]#cd tar-1.29
[root@haha test] s u r e d h a t [ r o o t @ h a h a t e s t ] su redhat [root@haha test] suredhat[root@hahatest]./configure 配置 预编译根据当前环境生成编译配置
[root@haha test]$exit //退出redhat用户保证用户是root
[root@haha test]#pwd /test/tar-1.29
[root@haha test]#make install
[root@haha test]#hash -r
[root@haha test]#rm -f tree-1.7.0
[root@haha test]#tar -zxvf tree-1.7.0.gz
tar工具可以再次执行
在root用户下进行。./configure配置时的错误
configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check)
See `config.log’ for more details
配置:错误:您不应该以root身份运行配置(在环境中设置强制不安全配置=1,以绕过此检查)

》》网络管理:
第一种:
alias vimnet="vim /etc/sysconfig/network-script/ifcfg-eno
更改配置文件
TYPE=Ethernet
BOOTPROTO=none/static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPADDR=172.16.50.200
PREFIX=24
GATEWAY=172.16.50.254
DNS=114.114.114.114
ONBOOT=yes
“/etc/sysconfig/network-scripts/ifcfg-eno16777736” 16L, 287C
第二种:nmcli
1.如何添加一个网络设置
#nmcli con edit eno16777736
>goto ipv4
>set addresses 172.16.40.3/24
>set gateway 172.16.40.2
>save
>quit
启用网卡
[root@haha rhel7.2]# nmcli connection modify eno16777736 connection.autoconnect yes

	启用某个会话
		#nmcli con up work
	-------------------------连接
		activate eno16777736
	2.如何更改网络配置
		nmcli con mod eno16777736 ipv4.addresses "192.168.0.200/24 "
		nmcli con mod eno16777736 ipv4.gateway 192.168.0.1
		Nmcli con mod eno16777736 ipv4.dns 8.8.8.8
	3.设置多会话的网络
		添加会话
		[root@localhost ~]# nmcli connection add type ethernet con-name home ifname eno16777736
		[root@localhost ~]# nmcli connection add type ethernet con-name work ifname eno16777736
		
	设置 ip 地址信息
		nmcli connection modify home ipv4.addresses "172.16.40.1/24 "
	更改 ip 地址获取方式(静态)
		nmcli connection modify home ipv4.method manual
	Dhcp 方式设置
		nmcli connection modify work ipv4.method auto 
	启用某个会话
		#nmcli con up work	
		
重启
#systemctl restart network

[root@localhost ~]# nmcli connection modify eno16777736 ipv4.addresses 192.168.200.150/24
[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.200.100/24
[root@localhost ~]# nmcli connection modify eno16777736 ipv4.method manual
[root@localhost ~]# nmcli connection up eno16777736
4.图形工具 nmtui
5.图形工具nm-connection-editor源码安装:
综合练习:搭建论坛
#停止防火墙
systemctl stop firewalld
#关闭SELINUX
setenforce 0
#挂载光盘镜像
mount /dev/sr0 /mnt
#安装php
yum install php* -y
#安装httpd服务
yum install httpd -y
重启httpd
#安装数据库
yum install mariadb -y
重启mariadb
初始化数据库
mysql_secure_installation
#创建数据库
mysql -uroot -predhat
create database luntan;
show databases;
quit/exit
#重启两个服务
systemctl restart mariadb
systemctl restart httpd
#复制并解压论坛源码
mv Discuz_X2.5_ /var/www/html
cd /var/www/html
unzip Discuz_X2.5_
修改权限:
cd /var/www/html/upload
chmod 777 config/ data/ uc_* -R
(-R表示递归修改)
#通过页面进行访问并安装
在ie浏览器输入虚拟机IP地址/upload


  1. q ↩︎

  2. 0-9 ↩︎

  3. qf ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值