admin 发布的文章

mac电脑相关

1:开启自带的apache服务

  • sudo apachectl start/restart #启动apache
  • sudo apachectl stop #停止apache

重启apache:sudo /usr/sbin/apachectl restart
关闭apache:sudo /usr/sbin/apachectl stop
开启apache:sudo /usr/sbin/apachectl start

2:网站默认目录

  • 默认的网站路径:/Library/WebServer/Documents->index.html.en
  • 配置目录:/etc/apache2->http.conf
  • 日志目录:/private/var/log/apache2

Mac和Linux都有一个共同的特点:
凡是修改过配置文件的服务,当我们修改过后 必须重启服务 才可以生效。

参考:

python要点拾零--数据类型

1:输入输出

  • print()在括号加上字符串,就可以输出;并且接受多个字符串,用逗号隔开
print('The quick brown fox', 'jumps over', 'the lazy dog')
  • print()也可以打印整数,或者计算结果
print('100 + 200 =', 100 + 200)
100 + 200 = 300
  • 输入:input()
  • Python程序是大小写敏感的

2:字符串编码

防止多语言混合的文本出现乱码,Unicode应用而生;ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节;全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码;在计算机内存中,统一使用Unicode编码读取,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

  • ord()函数获取字符的整数;chr()函数把编码转换为对应的字符
  • len()函数计算str包含多少个字符

3:列表

list是一种有序的集合,可以放不同的数据类型 classmates = ['Michael', 'Bob', 'Tracy']

  • len()函数可以获得list元素的个数,可用索引访问每一个元素
  • append()可以往list中追加元素到末尾
classmates.append('Adam')
  • insert()可以把元素添加到指定的位置
classmates.insert(1, 'Jack')
  • pop()删除末尾的元素,括号加上元素的索引位置,可以删除指定位置的元素

4:元组tuple

另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改;classmates这个tuple不能变了,它也没有append(),insert()这样的方法;因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple
注意:因为括号()既可以表示tuple,又可以表示数学公式中的小括号,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。所以,只有1个元素的tuple定义时必须加一个逗号,来消除歧义

  • tuple所谓的“不变”是说,tuple的每个元素,指向永远不变
    list和tuple是Python内置的有序集合,一个可变,一个不可变。根据需要来选择使用它们

4:dict字典

在其他语言中也成为map,使用键值对存储

  • 判断key是否存在:in,d.get("key")
  • pop()删除key

和list比较,dict有以下几个特点:查找和插入的速度极快,不会随着key的增加而变慢;需要占用大量的内存,内存浪费多。
注意:dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象
在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

5:set集合

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key

  • 重复元素在set中自动被过滤
  • 通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果
  • 通过remove(key)方法可以删除元素
  • set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

注意:set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错
小结:使用key-value存储结构的dict在Python中非常有用,选择不可变对象作为key很重要,最常用的key是字符串

Python入门

1:Python注释

#第一个注释:单行注释以 # 号开头
print("Hello World!")

#多行注释用两个三引号'''包含起来
'''
第一行注释
第二行注释
'''

2:Python的行与缩进

Python 最具特色的就是使用缩进来表示代码块,不需要使用大括号。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数,缩进不一致会导致代码运行错误

正确缩进的示例如下:
纯文本复制
if True:
    print("True")
else:
    print("False")

错误缩进的示例如下:
if True:
    print("True")
else:
print("False")

多行语句
Python 通常是一行写完一条语句,但语句很长的话,可以通过反斜杠()来实现多行语句。

3:变量

a = 42
print(a)

注意:Python 的变量无须提前声明,赋值的同时也就声明了变量

4:数据类型

  • Python 中拥有 6 大数据类型:number(数字)、string(字符串)、list(列表)、tuple(元组)、sets (集合)、dictionary(字典)
  • Python 3 支持 4 种类型的数字:int(整数类型)、float(浮点类型)、bool(布尔类型)、complex (复数类型)
  • 在 Python 3 中可以使用 type() 函数来查看数据类型

Python3 所支持的运算类型包括加法、减法、除法、整除、取余、乘法和乘方:

print((3+1)) #加法运算,输出结果是 4
print((8.4-3)) #减法运算,输出结果是5.4
print(15/4) #除法运算,输出结果是 3.75
print(15//4) #整除运算,输出结果是 3
print(15%4) #取余运算,输出结果是 3
print(2*3) #乘法运算,输出结果是 6
print(2**3) #乘方运算,输出结果是 8

5:字符串

字符串就是在单引号、双引号和三引号之间的文字,其中所有的空格和制表符都照原样保留。单引号与双引号的作用其实是一样的,但是当引号里包含单引号时,则该引号需使用双引号,例如:print("what’s your name?")。三引号可以指示一个多行的字符串,也可以在三引号中自由使用单引号和双引号

  • 原始字符串通过给字符串加上前缀 r 或 R 的方式指定,比如需要原样输出 n 而不是令其换行
print(r"Newlines are indicated by \n")
#输出结果是Newlines are indicated by \n
  • 字符串截取:字符串常量[start_index:end_index+1] 左闭右开
str = 'Lingyi'
print(str[0]) #输出结果为L
print(str[1:4]) #输出结果为ing
print(str[-1]) #输出结果为i

注意:不同的数据类型之间是不能进行运算的,但是,不同数据类型可以相互转换;“+”号用在字符串中间是连接符;相加的双方是数值型,此时“+”号是运算符

a = 1
b = 2
c = 'a'+'b'
print(c)
# ab

6:列表

Python 列表是任意对象的有序集合,列表写在中括号 [] 里,元素之间用逗号隔开。这里的任意对象,既可以是列表嵌套列表,也可以是字符串

list = ["Python",12,[1,2,3],3.14,True]
print(list)#运行结果为['Python', 12, [1, 2, 3], 3.14, True]
  • 列表删除操作可以使用 remove 方法
list = [1,2,3,4]
list.remove(3)
print(list)#运行结果是[1, 2, 4]

7:元组

元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号()里,元素之间则用逗号隔开

tuple = ('abc',76,'ly',898,5.2)
print(tuple[1:3])
#运行结果是[76,'ly']

8:集合set

集合(set)是一个无序不重复元素的序列,可以使用大括号 {} 或者 set() 函数创建集合。需要注意的是,一个空集必须使用 set() 函数创建而不能使用大括号 {},因为大括号 {} 是用来创建空字典的

age = {18,19,18,20,21,20}
print(age)
#运行结果是{18, 19, 20, 21}

9:字典

字典是一种可变容器模型,且可存储任意类型对象,用 {} 标识。字典是一个无序的键(key)值(value)对的集合

information = {
    'name':'liming',
    'age':'24'
}
print(information)
#运行结果是{'name': 'liming', 'age': '24'}
  • 字典增加数据时
information['sex'] = 'boy'
print(information)
#运行结果是{'name': 'liming', 'age': '24', 'sex': 'boy'}
  • 字典删除数据时,可以使用 del 函数
del information['age']
print(information)
#运行结果是{'name': 'liming', 'sex': 'boy'}

10:语句与函数

  • 条件语句
password = '12345'
if password == '12345':
    print('login sucess!')
else
    print('wrong password')
  • 循环语句:在 Python 中要注意缩进,条件语句根据缩进来判断执行语句的归属
sum = 0;
for i in range(1,10,1):#不包含 10,实际为1-9
    sum = i + sum
print(sum)

其中 range 表示范围,i 从 1(第 1 个参数)开始迭代,每次加 1(第 3 个参数),直到 i 变成了 10(第 2 个参数)结束,因此当 i=10 时不执行语句,for 循环是 9 次迭代

for 迭代变量 in 迭代次数:
    执行语句...

如果是列表或者字典,就不用 range() 函数,直接用列表或者字典,此时 i 表示列表或者字典中的元素

list = {1,2,3,4}
for i in list:
    print(i)
  • 函数

def(define 即定义)是创建函数的方法

自定义函数
def f(x):
    定义过程
    return f(x)

def y(x):
    y = 5*x + 2
    return y
#下面调用自定义函数y
d = y(5)
print(d)
#运行结果是 27

高并发的解决方案

1:相关概念

  • 高并发:某个时间点,有多少个访问同时到来
  • 日PV在千万以上,有可能是一个高并发的系统
  • QPS:每秒钟请求或者查询的数量
  • 吞吐量:单位时间内处理的请求数量
  • 响应时间:请求发出到响应花费的时间
  • PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量
  • UV:独立访客,一定时间内
  • 带宽:峰值流量和页面的平均大小

2:前端:web资源防盗链

工作原理:通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址;一旦检测到来源不是本站即进行阻止或者返回指定的页面

  • Referer:ngignx模块 ngx_http_referer_module用于阻挡非法的域名请求;Nginx指令valid_referers,全局变量$invalid_referer

valid_referers : none表示来源头部为空的情况;blocked表示来源头部不为空,但是里面的值被代理或者防火墙删除了;server_names表示来源头部包含当前的server_names

location ~* \.(gif|jpg|png|swf|flv)$ { 
  valid_referers none blocked www.jzxue.com jzxue.com ; 
  if ($invalid_referer) { 
    rewrite ^/ http://www.jzxue.com/retrun.html; 
    #return 403; 
  } 
}
第一行:gif|jpg|png|swf|flv 
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链 
第二行: 表示对www.ingnix.com这2个来路进行判断 
if{}里面内容的意思是,如果来路不是指定来思是,如果来路不是指定来路就跳转到http://www.jzxue.com/retrun.html页面,当然直接返回403也是可以的。

针对图片目录防止盗链
location /images/ { 
  alias /data/images/; 
  valid_referers none blocked www.jzxue.com jzxue.com ; 
  if ($invalid_referer) {return 403;} 
} 
  • 加密签名解决伪造Refere

使用第三方模块ngx_http_accesskey_module实现Nginx防盗链

location ~* \.(gif|jpg|png|swf|flv)$ { 
  accesskey on;
  accesskey_hashmethod md5;
  accesskey_arg "key";
  accesskey_signature "mypass$remote_addr";
}

访问测试脚本download.php:
<?
$ipkey= md5("mypass".$_SERVER['REMOTE_ADDR']);
$output_add_key="<a href=http://www.jzxue.com/download/G3200507120520LM.rar?key=".$ipkey.">download_add_key</a><br />";
$output_org_url="<a href=http://www.jzxue.com/download/G3200507120520LM.rar>download_org_path</a><br />";
echo $output_add_key;
echo $output_org_url;
?>

参考:

3:前端:减少HTTP请求

2/8原则,80%以上的响应时间花在了css,js,图片上;
HTTP连接产生开销:域名解析->TCP连接->发送请求->等待->下载资源->解析时间
查找DNS缓存也需要时间,多个缓存就要查找多次,并且有可能缓存会被清除;http请求是串行发送

  • 图片地图:一个图片关联多个URL,目标URL的选择取决于用户点击图片的哪个位置,将多张图片合并为一张图片
HTML <map> 标签:
<img src="planets.jpg" border="0" usemap="#planetmap" alt="Planets" />

<map name="planetmap" id="planetmap">
  <area shape="circle" coords="180,139,14" href ="venus.html" alt="Venus" />
  <area shape="circle" coords="129,161,10" href ="mercur.html" alt="Mercury" />
  <area shape="rect" coords="0,0,110,260" href ="sun.html" alt="Sun" />
</map>
  • css精灵:通过使用合并图片,指定css的backgroud-image和backgroud-posion来显示元素
  • 合并脚本和样式表
  • 图片使用base64编码减少页面请求数:将图片直接嵌入到网页中,而不是从外部载入

4:前端:浏览器缓存和压缩优化技术

200 from cache:直接从本地缓存中获取响应,最快,最省流量;304 Not Modified:协商缓存,只返回一些基本的响应头信息,不发送实际响应体;200 OK:以上两种缓存全部失败,相对最慢;
请求头优先级:Pragma > Cache-Control > Expires

5:CDN加速

CDN: 内容分发网络,智能的虚拟网络,节点服务器
优势:本地Cache加速,提高企业站点的访问速度,跨运营商都得到良好的访问质量
工作原理:传统访问:请求->解析域名获取服务器IP地址->根据IP找到对应的服务器->服务器响应并返回数据

  • 实现:BAT提供的CDN服务
  • LVS做4层负载均衡
  • web服务器提供的负载均衡,nginx反向代理

6:独立图片服务器的部署

独立域名,必要性;

7:服务端 动态语言静态化

将现有PHP等动态语言的逻辑代码生成静态HTML文件,用户访问动态脚本重定向到静态HTML文件的过程,对实时性不高的数据
原因:动态脚本通常会做逻辑计算和数据查询,访问量越大,服务器压力越大;访问量大的时可能会造成CPU负载过高,数据库服务压力过大;

  • 模板引擎
  • ob函数

MySQL安全性考察

1:防SQL注入,prepare

  • 使用预处理语句: delete from user where id = ?

2:写入数据库的数据要进行特殊字符的转义

3:查询错误信息不要返回给用户,将错误记录到日志

4:PDO

PHP端尽量使用PDO对数据库进行相关操作,并且对预处理语句很好的支持,MySQLi也有,但是可扩展性不如PDO,效率高于PDO,MySQL函数在新版本中已经趋向于淘汰,所以不建议用,而且它没有很好的支持预处理

5:其它安全设置

  • 定期做数据备份
  • 不给查询用户root权限,合理分配权限
  • 关闭远程访问数据库权限
  • 修改root口令,不用默认口令,使用较复杂的口令
  • 删除多余的用户
  • 改变root用户的名称
  • 限制一般用户浏览其他库
  • 限制用户对数据文件的访问权限

CGI、FastCGI、PHP-CGI、PHP-FPM

1:CGI与FastCGI

  • CGI与FastCGI都是一种通讯协议,是web Sever(Apache/nginx/iis)与其他程序(此程序通常叫做CGI程序,如PHP脚本解析器)之间通讯的桥梁,CGI是为了保证Web Server传递过来的数据是标准格式的
  • FastCGI是CGI的改良进化版,FastCGI相比CGI更安全、性能更好,所以现在都是使用FastCGI协议进行通讯
  • FastCGI兼容CGI

2:PHP-CGI与PHP-FPM

  • PHP-CGI其实就是PHP脚本解析器,他是CGI协议的实现
  • PHP-FPM就是FastCGI协议的实现
  • PHP-CGI和PHP-FPM都是程序

3:PHP-FPM详解

  • fastcgi和cgi有什么区别

cgi在一个请求过来后,去读取php.ini里的基础配置信息,初始化执行环境,每次都要不停的去创建一个进程,读取配置,初始化环境,返回数据,退出进程,久而久之,启动进程的工作变的乏味无趣特别累;fastcgi可以让cgi一次启动一个主进程(master),让他只读取一次配置,然后在启动多个工作进程(worker),当一个请求来的时候,通过master传递给worker这样就可以避免重复劳动了,当worker不够的时候,master会通过配置里的信息,动态启动worker,等空闲的时候可以收回worker

  • php-fpm 到底是个什么东西

就是来管理启动一个master进程和多个worker进程的程序;PHP-FPM 会创建一个主进程,控制何时以及如何HTTP请求转发给一个或多个子进程处理。PHP-FPM主进程还控制着什么时候创建(处理Web应用更多的流量)和销毁(子进程运行时间太久或不再需要了)PHP子进程。PHP-FPM进程池中的每个进程存在的时间都比单个HTTP请求长,可以处理10、50、100、500或更多的HTTP请求

参考:
参考:
参考:

Mysql分库分表方案,如何分,怎样分

1:什么是分表?

分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去操作它

2:什么是分区?

分区和分表相似,都是按照规则分解表。不同在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,可以是同一块磁盘也可以在不同的机器。分区后,表面上还是一张表,但数据散列到多个位置了。app读写的时候操作的还是大表名字,db自动去组织分区的数据。

3:mysql分表和分区有什么联系呢?

  • 都能提高mysql的性高,在高并发状态下都有一个良好的表现。
  • 分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。
  • 分表技术是比较麻烦的,需要手动去创建子表,app服务端读写时候需要计算子表名。采用merge好一些,但也要创建子表和配置子表间的union关系。
  • 表分区相对于分表,操作方便,不需要创建子表。

我们知道对于大型的互联网应用,数据库单表的数据量可能达到千万甚至上亿级别,同时面临这高并发的压力。Master-Slave结构只能对数据库的读能力进行扩展,写操作还是集中在Master中,Master并不能无限制的挂接Slave库,如果需要对数据库的吞吐能力进行进一步的扩展,可以考虑采用分库分表的策略
参考

MySQL高可用和高可扩展

1:分区

  • 分区表原理:

创建表时使用partition by子句定义每个分区存放的数据,执行查询时,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询只需查询所需数据在的分区即可。

  • 分区目的:

是将数据按照一个较粗的粒度分在不同的表中,这样可以将相关的数据存放在一起,而且如果想一次性删除整个分区的数据也很方便

  • 适用场景

1:表非常大,热点数据和历史数据。2:分区表更易维护,可以对独立的分区进行独立的操作。3:分区表的数据可以分布在不同的机器上,从而高效使用资源。4:避免某些特殊的瓶颈。5:可以备份和回复独立的分区。

  • 限制

1:一个表最多只能有1024分区。2:5.1版本中,分区表达式必须是整数,5.5可以使用列分区。3:分区字段中如果有主键和唯一索引列,那么主键列和唯一列都必须包含进来。4:分区表中无法使用外键约束。5:需要对现有表的结构进行修改。6:所有分区都必须使用相同的存储引擎。7:分区函数中可以使用的函数和表达式会有一些限制。8:某些存储引擎不支持分区。

2:分库分表

  • 工作原理:通过一些HASH算法或者工具实现将一张数据表垂直或者水平进行物理切分。
  • 适用场景

1:单表记录条数达到百万或千万级别时。2:解决表锁的问题。

  • 分表方式

水平分割:分割后可以降低查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度
使用场景:1:表中的数据本身就有独立性,例如表中分别记录各个地区的数据或者不同时期的数据,特别是有些数据常用,有些不常用。2:需要把数据存放在不同介质上
水平分表缺点:1:给应用增加复杂度,通常查询时需要多个表明,查询所有数据都需UNION操作。2:在许多数据库应用中,这种复杂性会超过它带来的优点,查询时会增加读一个索引层的磁盘次数


垂直分表:
工作原理:把主键和一些列放在一个表,然后把主键和另外的列放在另一个表中
使用场景:1:一个表中的常用列和不常用列。2:可以使数据行变小,一个数据页能存储更多的数据,查询时减少I/O次数
缺点:管理冗余列,查询所有数据需要JOIN操作

3:MySQL的复制原理及负载均衡

  • 主从复制工作原理:在主库上把更改记录到二进制日志binlog;从库将主库的日志复制到自己的中继日志;从库读取中继日志中的事件,将其重放到从库数据中
  • 解决的问题:

1:数据分布:在不同的地理位置分布数据备份;负载均衡,降低单个服务器的压力;高可用和故障切换,帮助应用程序避免单点失败;升级测试,可以使用更高版本的MySQL作为从库测试

linux常用的命令

1:列举 ls 命令所在路径:/bin/ls 执行权限:所有用户

  • ls -l长格式显示
  • ls -a显示所有文件(包含隐藏文件)
  • ls -hl显示文件大小
  • ls -d显示目录本身

2:提示符

[root@localhost src]#

  • # 超级用户
  • $ 普通用户

3:文件目录操作相关命令

  • cd 切换目录 命令所在路径:shell内置命令 执行权限:所有用户
  • pwd 显示当前所在目录 命令所在路径:/bin/pwd 执行权限:所有用户
  • mkdir 创建目录 命令所在路径:/bin/mkdir 执行权限:所有用户 mkdir -p 11/22/33/44 递归建立目录
  • rmdir 删除目录,只能删除空目录 命令所在路径:/bin/rmdir 执行权限:所有用户
  • touch 创建文件 命令所在路径:/bin/touch 执行权限:所有用户
  • rm 删除文件-rf 文件名 -r 删除目录 -f 强制 命令所在路径:/bin/rm 执行权限:所有用户
  • cat 查看全部文件内容-n 列出行号 命令所在路径:/bin/cat 执行权限:所有用户
  • more 分屏显示文件内容 命令所在路径:/bin/more 执行权限:所有用户 空格向下翻页 b 向上翻页 q 退出
  • head 显示文件前10行head -n 行数 文件名 指定显示文件前n行 命令所在路径:/usr/bin/head 执行权限:所有用户 tail相对
  • ctrl+c 强制终止 ctrl+l 清屏
  • ln 软链接文件ln -s 源文件 目标文件 文件名都必须写绝对路径 命令所在路径:/bin/ln 执行权限:所有用户
  • cp 复制cp 源文件 目标位置 命令所在路径:/bin/cp 执行权限:所有用户
  • mv 剪切或改名 mv 源文件 目标位置 命令所在路径:/bin/mv 执行权限:所有用户
  • linux常见目录:

/ 根目录
/bin 命令保存目录(普通用户就可以读取的命令)
/boot 启动目录,启动相关文件
/dev 设备文件保存目录
/etc 配置文件保存目录
/home 普通用户的家目录
/mnt 系统挂载目录
/media 挂载目录
/root 超级用户的家目录
/tmp 临时目录
/sbin 命令保存目录(超级用户才能使用的目录)
/proc 直接写入内存的
/usr 系统软件资源目录 /usr/bin/ 普通用户 /usr/sbin/超级用户
/var 系统相关文档内容 /var/log/ 系统日志位置

4:权限管理

权限位:-rw-r--r-- 1 root root 0 08-11 01:45 aa
文件类型:- 普通文件 d 目录文件 l 链接文件
属主权限u=user 属组权限g=group 其他人权限o=other

  • chmod 修改权限 命令所在路径:/bin/chmod 执行权限:所有用户 change the permissions mode of a file
chmod  u+x  aa        aa文件的属主加上执行权限
chmod  u-x  aa
chmod  g+w,o+w  aa
chmod  u=rwx  aa
chmod  755  aa        
chmod  644  aa
  • chown 属主和属组 命令所在路径:/bin/chown 执行权限:所有用户 change file ownership
chown  用户名  文件名        改变文件属主
chown  user1  aa        user1必须存在
chown  user1:user1  aa    改变属主同时改变属组
useradd  用户名             添加用户
passwd  用户名            设定用户密码    

5:帮助命令

  • man 查看命令的帮助 命令所在路径:/usr/bin/man 执行权限:所有用户
  • 命令 --help 查看命令的常见选项

6:查找命令

  • whereis 查找命令的命令,同时看到帮助文档位置 命令所在路径:/usr/bin/whereis 执行权限:所有用户
  • find 搜索命令 命令所在路径:/usr/bin/find 执行权限:所有用户
按照文件名查找
find  查找位置   -name  文件名
find  /  -name  aabbcc    按照文件名查找 -iname 不区分大小写

按照用户
-user  用户名 按照属主用户名查找文件
-group 组名 按照属组组名查找文件
-nouser 找没有属主的文件

按照文件类型  权限  文件大小    
-type 类型 按照文件类型查找 f:普通 d:目录 l:链接
find   /root  -perm  644按照权限查找
-size     -5k     +5k    k  M  G
  • grep “字符串” 文件名 查找符合条件的字串行 命令所在路径:/bin/grep 执行权限:所有用户
grep  -i  “root”  /etc/passwd
-v 反向选择
-i 忽略大小写
  • | 管道符
命令1  |  命令2    命令1的执行结果,作为命令2的执行条件
cat  文件名  |  grep  “字串” 提取含有字符串的行
grep  “字符串”  文件名
ls  -l  /etc  |  more                        分屏显示ls内容

7:压缩和解压缩

.gz .bz2 linux可以识别的常见压缩格式
.tar.gz .tar.bz2 常见的压缩和打包命令

  • tar -zcvf 压缩文件名 源文件

tar -zcvf aa.tar.gz aa -z 识别.gz格式 -c: 压缩 -v:显示压缩过程 -f:指定压缩包名

  • tar -zxvf 压缩文件名 解压缩同时解打包
tar  -zxvf  压缩文件名    解压缩同时解打包
tar  -jcvf  压缩文件名  源文件    压缩同时打包
tar  -jcvf  aa.tar.bz2  aa
tar  -jxvf  aa.tar.bz2    解打包同时解压缩
查看不解包
tar  -ztvf  aa.tar.gz    查看不解包
tar  -jtvf  aa.tar.bz2
-t  只查看,不解压
tar -jxvf root.tar.bz2 -C /tmp/    指定解压缩位置

8:关闭和重启命令

  • shutdown -h now 没有特殊情况,使用此命令 -h 关机 -r 重启 命令所在路径:/sbin/shutdown 执行权限:root
  • reboot 命令所在路径:/sbin/reboot 执行权限:root

9:网络命令

  • ifconfig 查询本机网络信息 命令所在路径:/sbin/ifconfig 执行权限:root
  • ping 测试网络连通性 命令所在路径:/bin/ping 执行权限:所有用户 ping -c 次数 ip 探测网络通畅

Linux系统安装

1:虚拟机创建

  • 安装虚拟机Vmware|| Virtualbox
  • 标准类型安装
  • 我以后再安装操作系统
  • 操作系统:linux 版本:centoos
  • 虚拟机名称和位置
  • 磁盘空间大小默认就行

2:虚拟机硬件设置

  • 重点是网络适配器会在网络管理里生成两个虚拟网卡v1&v8

桥接:好处直接用本地网卡和主机联系,简单直接;缺点占用本地一个网段
NAT:会用虚拟网卡v8连接本地机,能上网
Host-only:会用虚拟网卡v1连接本地机,不能上网

3:小技巧

  • 建立快照
  • 克隆:虚拟机->管理->克隆

4:系统分区

分区:逻辑上把硬盘分成几个大小不同的空间,用来保存不同的数据
分区类型规则:

  • 主分区:最多4个
  • 扩展分区:最多1个;主分区加扩展分区最多4个;不能写入数据,只能包含逻辑分区
  • 逻辑分区

格式化:逻辑格式化,根据用户选定文件系统,在特定区域写入特定数据
挂载:给分区分配盘符的过程
必须分区:更分区和swap分区

  • 根分区 /
  • swap分区(交换分区:虚拟内存,真是内存不够的时候可以用,内存2倍,不超过2GB)
  • 推荐分区:/boot(启动分区,200MB)

5:打开电源(ctl+alt鼠标进入界面和移出)

  • 鼠标点进去,快速按f2键,进入到binary安装系统界面
  • 默认的启动顺序,默认硬盘启动,改为光盘启动
  • 虚拟机可以不用改这个默认启动,它可以自动,真是机是必须得改的

6:正式进入设置

  • 中文简体,键盘:美国英语式
  • 基本存储设备
  • 点是,忽略所有数据
  • 给自己的虚拟机起名字(默认)
  • 时区默认上海,打钩联网时间
  • 设定密码
  • 分区->创建自定义->标准分区->(boot[挂载点],swap[文件系统类型设置],/根[挂载点])
  • 格式化
  • 将修改写入磁盘
  • 安装样式:服务器会使用Minimal,不会安装图形化,选择Basic Server,以后自定义
  • 点击重新引导

7:远程连接

  • setup专有图形化工具设置IP