raingray Blog - 2018年2月
type: channel
link: https://www.raingray.com/2018/02/
description: 一个念想，一群散人。
items: i春秋-真的很简单 Writeup
items: Linux - 硬盘结构与链接文件
items: Linux - 认证机制 nsswitch 和 PAM
items: MySQL 数据库-基础操作
items: Linux - 权限介绍
items: 两个人的尴尬
items: Linux - 用户与用户组管理
items: Linux - 常用命令与根文件系统
items: Linux - Shell 特性与 man 文档
items: Linux - 初识 Linux

i春秋-真的很简单 Writeup
type: item
date: 2018-02-26T12:19:00+00:00
description: 第一次接触CTF这种东西，看到老大发了一个CTF连接，想尝试一下。拿到手看了看这有点像 PHP 代码，这个 if 判断优先计算1000-778 < ?，左边等于222，小于右边的谁?问号的地方只能输入一个字符?把 maxlength 值改一下，或者去掉，输入比 222 大的数字(估计PHP做了if，不能输入其他字符)得到flag。打算这周从 ichunqiu 的练习入手，先来看看界面。左上角提示有几个实验工具供我们使用，菜刀、net.exe、dedeCMS，按照提示先去下载需要的工具直接使用提供的工具进行爆破我们已经得到帐号密码，但是密码已经加密，而且长得很奇怪(在这里已经跌过几次)，先来了解一下 dedecms 密码加密方式$password = $row['pwd']; $pwd = substr($password, 5, 20);它采取 md5 加密(从网上搜索来看好像是 32 位)，这段 PHP 代码使用字符串截取函数，返回第 6 位开始长度为 20 位的字符串(第一位是从 0 开始数而不是 1)。拿我们的密码来解释一下 abab29e084ff095ce3eb，这是经过函数处理后的密码，也就是说他的前面还有 6 位被截掉 xxxxxxabab29e084ff095ce3ebxxxxxx(我们用x代替被剔除字符串)，从第6位开始为第一位取到第20位停止那么就是我们现在的密码abab29e084ff095ce3eb。我们知道了加密方式后怎么解密？它的方法是前面减去 3 位，后面减去 1 位。现在剩下 16 位的 md5 就可以拿去解密了，下面是另外的情况做个补充。dedecms首先获得某密码的32位MD5加密值,然后去掉后面8位,这 样,拿剩下的24位来做为密码的加密值.这里我们可以想到,32位转16位可以把32位的前8位和后8位去掉,剩下的中间就是其16位的加密值,于是,我 们可以把dedecms中暴出来的那窜24位加密值的前8位去掉,剩下的16位就可以拿去破解了接下来我们只需要找到后台让马儿奔跑起来。扫了下后台没有发现入口网上搜索了一下 dedecms 爆后台得到以下信息/robots.txt/data/admin/ver.txt/data/mysql_error_trace.inc/data/mysql_error_trace.inc 爆出来补robots.txt 是无望了，搜到一篇文章：有了用户名和密码，但是不知道后台地址，如何找后台路径？dedeCMS漏洞：mysqli_error_trace.inc 文件里会残留后台路径。dedeCMS目录中的data/mysqli_error_trace.inc文件，是记录数据库出> 错信息。一般是用于网站存在错误，系统自动记录在该文件中，进一步说，就是> 该文件是记录sql错误信息的文件，类似于日志功能，关键是它会记录后台路径。我想是不是数据库进行连接的拓展更换了所以文件名不一样本扩展自 PHP 5.5.0 起已废弃，并在自 PHP 7.0.0 开始被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之用我们解出来的密码登录。找到一个上传点，为了安全一般默认是不能让你上传其他文件的，admin 管理员应该有权限进行修改配置。看来不做处理真的无法上传，上传有个提示，可以让我们的马儿开心起来。直接用菜刀连接传一个 cmd 上去用传的 cmd 连接访问桌面上的flag文件居然会拒绝访问(没有权限)用whoami查看一下当前账户(system账户待补充)拒绝访问应该是权限不够，用 cacls filename 查看一下权限应该是可以设置的 cacls 不知道怎么用，后面跟个 /? 查看一下帮助文档cacls filename /G system:F 可以修改权限但是需要确认，shell 中无法输入 Y 这就很尴尬了，百度了方法，可以不用输入确认。先用 cacls filename /E /G system:F编辑 ACL 进行授权。授权成功读取 flag其他方式待补充参考资料：dedecms解密dedecms寻找后台WriteupWriteup2Cacls无需确认的正确写法

Linux - 硬盘结构与链接文件
type: item
date: 2018-02-22T12:58:00+00:00
description: 目录[TOC]硬盘结构我们这此写的是机械硬盘。来看看构成把，磁盘结构由盘片（Platters，有磁性），轴，马达，磁头（Heads）组成。硬盘数据存贮在盘片（Platters）中。由磁头（读写头）读写数据。每个盘(碟)片，都有两面，一般4个盘片，0-7 面 共 8 面可用，双面进行存贮数据，因此也会相对应每盘片有 2 个磁头。当磁盘旋转时，磁头若保持在一个位置上，则每个磁头都会在磁盘表面划出一个圆形轨迹，这些圆形轨迹就叫做 磁道-A（Track，以轴为中心组成的同心圆），数据就存在两条线之间，整圈磁道分为多段每段叫 扇区-C（Sector），不同盘片上相同编号的磁道组成 柱面-B(Cylinder扇面)，D：簇（扇区组）。盘片是高速旋转时，磁头伸缩(悬浮在盘片上)读取数据，在旋转同时读取AB两个数据时，磁头不一定就刚好停在 A，那么就要等待下一圈，这叫磁盘延时也称寻道时间或寻址时间。那盘片旋转越快磁盘延时就越小，读取数据越快，一般台式机 7200/S，笔记本 5400/S。运行状态 视频引用自维基百科 https://upload.wikimedia.org/wikipedia/commons/c/c5/HardDisk1.ogvMBR（Master Boot Record）主引导记录，位于0 磁道 0 柱面 1 扇区，共 512Byte，由三部分组成，第一部分 446Byte 的 boot loader(启动加载器，存放引导代码)，第二部分 64Byte 的磁盘分区表，每个分区占据 16 字节，第三部分 2Byte 的 magic number，用于检查 MBR 是否有效。在存贮数据的时候，一般把经常读取的数据放到最外围磁道，磁盘分区表共64字节，每个分区占据16字节，主分区：主分区+扩展分区只能 <=4，扩展分区：占用16字节空间，并且值能有一个，扩展分区是一个指针，指向磁盘另外的位置，不能直接存储数据，如果要想存储数据，需在扩展分区上建立逻辑分区，逻辑分区可以有多个。低级格式化：高级格式化：文件系统：可以理解成一种软件。block/inode/super block 和链接文件block：block 是记录文件内容的那个区域(位置)，ext3 文件系统中每个 block 默认大小 4K文件系统：软件(XFS,NTFS,FAT,EXT3,EXT4等)，存贮数据或文件的一种格式，文件系统不存在分区之上，它位于磁盘的某一个位置。文件系统把分区分割成两部分，第一部分存放元数据(metadata)，另一部分存放真实数据。元数据和数据本身没有关系，包括的是数据属性，比如数据归属，数据权限，数据时间戳。这块区域叫 inode(index node)，这些信息也在元数据中占据空间大小，它不包括文件名，每个 block 都有对应的 inode，同一个 inode 可以指向多个文件。磁盘工作原理：存贮数据的时候会对每一个 block 进行扫描，如果数据量大了速度就非常慢。在元数据区域内有一个 block bitmap 区域，用于标记 block 是否被使用，使用了把某一位标记成1(不是整个数据块)，没使用标记成 0，这样就不用去遍历数据块了。super block(超级块)：管理元数据区域内的其他区域删除文件：把数据对应的 inode 和 block 变成 0，实际数据并没删除，但原有 inode 和 block 被覆盖或使用了则无法恢复。新建文件：寻找一个没被使用过的 inode 值和 block，把数据填充进来(占位)，block 会准备多于实际情况所占用的 block，防止磁盘碎片的产生(碎片会使硬盘执行能够降低计算机速度的额外工作)。复制文件：建立新文件移动文件：改变 inode 和 block 的值，不对数据操作。链接文件：分为软连接(符号链接)与硬链接(hard links)语法：ln [options] src_file des_file 选项：-s，创建软连接，不加选项为硬链接-v，显示详细过程先 touch 一个文件 1.txt，可以看到默认硬链接次数为 1，inode是 16797806。用 ln 给 1.txt 个硬链接。做硬链接过程中不会对数据进行改变，硬链接过后操作 A.txt 就相当于操作 1.txt，当然操作 1.txt 也是同理(它们 inode 相同)。如果你不小心删掉了 1.txt 源文件也没事，目标文件 A.txt 还在(还有其他文件指向那个 inode，inode 存在，block 也就存在)。inode 还是一样(指向同一个节点)硬链接次数为 2，硬链接的目标文件不会占用磁盘空间，硬链接有限制：不能跨文件系统(指向一个 inode 节点)，只能对文件链接不能链接目录。来看看软连接软连接时要记得要使用…

Linux - 认证机制 nsswitch 和 PAM
type: item
date: 2018-02-18T07:50:00+00:00
description: 目录[TOC]nsswitch我们知道用户登录时会把用户名转换为 UID，怎么转的？今天来了解一下。在 Linux 中有三种认证机制称之为 3A：authentication，认证机制，资源申请者证明自己本身的一个过程authorization，授权机制，用户是否可以访问一个服务或文件，用户访问服务或文件的能力audition，审计机制把字符解析成数字或把数字解析成字符这种过程叫 名称解析。解析用户名和密码会用到 /etc/passwd 文件，解析网址会用到 DNS 或 /etc/hosts 文件，在 Web 中进行登录使用到数据库(db)、ldap(轻量级目录访问协议)。那在 shell 里输入 passwd 命令它怎么找到 /etc/shadow 文件，应用程序会去调用 nsswitch(name services switch) 对应的库，它的配置文件在 /etc/nsswitch.conf来看看它的语法：info:methodaction methodactioninfoautomount 自动挂载（/etc/auto.master和/etc/auto.misc） bootparams 无盘引导选项和其他引导选项（参见bootparam的手册页） ethers MAC地址 group 用户所在组（/etc/group） hosts 系统信息（/etc/hosts） networks 网络信息（/etc/networks） passwd 用户信息（/etc/passwd） protocols 协议信息（/etc/protocols） publickey 用于安全模式下运行的NFS rpc RPC名称和编号（/etc/rpc） services 服务信息（/etc/services） shadow 映射口令信息（/etc/shadow）methodfiles：搜索本地文件，如/etc/passwd和/etc/hosts nis：搜索NIS数据库，nis还有一个别名，即yp dns：查询DNS（只查询主机）activestatusnotfound：方法已经执行，但是并没有找到待搜索的值。默认的动作是continueSUCCESS：方法已经执行，并且已经找到待搜索的值，没有返回错误。默认动作是return。UNAVAIL：方法失败，原因是永久不可用。举例来说，所需的文件不可访问或者所需的服务器可能停机。默认的动作是continue。TRYAGAIN：方法失败，原因是临时不可用。举例来说，某个文件被锁定，或者某台服务器超载。默认动作是continue。也就是说除了成功return，没有找到都continueactionreturn：返回到调用例程，带有返回值，或者不带返回值。continue：继续执行下一个方法。任何返回值都会被下一个方法找到的值覆盖。搜索顺序如果你想优先查找谁，就尽量往左放，左边优先级大于右边。前面介绍完语法了来看看几个例子吧# Example: #passwd: db files nisplus nis #shadow: db files nisplus nis #group: db files nisplus nisdb files nisplus(nis增强版，是 sun 公司商业软件) nis（network infomation service，一个开源软件），表示从这些文件中从左向右寻找，也就是它的方法，语法中的 action 是对 method 的返回状态的响应。怎么找到相应的 files/service/db？libnss 库（.so）帮我们完成，在 /lib64/ 中我们要查看这些 .so 文件，要用 readelf 命令加上选项 -a(查看所有)关于域名解析成 ip，第一个是 files，会在 host 文件当中会优先寻找 /etc/hosts，从左向右进行寻找，找到即停止 return 值找不到则继续向右寻找，全部都找不到返回 myhostname。#hosts: db files nisplus nis dns hosts: files dns myhostname这是另一种语法，当中的 #services 是 info，nisplus 为方法， [NOTFOUND=return] 表示对前一个方法的响应，如果 stat 为 notfound 就继续向下查找，files 表示方法PAM 验证在登录时调用 login 应用程序再交给 PAM 嵌入式认证模块进行验证。PAM 它本身不会执行验证，需要借助策略和模块来验证，我们用 ldd Service_Path 来看它所需要的库，有的话说明它支持 PAM。[root@localhost ~]# ldd /usr/bin/log…

MySQL 数据库-基础操作
type: item
date: 2018-02-14T03:36:00+00:00
description: 目录[TOC]简介注释#，这是单行注释，并不是所有dbms都支持-- ，这是单行注释(-- 后面有个空格)/*这是多行注释*/大小写问题：在 Liunx 语法中区分大小写，windows 相反。select distinct 列名 from 表名 #distinct 表示从这一列中找出不同的数据(去重)group by 列名 #用于查询后数据分组，加入有11、22、11、三条数据 我们查询进行 group by后就会分为 11、22。select * from users where name=(select name from users wherer fight=80)# 括号内是子查询，查询的结果交给name使用DDL-增创建数据库create database 库名 可选项; #创建名为user的数据库、可选项示范：create database db_name charset utf8; #在创建数据库时指定编码方式 创建表create table 表名 ( 字段名称1 字段属性(类型) 字段选项, 字段名称2 字段属性(类型) 字段选项, .... ..... ..... .... )charset=utf8 engine=Myisam; --在表后面加上字符集与引擎字段：是对数据的说明，一个归类。字段类型：这个字段存储的是什么数据，在创建表示要指定好字段选项：设置字段一些选项，是否可以为空、是否是主键、是否是唯一键、是否加备注等。null | not null，是否可以为空default，是否有默认值auto_increment，是否可以自动增长，值必须是数字才行， 如：给数据一个编号，数据内容可以重复编号不能重复，缩小范围方便查找primary key，设置主键，数据内容不能重复，在查询数据中作为主查询条件，一张表中一个主键，一般是IDunique [key]，设定为唯一(键)，及表中所有行的数据在该字段中的值不能有重复comment，设置备注，给当前字段设置说明信息字段和表名取名多个单词之间用下划线做分隔符。字段类型数值型：存储的数值大小不一样tinyint、smallint、inttinyint带符号的：-128到127tinyint无符号：0-255smallint带符号的：-32768到32767tinyint无符号：0-65535int带符号的：-2147483648到2147483647int无符号：0到4294967295(40亿)字符串：char，最大长度 255varchar，最大长度 65532text，无限制char 和 varchar的区别：定长型和变长型char：定长型，固定长度了，如：char(30)最大存储30的长度，如果没有写到30长度的数据其他的空出来的位置用空格补齐，写入数据超出定义长度只取定义时长度位数超出部分忽略。varchar：变长型，可以变化长度，如：varchar(30)，最大存30长度，没写满30你写多少就存多少，超过30超出部分忽略。日期时间data，支持的范围'1000-01-01'到'9999-12-31'datetime，支持的范围'1000-01-01 00:00:00'到'9999-12-31 23:59:59'向表里添加数据向表里添加一行数据insert into 表名[(字段名1,字段名2,.....)] values(值1,值1,....);向表里添加多行数据(添加数据时值与字段名是一一对应的)insert into 表名[(字段名1,字段名2,.....)] values(值1,值1,....),(值1,值1,....);删删除数据库drop database xxx;导入数据库登录到数据后执行 srouce 命令。MariaDB [(none)]> source /data/xxx.sql删除数据delete from 表名 [where 条件] [order 排序] [limit 限定] truncate table 表名 #删表内所有数据 where #条件必须添加，否则删除所有数据，建议id，原因id唯一性，删除大范围数据 order by #当前表倒序还是正序，默认就升序，降序为 order by desc。 limit #限定范围可选项示范：delete from 表名 where id=1; select * from 表名 order by 字段 desc limit 0,5;注意：delete删除后会把删除的ld号保留，不在让其他数据占用，truncate 删除相反。删除字段alter table 表名 drop 要删除的字段名;DQL-查查询数据库show databases; #显示所有数据库 show create da…

Linux - 权限介绍
type: item
date: 2018-02-13T13:15:00+00:00
description: 目录[TOC]简介权限可以用来限制某些其他用户的行为，对于属主和 root 这俩账户来看想怎么操作怎么操作，不受限制！这点一定要清楚。在前面学习 ls -l 认识过权限位，2-4位：文件属主权限(owner 所有者)5-7位：文件属组权限（group 所属组），8-10 位：其他用户权限（other 其他非本群组用户）在这里的关于文件 r 是指读取权限，可以用相关命令来查看文件的内容，w 指写权限，可修改文件内容（其他人没有删除此文件权限），x 指执行权限，这个文件能不能被当作可执行文件或脚本来运行。目录中 r 是指可以查看目录中有哪些内容比如执行 ls 命令，w 可以修改目录中内容(文件或目录等)，x 表示这个目录能不能进入，比如可以执行 cd 命令，读取/修改目录下文件内容必须先进入这个目录才能操作。--- 这种符号表示没有权限，在系统中使用二进制(10进制也是000) 000 数字表示，如果有权限中二进制表示为 1(rwx=111)，其十进制表示为 r=4、w=2、x=1。来试试分析下面着张图怎么表示权限，用前面介绍的十进制做加法，第一条文件属主 root 权限是 rw- 换算成二进制=110(十进制=6)，属组和其他用户都没有权限。来看第二行，rwxr-xr-x 属主权限是 rwx，换为二进制是 111(十进制=7)，属组二进制是 101(十进制=5)，其他用户二进制是 101(十进制=5)。第三行 rwxrwxrwx 属主权限是 rwx 二进制为 111(十进制=7) 属组和其他用户都是 7，很简单吧。权限设置更改属主与属组chown username filename，chown 就是 change owner，用于改变文件的属主。-R，递归更改文件属主和属组(连同文件夹和内容一起更改)--reference，复制一个对象属主和属组的属性到目标文件或目录这里的 --reference 选项会将一个对象的归属复制到另一个对象上，注意它不会复制权限只复制归属。要单独修改属组在组名前面添加点或冒号 chown .groupname filename要想同时修改属主和属组可以 chown username:groupname filename(使用.也可以)，点前面留空。单独修改属组chgrp groupname filename-R，递归更改文件属组(连同文件夹和内容一起更改)--reference，复制一个对象属组的属性到目标文件或目录修改文件或目录权限chmod [augo] [+-=] [rwx] fileNamea，(所有用户)、u(文件属主)、g(文件属组)、o(其他用户)+，(为用户添加权限)、-(为用户减少权限)、=(为用户赋予权限)-R，递归更改文件属主和属组(连同文件夹和内容一起更改)示例：chmod u=rwx,go= ./root/a.txt为当前属主添加 wrx 权限，g 是属组，o 是其他用户，留空等于没有权限，多个选项添加用逗号隔开(同时对两个文件或目录请用空格隔开)。知道了前面权限数字的转换现在就用起来，如果想把属主设置为 rwx 属组和其他用户没有权限我们可以用 chmod 700 a.txt，这样就当前属主就有了 rwx 权限，属组与其他用户没有权限读写执行(对于 root 用户普通权限限制对它无效)。一个个手动设置太麻烦，可以用 -R 批量对某个目录包括下面所有文件设置权限，这里 -R 把 test 目录包括下面的文件的权限全部变成可读写。默认权限图中目录默认权限是 755（具有执行权限比如用 cd 命令），文件默认权限是 644（没有执行权限），这个默认权限是由 umask(反掩码)来决定的，反掩码在 /etc/logoin.defs 文件中定义# The permission mask is initialized to this value. If not specified, # the permission mask will be initialized to 022. UMASK 077如果没有手工指定反掩码，权限掩码默认初始化为 022。我们在shell中输入 umask 就能查当前的反掩码啦。这里的 umask 后面跟上数值也可以更改 umask numeric 更改过后按照新的反掩码进行计算。直接来看个实例。新建文件它是这样计算的，默认权限掩码 666 减去默认反掩码 022 就是644(rw-r--r--)-rw-r--r--. 1 root root 0 3月 24 21:04 mask.txt [root@localhost ~]# umask 0022目录的默认权限掩码是 777，减过反掩码后是 755(rwxr-xr-x)。drwxr-xr-x. 2 ro…

两个人的尴尬
type: item
date: 2018-02-06T07:18:00+00:00
description: 进行交谈，随着双方话语停息慢慢安静下来，你一句我一句的客套，这让我有些不适应，可能太久不见有些陌生。

Linux - 用户与用户组管理
type: item
date: 2018-02-06T05:18:00+00:00
description: 目录[TOC]用户介绍Linux 是多用户、多任务的系统，这就涉及到权限的问题了，像电影里的一些门禁系统只有一些大 boos 才能进入对吧，那此时大 boos 就具有操作这个门禁的权限了其他人则没有，那权限其实就是用户对相关应用的控制能力(权限隔离机制)。这么多用户 Linux 是如何区分的？在 Linux 中使用 UID(user id) 来标识。当有多个用户想对某个文件拥有 x 同权限，那么可以给它们分配到同一个组里(逻辑容器 组就是用来包含用户的)，组也同样有id标识叫GID(group id)。用户分类：UID=0，管理员用户UID=1000-65535，普通用户，在有些系统可以支持到四亿多个用户UID=1-999，程序/系统用户组分类：管理员组/普通组基本组：Linux 中新建用户时，没有指定隶属于的组，系统会为这个用户建立一个同名的组，作为该用户的基本组。附加组：方便给用户添加权限我们知道计算机处理数字的能力比处理字符串快，我们刚好刚好相反，那我们在登录系统时输入的用户名会被 Linux 解析成 UID，在系统有这一系列的数据库，像 /etc/passwd 中存放着用户基本信息、/etc/shadow 存放用户影子口令、/etc/group 存放组基本信息，下面来看看这些文件的作用。与用户相关的配置文件/etc/passwd第一列：是用户名第二列：账号的口令，x 代表占位符，实际上加密过了，口令保存在 /etc/shadow 文件中第三列：UID，用户 id 标识号第四列：GID，组标识号第五列：用户描述信息，注释说明。第六列：用户宿主目录或者叫家目录第七列：默认使用的 shell/etc/shadow第一列：是用户名第二列：加密后的密码，当设置为 !! 就暂时无法登陆系统。第三列：最后一次更改密码的时间。第四列：账户多少天内不可以更改密码，为 0 表示没有限制。第五列：表示密码到期，到达指定多少天后必须更改密码，留空表示没有限制，默认为 99999。第六列：假如设置成 5，那么密码到期前倒数 5 天会警告用户密码还剩 5 天即将过期，留空或 0 表示没有限制。第七列：密码到期过后再宽限多少天，留空表示没有限制，到宽限日期用户不允许登录。第八列：到期的时间，时间一到用户就不能够登录，留空将永远不过期。第九列：没有作用，保留以后使用。第二列是密码，格式是 $id$salt$encrypted，它由三部分组成用 $ 隔开，第一部分为加密算法由数字指明加密算法：1，标识为 MD5 加密，已经被破解不安全。2，Blowfish 加密。2a，Blowfish 加密。5，SHA-256 加密。6，SHA-512 加密。第二部分是随机序列号，第三部分是随机序列号和密码共同加密后的字符串，类似签名。加密算法分为对称加密和、对称加密和单向加密三种，对称加密也就是加密和解密都是使用同一把钥匙，非对称加密加密和解密使用不同的秘钥(公钥与私钥)，单向加密散列加密用于提取数据的特征码，常常用来校验数据完成性，它不可逆其次是定长输出(有规定长度)，比如有 md5 是 128 位定长输出（128 指的是 2 进制，通常用 16 进制来表示），sha 是由 160 位、224 位、256 位、384 位、512 位，加密后的数据只要改动就会引起结果（特征码）的巨大变化。/etc/default/useradd创建账户默认值的一些信息，后续可以修改。第一行：可以创建普通组第二行：普通用户宿主(家)目录，会在 home 下生成与用户同名的目录，作为用户宿主目录。第三行：是否开启用户过期停止使用权(过期的宽限期限)，-1 代表不启用，如果写了整数代表用户过期后还可使用 x 天。第四行：设定过期时间，格式：2018027第五行：设定用户的默认 shell第六行：新用户宿主目录模板目录第七行：是否为用户启用邮件通知功能/etc/skel用户宿主(家)目录模板目录，只对新建用户生效。在新建用户后会复制 /etc/skel 目录中的文件到新建用户的宿主目录中。.bash_logout #用户注销时执行的命令 .bash_profile #用户登录系统时执行的命令(用户变量) .bashrc #用户登录新shell时执行的命令/etc/login.defs关于密码的一些限制是在这个文件配置的MALL_DIR /var/spool/mail #用户系统邮件存放目录 PASS_MAX_DAYS 9999 #密码最长使用期限 PASS_MIN_DAYS 0 #最短使用期限(至少使用x天才可以更改密码),0代表不受限制 PASS_MIN_LEN 5 #密码最小长度 PASS-WARN_AGE 7 #密码过期前的警告时间(如果密码最长使用时间是30天,这个会在到期前7天发…

Linux - 常用命令与根文件系统
type: item
date: 2018-02-03T04:32:00+00:00
description: 目录[TOC]目录与文件管理mkdirmkdir，make directory(创建空目录)-m，创建目录同时设置权限-p，递归创建新目录-v，显示创建目录的过程-p 示例# 父目录不存在也会被创建 mkdir -p /test/dir1 # 同时创建两个目录 mkdir -p /test/{dir1,dir2}rmdirrmdir xxx，删除xxx目录，不过只能删空的目录，无法删除嵌套目录，换句话说就是目录里不能有任何文件和其他目录ls，list的简写用于列出目录：-l(--long)，以长格式显示属性-h，为文件大小添加单位(显示文件大小带上大小单位)-a，显示目录下所有文件(包含. .. 以.开始的隐藏文件)-A，与-a相同，但是不显示.与..-R，递归显示目录中的内容(会显示子目录中的内容)-r，逆序显示目录内容(默认用ls查看会以26个字母的顺序进行排列，用-r刚好相反)-i，打印这个file的index node值-d，只列出目录lsls -l 文件属性详解-rw-r--r--. 1 root root 1648 oct 14 14:16 initial-setup-ks.cfg 第一位：-，代表普通文件(file)d，代表目录(directory)b，块设备(block)比如硬盘、u盘等c，字符设备(char)键盘鼠标打印机等s，套接字文件(socket)用于进程之间的通信p，命名管道(pipe)l，符号链接文件(symolic link file)第二到十位：权限位(rwx：读写执行)234位，文件属主权限(owner 所有者)567位，文件属组权限(group 所属组)8 9 10位，其他用户权限(other 其他非本群组用户).：文件或目录中使用了SELinux content属性是一个点，如果用了ACL(访问控制列表)是+1：代表文件硬链接的次数第一个root：代表文件属主(owner)第二个root：代表文件属组(group)1648：文件的 byte 大小oct 14 14:16，文件最后被访问的时间戳（stat 命令查看文件时间戳），文件的时间戳：Access，访问的时间戳Modify，文件被修改时间戳(修改文件数据：添加删除数据等)Change，文件被更改时间戳(更改文件属性)initial-setup-ks.cfg：文件名在shell里输入外部命令他们是如何查找到的？环境变量：内存中的命名空间PATH变量：存放系统命令路径，以冒号隔开。查看PATH变量：如果在以上路径中没有找到相关命令(该命令是外部命令)，提示用户command not found，一个命令在以上多个路径中存在，系统会按照从前往后的顺序查找，找到即停止向后查找。hash 查看命令缓存及命中率(一个命令如果执行成功就记录下执行成功的次数与路径，下次查找就优先查找，查找缓存的速度比重新搜索的速度快)treetree，以树状格式列出目录的内容。(tree = ls -R 显示样式不同)cdcd，切换目录(change directory)，cd 不加选项，切换当前用户的宿主目录：-，返回到上一次的工作路径~username，切换到username用户的宿主目录，不指定用户名就是当前用户pwdpwd，打印当前所在的工作目录(print working directory)filefile，查看文件类型，在 Windows 是用拓展名识别文件类型，Linux 就要靠 file 命令，任何文件都可以用 file 查看。语法：file [options] [args]常用选项：-b，显示结果时，不显示文件名-c，显示执行file命令的执行过程(file是如何去判断文件类型)，便于排错或分析file命令执行过程-i，输出MIME类型的字符串-z，显示压缩文件的内容-L，查看软连接对应文件的类型-f，查看文件中文件名的类型dudu -h，查看文件大小cat查看文本文件内容cat，一次查看文件所有内容(跳到文件结尾)语法：cat [options] [args]常用选项：-n，显示文件内容同时显示行号，包括空行-b，和-n功能相同，但不包括空行-S，当文件中有多个空行时，合并为一个空行-E，在显示内容时，结尾添加$符号新建新文件：cat > new_file_name << EOF //EOf:end of file > 内容1 > 内容2 > 内容3 > EOF #结束书写向现有文件中追加数据：cat >> file_name << EOF >内容1 >内容2 >内容3 >EOF把多个文件的内容合并到一个文件：cat file1 file2 > new_file_nametac，与 cat 显示相反，第一行在下面最后一行在上面moremore，…

Linux - Shell 特性与 man 文档
type: item
date: 2018-02-03T02:40:00+00:00
description: 目录[TOC]shell 特性命令历史Linux 会自动记录系统过去执行的命令，并保存在内存的缓冲区中（内存数据在重启后会消失）。在每个用户的 home 目录下，有个隐藏文件 .bash_history 保存当前 Shell 执行的命令历史，当用户正常退出当前 Shell 时，当前 shell 中运行的命令才会保存到此文件中。这个文件你可以直接读取，也可使用 history 查看执行过后的 Linux 命令历史。[root@VM-24-2-centos ~]# history | tail -n 30 1 2022-04-13 13:31:08 ls 2 2022-04-13 13:36:02 cd ..ls 3 2022-04-13 13:31:04 tmux a 4 2022-04-13 13:36:06 ls 5 2022-04-13 21:50:44 mysql -u root -p 6 2022-04-13 21:53:45 mysql -u root -p 7 2022-04-13 21:54:24 mysql -u root -p 8 2022-04-13 21:54:28 mysql -u root -p 9 2022-04-13 21:56:09 mysql -u root -p 10 2022-04-25 18:06:12 vim 1.php 11 2022-04-25 18:07:50 php 1.php history -w 可以将命令历史保存在某个文件中，方便后续查看。[root@VM-24-2-centos test]# history -w history_commend.txt [root@VM-24-2-centos test]# ll -h total 52K -rw------- 1 root root 49K May 19 22:44 history_commend.txt要是想清空历史命令你可以直接删文件，也能用 history -c 清空。[root@VM-24-2-centos test]# history 1 history 2 tests 3 test 4 history [root@VM-24-2-centos test]# history -c [root@VM-24-2-centos test]# history 1 historyhistory -d 选项可以删除某一条命令历史，-d 参数是从删除第几条。[root@VM-24-2-centos test]# test [root@VM-24-2-centos test]# test 1 [root@VM-24-2-centos test]# history 1 test 2 test 1 3 history [root@VM-24-2-centos test]# history -d 2 [root@VM-24-2-centos test]# history 1 test 2 history 3 history -d 2 4 history 到底能够存多少命令？这取决于 HISTSIZE 命令历史大小变量的数值，默认值是 1000 条。[root@VM-24-2-centos test]# echo $HISTSIZE 1000重定向冯诺依曼体系结构：运算器（是 CPU 的功能用于读取系统指令）运算器（CPU 进行）存储器（RAM 内部存储器，易失性存储器）输入设备（Input，用于输入数据比如：键盘、硬盘等）输出设备（Output，用于输出指令执行结果比如：显示器、音箱和硬盘等）计算机总线：地址总线（负责内存寻址）数据总线（负责传输数据）控制总线（负责控制指令）寄存器（CPU 中内部临时存储空间）I/O 设备（负责计算机内部存储和外部存储设备进行交互的设备）程序：指令+数据；那指令是什么？指令是由程序提供，用来加工数据。数据来自可以来自变量、文件、输入设备等。要是没有指定数据来源时会指定到标准输入/输出设备。标准输入（stdin）设备有：键盘，文件描述符为 0，标准输出（stdout）设备有：显示器，文件描述符为 1，标准错误输出（stderr）设备：显示器，文件描述符为 2。三种数据流：标准输入数据流、标准输出数据、流标准错误输出数据流。当在 Linux 中打开一个文件时，内核会反复调用一些输入或出设备，对于文件标识就很重要了，用文件描述符来标识文件，文件加载完成用数字表示（fd：file descriptor文件描述符）。IO 重定向：是当用户没有为指令指定数据来源时，系统要有一个默认来源，有可能是输入或输出设备。重定向是把默认的输入或输出的数据来源，重新定向到其他的文件或设备。输出重定向：>，覆盖输出重定向，也…

Linux - 初识 Linux
type: item
date: 2018-02-01T22:29:00+00:00
description: 目录[TOC]CentOS 系统安装去镜像站下载光盘咯，这里选择的是 Minimaill 版本，我猜生产环境中应该不会有人安装 Everything，因为很多工具用不上占用硬盘空间也大，这样硬盘资源没有高效利用上。CentOS7 很好安装图形化跟着引导一步步走就行，这里只需注意开启网卡，否则一会儿连接不到互联网，得手动编辑网卡配置文件开启。区这边我个人设置自动，实际服务器一定要严谨。你也可以学习如何分区，这里偷懒就不演示了，仅仅介绍部分概念。swap 是物理内存不够用时会把一些数据存在硬盘中，这些数据通常是不需要被CPU读取的，这样为物理内存腾出空间，现在内存越来越大都不需要swap了。在服务器中为了保险还是得加上。RAID 是将几块硬盘合在一起使用。RAID0 是两块硬盘逻辑上变成一块硬盘，使用的容量是两块叠加，数据写到两块硬盘上，读取时会很快。RAID1 是一块硬盘做存储一块做备份。RAID5 至少两块盘存数据，另外一块盘存校验信息，如果挂掉一块数据盘，存校验信息拿块盘可以做奇偶校验把数据算出来，存储的一个容量是减掉叫研判剩余的容量。RAID01 先做 raid0 把两块硬盘逻辑上逻辑上变成一块使用，另外两块盘也是一样，raid1 把这些数据镜像到做完 raid0 的其中一块盘做备份。系统安装完成使用 root 用户登录进去，用 ip a 这条命令查看你的 IP。恭喜，搞定第一步系统安装。Linux 设计思想关于 Linux 发展史我这里就不写了，想了解可以去维基百科查 Linux。由很多的小程序组成，每个小程序完成单一的功能，从而实现复杂的任务（HTTP 服务需要安装很多小组件）一切皆文件：所有的外围设备（硬件）或其他程序尽量避免捕获用户接口配置文件保存为纯文本格式（可以用文本编辑器编辑 vim)多用户多任务系统(Liunx 一共 6 个终端，用 Ctrl + alt + F1-F6切换，终端数量可配置，Ctril + alt + F7 是图形化界面如无法切换则需要安装图形化界面（图形终端）什么是 shellshell 是使用者与计算机交互的一个接口（人机交互接口），我们在 shell 中输入命令，shell 把命令传递给内核，内核把命令结果反馈给 shell，眼睛从 shell 中读取命令执行结果。Linux支持的 shell：bash（Linux 默认使用的 shell，全称叫做 Bourne Again Shell)kshcshzsh......认识系统界面内核有哪些作用？内核：图形界面（GUI: graphical user interface）或字符界面（CLI: command line interface）Linux 图形界面有：GNOME（Linux 默认图形界面用 C 语言开发的）、KED（C++ 开发的）、xface（简化的图形界面）进程管理：进程就是你要执行的任务内存管理：文件系统：存储设备上存储数据的一个方式方法 windows上有 NTFS、FAT32，Linux中使用 ext3、ext4、xfs 等网络功能：管理IP地址信息等硬件驱动：安全功能：认识路径绝对路径：从根开始的路径是绝对路径。相对路径：是以你所在的工作目录为参照点（. 代表当前路径 .. 代表上一级路径 ~ 代表用户的宿主目录）Linux 命令分类与格式Linux 内分两种命令：外部命令内部命令外部命令是 Linux 文件系统中存在一个应用程序，我们用 type 命令来分辨所用的命令是什么类型。内部命令是 shell 自带的命令，buildin 关键字说明该命令是内置的，也就所说的内部命令。Linux 下所有命令都有对应格式，使用时按照方式套用即可。命令格式：命令字 [选项] [参数] #中括号表示可以省略 命令字：唯一的，用于实现某一项功能 选项：修改命令的执行方式(实现特定功能) 长选项：--引导，是一个单词(多个长选项不能组合) 短选项：-引导，是一个字符(多个短选项可以组合) 参数：命令作用的对象，你这个命令对谁执行 单看文字一定很懵，我们来看几个小栗子。例如下面 ls 是命令字，作用是查看文件及目录，后面 -a 是一个可选项意思是查看的时候帮我把隐藏文件也显示出来，-a 选项后面的 ./ 是一个参数，表示当前所在的目录。总结这一句话意思是查看当前目录下所有文件包括隐藏文件。ls -a ./如果看懂了那么这次就直接上手两种简单的命令吧。# 关机 poweroff shutdown -h now #-h是指定时间或者多少分钟后关机，立即关机可以不指定参数关机。 # 重启 reboot shutdown -r now有人说用 init 0、init 6 来替代 shutdown、reboot 说是 shutdown等同于拔电源…