首页 > 代码库 > linux基础的一些常见问题总结_学习笔记
linux基础的一些常见问题总结_学习笔记
平时自己的总结(miscellaneous)
oracle无法实现远程用户连接:
解决办法:
#sqlplus /nolog
SQL> connect / as sysdba
SQL> alter system set local_listener = ‘(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.0.2)(PORT=1521)(SID=orcl))‘ scope=spfile;
SQL> shutdown immediate;
SQL> startup;
sqlplus test1/oracle@192.168.0.2/orcl.oracle.com
查看dd的写入速度:
在新的终端中输入:
while killall -USR1 dd;do sleep 3;done
系统开机包系统错:屏蔽方法
1、rm -rf /var/crash/*
2、修改/etc/default/apport中的enable值,将值修改为0,即关闭。
oracle安装事遇到的问题:
Problematic frame:
C [ld-linux-x86-64.so.2+0x14d70]
解决方法:在运行runInstaller之前,先设定如下的环境变量。
export LD_BIND_NOW=1
httpd日志:
loglevel记录等级:
紧急程度 等级 说明
1 emerg 出现紧急情况使得该系统不可用,如系统宕机等
2 alert 需要立即引起注意的情况
3 crit 危险情况的警告
4 error 除了emerg、alert、crit的其他错误
5 warn 警告信息
6 notice 需要引起注意的情况,但不如error、warn重要
7 info 值得报告的一般消息
8 debug 由运行于debug模式的程序所产生的消息
由 LogFormat 指令定义了昵称,如表所示。
格式分类 格式昵称 说明
普通日志格式(common log format,CLF) common 大多数日志分析软件都支持这种格式
参考日志格式(referer log format) referer 记录客户访问站点的用户身份
代理日志格式(agent log format) agent 记录请求的用户代理
综合日志格式(combined log format) combined 结合以上三种日志信息
实列:
下面的指令组:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
与下面的指令等效:
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"
通常我们配置访问日志时,使用先使用 LogFormat 指令定义格式昵称,然后再在 CustomLog 指令中引用昵称的方法。
格式说明符
在使用 LogFormat 和 CustomLog 指令中为了说明要记录的日志内容,可以使用的常用格式说明符如下表。
格式说明符 说明
%v 进行服务的服务器的标准名字 ServerName,通常用于虚拟主机的日志记录中。
%h 客户机的 IP 地址。
%l 从identd服务器中获取远程登录名称,基本已废弃。
%u 来自于认证的远程用户。
%t 连接的日期和时间。
%r HTTP请求的首行信息,典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。经常可能出现的 METHOD 是 GET、POST 和 HEAD;RESOURCE 是指浏览者向服务器请求的文档或 URL;PROTOCOL 通常是HTTP,
后面再加上版本号,通常是 HTTP/1.1。
%>s 响应请求的状态代码,一般这项的值是 200,表示服务器已经成功地响应浏览器的请求,一切正常;以 3 开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置;以 4 开头的状态代码表示客户端存在某种错误;
以 5 开头的状态代码表示服务器遇到了某个错误。
%b 传送的字节数(不包含HTTP头信息),将日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
%{Referer}i 记录引用此资源的网页。
%U 请求的URL路径,不包含查询串。
%{User-Agent}i 使用的浏览器信息。
在Linux终端执行clear或top命令时出现:‘xterm‘: unknown terminal type的错误。
解决办法:
1、临时办法,下次启动失效,需重启。
export TERM=vt100
export TEMCAP=$INFORMIXDIR/etc/termcap
IDS(Instrusion Detection Systems):入侵检测系统
专业上来讲就是依照一定的安全策略,通过软、硬件,对网络系统的运行状况进行监视;尽可能的发现攻击企图,攻击行为,攻击结果,以保证网络资源的机密性、完整性和可用性。
形象比喻:
假如防火墙是一栋大厦的门锁,那么IDS就是这栋大厦的监视系统,一旦小偷爬窗,进入大楼、或有内部人员有越界行为,只有实时监视系统才能发现情况并发出警告。
IPS(Intrusion Prevension Systems):入侵防御系统
是电脑网络安全设施,是对防病毒软件和防火墙的补充。入侵预防系统是以不能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即使的中断、调整或隔离一些不正常的或具有伤害性的网络资料传输行为。
ubuntu console直连设备方式:
sudo kermit
connect
ctrl \ 退出连接
c 重新连接
自动登陆(ssh-keyscan):
ssh-keyscan -t rsa
一路确定
ssh-copy-id -i ~/.ssh/id_rsa.pub user@ip
ubuntu15.10无线热点的建立:
ubuntu16.10:
软件名称:plasma-nm
1、安装软件中心里安装kde5-nm-connection-editor软件
2、在终端里执行kde5-nm-connection-editor
3、之后在图形截面中正常建立热点。
ssh登陆缓慢的原因:
1、dns解析
2、GSSAPI options 注:一种认证方式,基于DES算法来进行认证加密
解决方法:
修改ssh服务的sshd_conf配置文件:
UseDNS no
GSSAPIAuthentication no
可以使用ssh -vv IP来查看ssh缓慢的原因。
将外部命令加入到系统命令的方法:
1、使用export PATH=$PATH:pwd 临时生效 pwd:命令路径
2、将export PATH=$PATH:pwd export PATH加入到/etc/profile中,之后执行source /etc/profile
update-rc.d ServiceName remove 取消开机启动项
update-rc.d ServiceName enable|disable 添加开机启动项
selinux:
查看状态:getenforce 或setstatus -v
临时关闭selinux:setenforce 0
永久关闭selinux:进入selinux的配置文件,即/etc/selinux/config,做出修改,之后重启。
万能匹配:[0-9a-zA-Z\-]+
7zip的解压方式:
7zr e filename.7z
firefox取消缩略图 :
1、about:config
2、browser.newtabpage.enabled 设置为false
3、新建一个布尔项目:browser.pagethumbnails.capturing_disabled,值为true
如果不新建一个布尔值项目的话。只会不显示缩略图,担任会产生相应文件。相应文件产生的位置放在 ../Mozilla/Firefox/Profiles/xxx.default/thumbnails下。
右上角网络管理图标消失的解决办法:
sudo service network-manager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
sudo service network-manager start
sudo gedit /etc/NetworkManager/nm-system-settings.conf
把 false 改成 true 保存 退出
sudo service network-manager restart
audacity音频编辑的软件。
网络:不同的网络只是实现网络仲裁的方式不同,即网络信号如何传输,何时传输的一种控制方式。
ethernet网:开放的,有帕特研发
技术:CSMA/CD(载波侦听多路访问冲突检测)
在发送信号的时候先对网路线路进行载波检测查看网络线路中是否有信号通过,如没有则进行信号发送,同时会进行侦听。
令牌环网:
即由令牌环来决定那台主机发送信号。主机得到令牌环就有发送信号的权利。IBM研发的,因有个人专利所以发展的不是太好
星型网络:
逻辑上还是指总线型网络,只不过将总线替换为了HUB集线器。HUB集线器作用是方便接多台主机是设备。
网桥设备:用来隔离冲突域,转发网络信号。
在网络中因为多台主机可能会同时发送信号,从而造成信号冲突。为了解决这种问题而添加了网桥设备。网桥设备会将一个大的网络分割为多个小的网络,从而降低冲突率。
MAC:用来解决底层通信信道征用的一种机制。
MAC地址:用来辅助MAC的一种计算方式。
信号收发机制:
同一个网络:
例如:主机1向主机2发送一请求。
请求是一个数据包,数据包中包含包头和数据部分。包头中有源地址和目的地址。这个请求会以广播的方式向网络内的所有主机发送请求,同时在发送这个请求时,其他主机是无法在使用网络的。
网络内的主机会根据包头来对包进行处理。
在网桥隔离的不通网络中通信:
当网桥设备未建立地址表时:
例如:A网主机1向B网主机2发送请求。
主机1向本网络内广播,同时网桥设备会将主机1的请求进行转发到B网络内,当B网络内的主机2收到请求时会回复主机1在收发信号时,网桥设备会根据数据报头信息建立映射表。以方便下次不同网络之间的通信。
网桥设备:交换机。
交换机根本作用:隔离冲区域,转发数据报。
广播域:是指在同一网络中主机与主机之间通信需要先通过广播的方式获取对方的MAC地址,而每台主机在通信之前都需要广播,所以就会形成广播风暴。
冲突域:这是指基于CSMA/CD技术的一种产物,是指主机与主机之间进行通信需要先检测通道是否被占用,当两台主机同时检测到通道空闲,所一会同时发信号,所以就会造成冲突,自然也就会形成冲突域。
为解决冲突域所以就有了网桥设备,网桥设备会将大的网络划分为几个小网络。所以就会大大的降低冲突域。
而为了解决广播域就产生了三层设备路由器。路由器应用到了逻辑的IP地址所以称之为三层设备。
例如:当前的网络环境为,有A、B两个网络,A网络中有一台交换机、1、2、3三台主机。B网络中也有一台交换机和4、5、6三台主机。同时在两个网络之间部署有一台路由器。
当前工作要求:A网络中的1主机要想B网络中的4主机通信。
目的:讲解通信的过程
主机1首先要通过MAC地址向本网络中的所有主机广播询问有没主机4,OK没有得到回复,所以很明显本网络中没有主机4。所以使用MAC地址时无法寻到主机4的,因此就使用到了逻辑的IP地址。
这里需要讲一下一个包中会携带一些报头信息。MAC地址是二层的包头信息,因为在当前情况下MAC地址无法满足需求,所以设备就会使用到三层的包头信息。而这里也会涉及到默认网关的知识。
当主机1在本网络中找不到主机4时他就回将包发到默认网关哪去,网关通过查看包头信息得知其目的地址和当前的地址不在同一网络中,所以网关设备就会将包进行转发。但是网关设备仅仅知道目的IP地址
不知道MAC地址。因为同一网络中信息的传播是通过MAC地址来进行传播的。所以网关就会向本网络中广播问目的IP的MAC地址是多少。网络中的主机4在收到后会回复给网关,所以网关就得到了主机4的MAC地址
之后网关就会把从A网络中的请求报发给主机4,当主机4收到请求报后会按发送请求的方式进行回复给主机1.
unzip解压出来乱码怎么办:
unzip -O cp936 file
压缩加密文件:
zip加密:
zip --password redhat file.zip file
7z加密:
7za a -predhat -mem=AES256 file.7z file 解压:7za e file.7z
gpg加密:
tar zcvpf - file |gpg --symmetric --cipher-algo aes256 -o file.tar.gz.gpg 解压: gpg -d file.tar.gz.gpg |tar zxvf -
访问apache开启的页面出现乱码:
在/etc/apache2/apache2.conf尾部添加下面内容,就可以解决。
IndexOptions Charset=utf-8
Options Indexes FollowSymLinks
TCP协议的调优设置:
1、针对tcp协议可以修改/proc/sys/net/ipv4/tcp_app_win值,对卡顿有一定的效果
具体操作如下:
#!/bin/sh
source /etc/profile
route del -net 10.x.x.0/24
route add -net 10.x.x.0/24 dev eth0 window 16384
route del -net 0.0.0.0
route add default gw 10.x.x.x windows 16384
echo 16384 >/proc/sys/net/ipv4/tcp_app_win
2、还可以修改内核参数进行优化/etc/sysctl.conf在文件最后添加如下内容,然后执行sysctl -p生效
kernel.shnmall = 4294967296
net.core.wmem_max = 2569600
net.core.rmem_max = 2569600
net.core.wmem_default = 2569600
net.core.rmem_default = 2569600
net.ipv4.tcp_rmem = 53687091 53687091 536870912
net.ipv4.tcp_wmem = 53687091 53687091 536870912
net.ipv4.tcp_mem = 53687091 53687091 536870912
net.ipv4.udp_rmem = 53687091 53687091 536870912
net.ipv4.udp_wmem = 53687091 53687091 536870912
net.ipv4.udp_mem = 53687091 53687091 536870912
net.ipv4.udp_rmem_min = 53687091 53687091 536870912
net.ipv4.udp_wmem_min = 53687091 53687091 536870912
net.core.rmem_max = 536870912
net.core.wmem_max = 536870912
net.core.rmem_default = 536870912
net.core.wmem_default = 536870912
net.core.optmem_max = 536870912
3、针对个别情况,还可以修改网卡缓存大小
ethtool -G eth0 rx 4096
ethtool -G eth0 tx 4096
4、实际情况还可以修改网卡MTU值
ifconfig eth0 mtu 9221 一般不用改
基础命令用法:
tr的用法:
1、将file中‘abc‘替换为‘mnd‘
cat file |tr ‘abc‘ ‘mnd‘>new_file
注:将文件中所有字符‘a‘替换为‘m‘,将所有‘b‘替换为‘n‘,将所有‘c‘替换为‘d‘.
2、使用tr统一文件内容大小写
cat file|tr [a-z] [A-Z] >new_file 将文件内容统一替换为大写
cat file|tr [A-Z] [a-z] >new_file 将文件内容统一替换为小写
3、将文件中0-9替换为a-j
cat file|tr [0-9] [a-j] >new_file
4、删除文件中出现‘abc‘的内容
cat file|tr -d ‘abc‘ >new_file
注:是‘a‘,‘b‘,‘c‘,而不是只字符串‘abc‘
5、删除文件中出现的换行n和制表t
cat file|tr -d ‘\n‘ ‘\t‘ >net_file
注:不可见字符都是用转义字符来表示的,这个是统一的。
6、删除连续着的重复字母,只保留第一个。
cat file|tr -s [a-zA-Z] >new_file
7、删除空行
cat file|tr -s ‘\n‘ >new_file
8、删除Windows文件造成的‘^M‘字符
cat file|tr -s ‘\r‘ >new_file
或者
cat file|tr -s ‘\r‘ ‘\n‘ >new_file 注:是指用‘\n‘替换‘\r‘
9、替换
cat file|tr -s ‘:‘ ‘\t‘ >new_file
cut的用法:
参数:
-c:以字符为单位进行分割
-b:以字节为单位进行分割
-d:自定义分隔符
-f:与-d一起使用,指显示那个区域
-n:取消分割多字节字符
例子:
1、cut -b 1 file
cut -b 1-3,4 file
cut -b 3- file
2、cut -d : -f 1 file
cut -d : -f 1-3,5 file
cut -d : -f -2 file
paste :
会将每个文件以队列的形式进行合并
参数:
-d:改变间隔符
-s:串连进行而非平行进行。
uniq:
-c:显示重复的行数
-d:只显示相同的条目
注:常与sort连用
tee:
重定向输出同时标准输出
tee file 直接输出到file中
tee -a file 追加式的输出到file中
tee - 输出到标准输出两次
tee file1 file2 同时输出到file1和file2两个文件中
tee - - 输出到标准输出三次
chkconfig:
--list service_name
--level runlevel service_name {on|off}
--add service_name
--del service_name
inittable的任务:
1、设定默认运行级别
2、运行系统初始化脚本
3、运行指定运行级别对应目录下的脚本
4、设定Ctrl+Alt+Del组合键的操作
5、设定UPS电源在电源故障/恢复时执行的操作
6、启动虚拟终端
7、启动图形终端
partprobe:
使新添加的分区立即生效。
例如:partprobe /dev/sda
Computer的开机过程:
linux开机过程:
内核的作用:
文件系统
进程管理
内存管理
网络管理
安全管理
驱动程序
内核设计风格:
单内核(linux):
*.ko(kernel object) 内核调用的模块:核心(动态加载外围模块)
*.so(share object) 进程公用的模块
ldd查看可执行文件所依赖的库(ko)
微内核
POST--->bios(boot sequence)-->MBR(boot-loader 446)-->kernel-->init
1、加电自检:
cpu将只读的RAM加入到内存中,之后读取RAM中实现定义好的规则。
RAM中的规则定义了要去加载BIOS,加载上BISO后RAM的功能结束退出
BIOS中定义了相应规则,要去查找boot-loader,即要查找开机引导,要通过那个外部设备进入操作系统的内核。
通过boot-loader中定义的开机引导,将内核加载到内存中
编码问题:
convmv -f gbk -t utf8 -r --notest /tmp/???淶.txt
Echo的显示颜色:
echo显示带颜色,需要使用参数-e
格式如下:
echo -e "\033[字背景颜色;文字颜色字符串\033[0m"
例如:
echo -e "\033[41;37m TonyZhang \033[0m"
其中41的位置代表底色, 37的位置是代表字的颜色
注:
1、字背景颜色和文字颜色之间是英文的“""”
2、文字颜色后面有个m
3、字符串前后可以没有空格,如果有的话,输出也是同样有空格
下面看几个例子:
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
控制选项说明 :
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m -- \33[37m 设置前景色
\33[40m -- \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
extundelete文件修复:
extundelete
usage:extundelete option action device-file
原理:
在linux文件系统中,超级块描述了分区的信息,一个分区被分为两部分,索引节点表和数据块分区,这个在格式化文件系统时就被创建了。
文件(目录也是文件的一种,只不过他的内容是用来描述目录下的文件的)由索引节点描述,索引节点描述了描述了文件的修改时间,文件的
名称,文件的数据块地址等等。并且linux对文件删除操作时懒动作,删除文件时系统只是将文件对应的索引节点及其拥有的数据块置为free
(将nlink=0),而并没有做其他清空,只有当这个索引节点或数据块真正被用到时才会修改其中的内容。这就为我们恢复数据提供了可趁之机。
由于系统中的索引节点是固定大小的,因此可以很轻松的遍历扫描系统中的所有索引节点,找出free索引节点,查看数据块是否被使用,如果没
可以恢复。同时,由于索引节点里的时间信息是保留的,因此可以根据时间来恢复特定的文件。
Option:
--version 显示版本号
--help 显示帮助信息
--superblock 显示超级快信息
--journal 显示日志信息
--after dtime ,时间参数 表示在某段时间之后删除的文件或目录
--before dtime,时间参数 表示在某段时间之前删除的文件或目录
action:
--inode ino 显示节点“ino”的信息
--blocak blk 显示数据块“blk”的信息
--restore-inode ino[,ino....] 恢复节点"ino"的文件,恢复文件回访再RESTOR_FILES目录中,并以节点作为扩展名
--restore-file ‘path‘ 恢复指定目录的文件,恢复后文件的放置同上
--restore-all 将尝试恢复所有的目录和文件
GNS网路虚拟学习软件:
# - Install GNS3 Python dependencies
1、sudo apt-get install python3-setuptools
2、sudo apt-get install python3-pyqt4
3、sudo apt-get install python3-ws4py
4、sudo apt-get install python3-netifaces
#- Install Dynmips dependencies
5、sudo apt-get install cmake
6、sudo apt-get install libelf-dev
7、sudo apt-get install uuid-dev
8、sudo apt-get install libpcap-dev
# - Download and unzip GNS3 Linux source files (Download
9、unzip GNS3-1.3.7-source.zip
dynamips-0.2.14.zip gns3-server-1.3.7.zip vpcs-0.6.zip
gns3-gui-1.3.7.zip iouyap-0.95.zip
# - Build and Install Dynamips
10、unzip dynamips-0.2.14.zip
11、cd dynamips-0.2.14
12、mkdir build
13、cd build
14、cmake ..
15、make
16、sudo make install
17、sudo setcap cap_net_admin,cap_net_raw=ep /usr/local/bin/dynamips
18、cd ../..
# - Install GNS3 Server
19、unzip gns3-server-1.3.7.zip
20、cd gns3-server-1.3.7
21、sudo python3 setup.py install
22、cd ..
# - Install GNS3 GUI
23、unzip gns3-gui-1.3.7.zip
24、cd gns3-gui-1.3.7
25、sudo python3 setup.py install
26、cd ..
# - Install IOU dependencies
27、sudo apt-get install libssl1.0.0:i386
28、sudo ln -s /lib/i386-linux-gnu/libcrypto.so.1.0.0 /lib/libcrypto.so.4
29、sudo apt-get install bison
30、sudo apt-get install flex
31、sudo apt-get install git
32、git clone http://github.com/ndevilla/iniparser.git
33、cd iniparser
34、make
35、sudo cp libiniparser.* /usr/lib/
36、sudo cp src/iniparser.h /usr/local/include
37、sudo cp src/dictionary.h /usr/local/include
38、cd ..
# - Install GNS3 IOUYAP app (provides network support for IOU)
39、unzip iouyap-0.95.zip
40、cd iouyap-0.95
41、sudo make install
42、sudo cp iouyap /usr/local/bin
43、cd ..
# - Install VPCS
44、unzip vpcs-0.6.zip
45、cd vpcs-0.6/src
46、./mk.sh
47、sudo cp vpcs /usr/local/bin/
48、cd ../..
# - Install VirtualBox
49、sudo apt-get install virtualbox
# - Install Wireshark
50、sudo apt-get install wireshark
# - Install QEMU - method 1
51、sudo apt-get install qemu
# - Install QEMU - method 2 (x86 arch. only)
52、sudo apt-get install qemu-system-x86
53、sudo apt-get install qemu-utils
# - Install cpulimit
54、sudo apt-get install cpulimit
Add your IOU License file, IOU/IOS images, and you‘re ready to create projects, so launch GNS3 and get started!
# - Start GNS3
55、gns3
linux引导配置文件:
grub.conf
default=0 #默认启动的title编号,默认从0开始
timeout=5 #等待用户选择的超时时间
splashimage=(hd0,0)/grub/splash.xpm.gz #grub的背景图片
hiddenmenu #隐藏菜单
title CentOS 6 (2.6.32-504.el6.x86_64) #内核标题或操作系统标题,纯字符串,可自由修改
root (hd0,0) #内核文件所在的设备,对于grub而言,所有硬盘类型为hd,hd# 中的#表示第几快磁盘,最后的0表示磁盘分区。
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=1a7dab79-b8ec-4539-ad3f-2e42ed25eb52 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #内核文件路径及传递给内核的参数
initrd /initramfs-2.6.32-504.el6.x86_64.img #ramdisk的文件路径,小的虚根。
iftop的用法:
iftop的输出整体分为三大部分:
1、第一部分是iftop输出中的最上面的一行。此信息是流量刻度,用于显示网卡带宽流量。
2、第二部分是iftop输出中最大的部分,次部分分左、中、右三部分。左列和中列记录了那些IP或主机正在和本地的网络进行链接。其中中列的"=>"代表发送数据,“<=”代表接收数据,通过这个箭头可以清晰地知道两个IP之间的通信情况。
右列又分为三小列,这些实时参数分别表示外部IP连接到本机2s、10s、40s内的平均流量值。
3、第三部分位于iftop的最下方,可以分为三行,其中“TX”代表发送数据,“RX”代表接收数据,“TOTAL”代表发送和接收的全部数据,与这三行对应的有三列,其中、“cum”列表表示从运行iftop到目前的发送、接收和总数据流量;“peak”列表示
发送、接收以及总的流量峰值;“rates”表示过去2s、10s、40s内的平均流量值。
iftop的参数说明:
1、-i:指定需要监测的网卡
2、-n:将输出的主机信息都通过ip显示,不进行DNS反向解析。
3、-B:将输出以byte为单位显示网卡流量,默认是bit
4、-p:以混杂模式运行iftop,此时iftop可以用作网络嗅探工具
5、-N:只显示链接端口号,不显示连接对应的服务名称
6、-P:显示主机以及端口信息,
7、-F:显示特定网段的网卡进出流量
8、-m:设置iftop输出界面中最上面的流量刻度最大值,流量刻度分5个大段显示。
ip命令的使用:
ip:是一个强大的网络工具,使用权限为超级用户。
主要参数:
-s:输出更为详细的信息。
-4:是family inet 的缩写
-6:是family inet6的缩写
-0:是family link的缩写
命令:
ip link set 改变设备的属性:
例如:
ip link set dev eth0 up 等于传统的ifconfig eth0 up(down) 启动或关闭设备。
ip link set dev eth0 txqueuelen 100 改变设备传输队列的长度。
ip link set dev eth0 mtu 1500 修改网络设备MTU值
ip link set dev eth0 address 00:01:4f:00:15:f1 修改网络设备的MAC地址
ip link show 显示设备属性
ip -s -s list ls eth0 相当于ifconfig eth0
ip address add 添加一个新的地址
ip address add local 192.168.28.11/23 brd + label eht0:0 dev eth0 添加一个新的IP地址
ip address del local 192.168.28.11/23 brd + label eth0:0 dev eth0 删除一个附加的IP地址
ip address flush 清除协议地址
ip address flush label eth0:0
ip route add 添加路由
ip route change 修改路由
ip route replace 替换路由
修改网卡名称:
RHEL5: 是通过/etc/ modprobe.conf 中的alias 来定义的。
RHEL6: 是通过/etc/udev/rules.d/70-persistent-net.rules来定义的。
kernel的讲解:
核心: /boot/vmlinuz-version
内核模块(.ko):/lib/modules/version
内核设计:
单内核
模块化设计
微内核
装载模块:
insmod
modprobe
用户空间访问、监听内核的方式:
/proc,/sys
伪文件系统:
/proc/sys:此目录中的很多文件都是可写的
/sys:很多文件都是可写的
设定内核参数的方法:
echo ‘values’ >/proc/sys/to/somefile
sysctl:专门用来控制/proc/sys下的参数:
sysctl -w *.filename=‘ ‘ *只/proc/sys下的某个目录,如果是kernel下的某个参数的值,那么*.filename就等于kernel.filename,如果是vm下某个文件的值,那么*.filename就等于vm.filename 注:系统重启后修改还原。
长久有效的改变,但无法立即生效,就是修改/etc/sysctl.conf
sysctl -p可以让系统重读sysctl.conf配置文件,是配置生效
sysctl -a 显示所有内核参数及其值
lsmod:系统装载了那些模块
内容:Module(名称) Size(模块大小) Used(使用次数) by(被谁使用)
modprobe MOD_NAME 装载某个模块
modprobe -r MOD_NAME 卸载某个模块
modinfo:查看模块的具体信息
modinfo MOD_NAME
insmod:装在模块
insmod /PATH/TO/MOD_NAME_FILE
rmmod:移除模块
rmmod MOD_NAME
depmod:帮助生成模块间的依赖关系
depmod /PATH/TO/MODFILE_DIR
内核中的功能除了核心功能外,大多数功能都有三种选择:
1、这个功能不需要 不使用此功能
2、编译成内核模块
3、集成到内核中
如何手动编译内核:
图形化界面:
make gconfig 桌面环境:Gnome 需要装图形开发库 GNOME Software Development
make kconfig 桌面环境:KDE 需要安装图形开发库 KDE Software Development
注:查看桌面环境: echo $EDSTOP_SESSION 也可以通过看/etc下是否有gnome或kde目录来判断桌面环境
make menuconfig 文本界面配置 箭头表示下面有很多子条目 1、选择 ‘*‘:作于内核 2、选择‘m‘:做成模块 3、选择‘‘:不启用此功能。
注:如果直接在内核下编译会很容一出错,所以我们可以在原有内核基础上编译。
就是将现有系统的内核编译的配置文件拷贝到当前的编译目录中,同时将配置文件命名为‘.config‘,之后再执行make menuconfig操作,就不容易出错了。
注:现有系统内核的编译配置文件在/boot下,叫config-VERSION的配置文件。
make 编译内核
make modules_install 安装内核模块
make install 安装内核
注:编译完成后重启系统,选择内核。不要使用远程进行编译。
screen:直接打开一个行的屏幕
-ls 显示已经建立的屏幕
-r IDNUM 恢复screen开启的屏幕
ctrl +a,d 剥离屏幕 重启新屏幕后按ctrl+a,d就能剥离当前的屏幕,之后再screen就能新打开一个目录。
-S name 开启指定名称的终端
exit 退出
二次编译:清理之前如有需要请备份一下‘.config’文件
make clean 清理编上次译的相关模块
make mrproper 清理上次编译的相关操作
设定内核参数数值的方法:
echo VALUES >/proc/sys/TO/SOMEWHERE
修改主机名:echo "machenglong" > /proc/sys/kernel/hostname
sysctl -w 修改内核参数 例如:sysctl -w kernel.hostname=machenglong
能立即生效,但无法永久有效
永久有效:/etc/sysctl.conf:系统开启回去读这个文件,设定内核参数。
sysctl -p 命令会重读内核配置文件,使内核配置立即生效。
网络基础的讲解:
线路仲裁:
MAC(介质访问控制,Media Access Control):用来解决底层通信信道征用的机制。
MAC地址用来辅助MAC算法。
用来解决网络线路仲裁(不同的网络):
以太网:
CSMA/CD(Carrier Sense Multi Access Collision Detection):载波侦听多路访问冲突检测
Ethernet的核心标志。
令牌环网:只有持有令牌环的主机才可以发送数据。令牌环用来作为网络信号收发的仲裁。
星型网络:逻辑上来说是总线型,只不过将总线换成了HUB集线器。HUB主要是为了接线方便。
中级设备:中继器。扩大信号
网络冲突:
分离网络为单个小网络,减少冲突。
网桥:连接两个网络的设备,通过内部的信息表来维护信号转发的。例如:交换机。
交换机:无法隔离广播,隔离的是冲突。
路由器:将不同网络之间的信号进行转发。能够实现隔离广播域。
路由器是三层设备,是通过逻辑的IP地址来进行识别的。
nmap的主机端口扫描工具:
nmap的十条常用命令:
1) 获取远程主机的系统类型及开放端口
nmap -sS -P0 -sV -O <target>
这里的 < target > 可以是单一 IP, 或主机名,或域名,或子网
-sS TCP SYN 扫描 (又称半开放,或隐身扫描)
-P0 允许你关闭 ICMP pings.
-sV 打开系统版本检测
-O 尝试识别远程操作系统
其它选项:
-A 同时打开操作系统指纹和版本检测
-v 详细输出扫描情况.
nmap -sS -P0 -A -v < target >
2) 列出开放了指定端口的主机列表
nmap -sT -p 80 -oG – 192.168.1.* | grep open
3) 在网络寻找所有在线主机
nmap -sP 192.168.0.*
或者也可用以下命令:
nmap -sP 192.168.0.0/24
指定 subnet
4) Ping 指定范围内的 IP 地址
nmap -sP 192.168.1.100-254
5) 在某段子网上查找未占用的 IP
nmap -T4 -sP 192.168.2.0/24 && egrep "00:00:00:00:00:00" /proc/net/arp
6) 在局域网上扫找 Conficker 蠕虫病毒
nmap -PN -T4 -p139,445 -n -v --script=smb-check-vulns --script-args safe=1 192.168.0.1-254
7) 扫描网络上的恶意接入点 (rogue APs).
nmap -A -p1-85,113,443,8080-8100 -T4 --min-hostgroup 50 --max-rtt-timeout 2000 --initial-rtt-timeout 300 --max-retries 3 --host-timeout 20m --max-scan-delay 1000 -oA wapscan 10.0.0.0/8
8 ) 使用诱饵扫描方法来扫描主机端口
sudo nmap -sS 192.168.0.10 -D 192.168.0.2
9) 为一个子网列出反向 DNS 记录
nmap -R -sL 209.85.229.99/27 | awk {if($3=="not")print"("$2") no PTR";else print$3" is "$2} | grep (
10) 显示网络上共有多少台 Linux 及 Win 设备?
sudo nmap -F -O 192.168.0.1-255 | grep "Running: " > /tmp/os; echo "$(cat /tmp/os | grep Linux | wc -l) Linux device(s)"; echo "$(cat /tmp/os | grep Windows | wc -l) Window(s) device"
raid的磁盘使用基础讲解:
RAID:Redundant Arrays of Inexpensive Disks 独立的冗余的磁盘阵列
通过某种方式将几种硬盘组合起来,使磁盘的I/O的能力更强。
通过控制器与主板上的适配器相连
1、数据存储的速率:
1、条带化。
平均的将数据保存到多个磁盘中,提高了数据存储的速率。
将多块磁盘组合起来形成一个整列, 当做一个逻辑设备来使用的机制就叫RAID
RAID level:仅代表磁盘的组合方式,不用来区分好坏。
2、数据的安全性:
1、磁盘镜像技术(mirror)
将每一个数据以条带化的方式存储到一个磁盘中,同时每一份数据都在另一个磁盘上再保存一份。
2、校验码技术(raid4):
数据平均分配到n-1块盘上,同时将校验码放到第n块盘上。
注:一块盘损坏可以找回数据,但再损坏一块就无法找回了。
找回的方式时通过另外的磁盘找回丢失的数据。如长期这样使用,会对磁盘的消耗率大,减少了磁盘的使用寿命。
使用新盘替换坏盘在修复时可能会出错
校验码盘的访问量比较大,校验码盘会成为性能瓶颈。
办法:轮换作为校验码盘。raid5
raid6将校验进行了备份,优化了校验方式。
3、条带化(0)+镜像(1):RAID 0+1
4、镜像(1)+条带(0):RAID 1+0
3、4方式使用效率没有好坏之分,之不过是在出问题时对全局的影响范围的大小。
镜像技术很浪费空间
5、方式:
0:条带化
1:镜像
2:
3:
4:校验码
5:轮巡校验码
10:
01:
50:
硬盘类型:
IDE :133Mbps 并行
SATA:6Gbps 串行
USB : 串行
SCSI:320Mbps 并行
sed的文件编辑命令的使用:
1、sed
参数:
d:删除行
p:显示行
a:行后添加内容
c:替换行
i:在当前行之前追加内容,多行时末行除外。每行末尾需用‘/’来追加内容
y:将选中的行内容进行替换,正则表达式元字符对y命令不起作用。即:特殊字符不需\进行转译。
用法:
sed ‘1d‘ password sed -e ‘1d‘ -e ‘3d‘ password
sed -n ‘1p‘ password sed -n -e ‘1p‘ -e ‘3p‘ password
sed ‘1a machenglong‘ password sed -e ‘1a machenglong‘ -e ‘3a machenglong‘ password
sed ‘1c machenglong‘ password sed -e ‘1c machenglong‘ -e ‘3c machenglong‘ password
sed -n ‘/root/p‘ password sed -e ‘/root/p‘ -e ‘/bin/p‘ password
sed -n ‘1!p‘ password 显示除第一行之外的所有行。
sed ‘s/root/machenglong/g‘ password 全局替换root字符串为machenglong字符串
sed ‘1,$y/bin/mac/‘ password
处理过程:
首先sed将要处理的行保存到临时缓冲区,之后对临时缓冲区进行操作,最后将操作结果输出到桌面。sed的操作不对原文见产生改变。
定址:
用于决定对那些行进行编辑,地址的形式可以是数字,正则表达式,或者是二者的结合。
地址是数字则表示多少行,‘$’表示最后一行
top命令的基础用法:
top默认排序是以cpu来排序的
1、多U多核:按“1”可以监控每个逻辑cpu的状况。
2、“b”:高亮显示当前运行程序
3、“x”、“b“高亮显示当前排序的列、”P“以cpu排序、”M“以内存排序
4、shift + < 和 shift + > 可以向左或向右改变排序
5、top -c:显示完整命令
6、top -d3:间隔3秒更新一次
7、top -b1:间隔1秒显示一次
8、top -n3:显示3次
9、top -p PID:显示指定的进程信息
10、top交互命令
在top 命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。
h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
s 改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s
f或者F 从当前显示中添加或者删除项目
o或者O 改变显示项目的顺序
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
while的特殊用法:
while的特殊用法:
一:
while :;do
循环体
done
二:
while read line;do
处理line
done<指定处理的文件
zip压缩命令的用法:
压缩命令解压缩命令:
压缩各式:gzip、bzip2、xz、Z
压缩算法:算法不同,压缩比例也就不同
compress:FILENAME.Z 最原始的压缩方法
uncompress 解压
gzip:.gz
gzip /PATH/FILENAME 压缩完成后会删除源文件,只能压缩文件。如压缩目录,会逐个压缩目录下的文件。
gunzip:
gunzip /PATH/FILENAME.gz 解压缩gzip文件
或gzip -d /PATH/FILENAME.gz 解压缩
-#:1-9 指定压缩比,压缩速率根据压缩比来决定。默认为6.
例如:
gzip -9 password
zcat FILENAME.gz 在不解压的情况下查看压缩文件
bzip2:
在压缩大文件时bzip2比gzip有更大的压缩比。使用格式近似。
bzip2 /PATH/FIKLENAME
bunzip2 /PATH/FILENAME.bz 解压缩
-k: 在压缩时可以保留源文件
-d:解压缩
bzcat /PATH/FILENAME.bz 直接查看bz压缩文件
xz:
xz /PATH/FILENAME
unxz /PATH/FILENAME.xz
-d: 解压
xzcat 查看压缩文件内容
zip:不删除源文件。
可以压缩目录:
zip FILE.zip FILE1 FILE2....
unzip:解压缩
archive:
归档:归档本身并不意味着压缩。zip本身就是既能归档又能压缩文件。
tar:只归档的工具。
-c:创建归档文件
-f FILE.tar: 操作的归档文件
-x:展开归档
--xattrs:归档时,保留其扩展属性
-t:无需展开归档文件,直接查看归档了那些文件。
-v:压缩时显示压缩信息。
tar -cf FILE.tar FILE1 FILE2...
tar -xf FILE.tar 注:-f:后直接接归档文件名
-zcf:归档并调用gzip压缩
-zxf:调用gzip解压缩并展开归档 注:-z可以省略,因为tar可以根据文件名后缀来进行相应解压缩
-jcf:归档并调用bzip2压缩
-jxf:解压缩并展开归档 注:-j可以省略,因为tar可以根据文件名后缀来进行相应解压缩
-Jcf:归档并调用xz压缩
-Jxf:解压缩bzip2文件,并展开归档
cpio:归档工具
DNS服务基础讲解:
DNS(域名解析):BIND,Berkely Internet name Domain
SSL/TLS:http-->https,OpenSSL,CA,Digital,Certificate,PKI
HTTP: HTTP协议,Apache,LAMP,Nginx(Engine X),LNMP(LEMP),MySql,PHP,varnish(缓存服务器)
CDN:DNS,Varnish
File Server:NFS,SMB/CIFS,FTP
Netfilter:Iptables(filter,nat,mangle,raw)、tcp wrapper
NSSwitch(名称服务转换):framework(框架)、platform(平台),PAM(插入式认证模块):,
SMTP/POP3/IMAP4:Mail Server
SELinux:Security Enhanced Linux 安全加强的linux
C2-->SELinux-->B1
DNS:Domain Name Service
域名:www.baidu.com(主机名,FQDN(完全限定域名):Full Qualifind Domain Name)
baidu.com(域名)
com(域名)
DNS:名称解析,Nmae Resolving 名称转换(背后有查询过程,数据库)
FQDN<-->IP
hosts:格式
IP FQDN Ailases
名称地址分配组织:IANA(军方)-->ICANN(民间,管理顶级域)
域名解析的历程:
1、周期性的向server请求下载hosts文件更新本机的hosts文件
2、由于主机的数量增加,而产生了多台server服务器共同工作
3、由于主机数量的庞大,从而构建了新的域名解析的架构,即分布式数据库
分布式数据库
域名分类:
1、组织域
2、国家域
3、反向域
域(domain)和区域(zone)的区别:
domain:逻辑概念
zone:物理概念
mysql服务的基础讲解
数据查找的方法(索引方法):
2分发、B+树、
1、程序是由指令加数据组成的。
2、数据用2分法查找大概需要14次,使用此方法需要数据是有序的!!!
3、帮助查找数据的方法叫做索引。
4、B+树索引寻找数据平均需要2次
5、数据的组织结构:
层次性结构
网状性结构
关系性结构
6、数据库具备得功能:
数据库的创建、删除
表的创建、删除、修改
索引的创建、删除
用户和权限
数据的增、删、改
数据的查询
7、DML:Data Manapulate Language:数据操作语言
INSERT、DELETE、UPDATE、REPLACE
8、DDL:Data Defination Language:数据定义语言
CREATE、ALTER、DROP
9、DCL:Data Control Language:数据控制语言
GRANT、REVOKE
10、SELECT:数据查询
11、RDMS软件:
Oracle、Sybase、Infomix 注:十年前的三大数据库 Sqlserver是Sysbase的一个分支。Sqlserver只能运行在Windows上
SQL Server
Mysql、PostgreSQL(pgsql) 开源软件
EnterpriseDB 注:去IOE化:IBM、Oracle、EMC 查看了解
MariaDB
Mysql-->Percona 在mysql的基础上修改了性能
12、数据库的关系:
因为数据库的关系性导致在查询数据时需要资源比较多,需要较多资源的原因是因为在查数据是需要在内存中加载,而关系性数据又需要将很多表加入到内存中。
反关系模型:NoSQL技术
MongoDB
Redis
HBase
13、关系性数据库
表
索引
视图
约束
存储过程
存储函数
触发器
游标
用户
权限
事物
14、字段名称,数据类型, 类型修饰(限制)
字符:
char(10)占据10个字符,不管用或不用
varchar(10)根据实际情况调节占用空间长度
binary(10) 区分大小写的数据
varbinary(10)
text(100)存储大对象
blob(100)二进制大对象
数值
精确数值:
整形
TINYINT 微整形 1个字节
SMALLINT 小整形 2个字节
MEDIUMINT 中整形 3个字节
INT 整形 4个字节
BIGINT 大整形 8个字节
十进制:
DECIMAL
浮点型:
float 单精度浮点型
double 双精度浮点型
日期
DATE 日期
TIME 时间
DATETIME 日期加时间
布尔
DDL:
CREATE
ALTER
DROP
DML
CREATE
DEOETE
INSERT
DCL
GRANT
REVOKE
mysql命令基础:
我整理了7条修复MySQL数据库的方法,当简单的重启对数据库不起作用,或者有表崩溃时。
简单的MySQL重启:
/usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown
/usr/local/mysql/bin/mysqld_safe &
1、MyISAM表崩溃
MySQL数据库允许不同的表使用不同的存储引擎。它用来存储与检索数据。较流行的存储引擎是MyISAM与InnoDB。
MyISAM表最终“将”崩溃。这是个不争的事实。
幸运的是,在多数情况下,MyISAM表崩溃很容易修复。
修复单一表,连接你的数据库执行:
repair TABLENAME
修复所有的表,执行:
/usr/local/mysql/bin/mysqlcheck --all-databases -uUSERNAME -pPASSWORD -r
多数情况,只有当你浏览日志文件时,才知道MyISAM表崩溃了。
我强烈建议在你的/etc/my.cnf配置文件中添加此行。一旦表崩溃它将进行自动修复。
[mysqld]
myisam-recover=backup,force
如果这个也不管用,还有其他的方法可以试试。
2、多实例MySQL
当你重启MySQL后,进程马上死掉,这很常见。
查看日志文件,它会告诉你,另一个MySQL实例可能正在运行。
停止所有MySQL实例:
/usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown
killall mysql
killall mysqld
现在重启数据库,将只有一个实例在运行。
3、改变InnoDB日志设置
一旦MySQL数据库有在运行InnoDB引擎,你就一定不能修改/etc/my.cnf文件中如下几行:
datadir = /usr/local/mysql/data
innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
innodb_log_files_in_group = 2
innodb_log_file_size = 5242880
InnoDB日志文件大小一旦确定就不能修改。如果改变了,数据库将不能启动。
4、MySQL host表丢失
有见过几次这样的情况。可能是一些异想不到的MyISAM bug。
轻松将其修复如下:
/usr/local/bin/mysql_install_db
5、不正常的MyISAM自动增长(auto_increment)
如果MyISAM表自增计数变得紊乱,你就不能再插入新的纪录。
通常你可以告诉自增计数器它现在工作不正常,通过将最后一条纪录的自增字段设为-1。
解决问题-找到最后一条自增记录的有效值(执行如下命令)
SELECT max(id) from tablename
然后更新此表的自增计数器,如下:
ALTER TABLE tablename AUTO_INCREMENT = id+1
6、太多连接数
数据库变得相当繁忙,因为连接数比它能处理的多。而且现在你都不能连接上你的数据库。
首先,停止数据库:
/usr/local/mysql/bin/mysqladmin -uUSERNAME -pPASSWORD shutdown
如果上条命令不管用,可以试试 "killall mysql" 和 "killall mysqld"
当数据库停止后,编辑/etc/my.cnf文件,增加连接数。不要痴狂的增加这个数字,否则你会把你的整台机器搞崩。
在一台专用数据库机器上,我们通常用:
max_connections = 200
wait_timeout = 100
试着重启数据库看看是否有帮助。
如果你被查询弄的措手不及,需要连接数据库进行表修改操作,那么在/etc/my.cnf文件中设置一个不同的端口号,开启数据库,进行修改操作。然后将端口修改回来(master-port = 3306)再重启。
7、InnoDB表崩溃
InnoDB表是我最钟爱的。事物缓存,可靠,不像MyISAM,InnoDB支持对同一表的并发写。
InnoDB的内部恢复机制也相当不错。如果数据库崩溃,InnoDB将尝试进行修复,通过从最后一个时间戳开始运行日志文件。大多数情况都会成功,整个过程是透明的。
不过,如果InnoDB自行修复失败,那么“整个”数据库将不能启动。MySQL将会发出一个错误信息并退出,你的整个库将处于离线状态。你可以不断尝试重启数据库,但是如果修复进程失败,数据库将拒绝启动。
这就是为什么需要运行master/master当使用InnoDB时——当一个master宕掉时,还有一台冗余master做后备。
在继续操作前,先浏览下MySQL的日志文件,确定数据库不是因为InnoDB表的崩溃而崩溃。
有一种方法是更新InnoDB的日志文件计数器以跳过引起崩溃的查询,但是经验告诉我们这不是个好方法。这种情况下,将造成数据的不一致性而且会经常使主从复制中断。
一旦因InnoDB崩溃造成数据库无法启动,你就应该按如下五个步骤处理问题:
第一:添加此行到/etc/my.cnf文件中:
[mysqld]
innodb_force_recovery = 4
第二:重启MySQL。你的数据库现在将启动,但是在innodb_force_recovery参数作用下,所有的插入与更新操作将被忽略。
第三:导出所有的表(Dump all tables)
第四:关闭数据库,删除所有的数据文件。运行mysql_install_db 创建默认MySQL表。
第五:从/etc/my.cnf文件中去掉innodb_force_recovery参数,重启数据库。(库现在应该能正常启动)
第六:从备份文件中恢复所有数据。
续:
最近遇到了个让人棘手的任务——修复一个失败的InnoDB数据库。这个数据库因崩溃而无法启动。
第一步将InnoDB在force-recovery模式下开启,此时InnoDB虽开启了但是将忽略所有更新(UPDATEs)与插入(INSERTs)操作。
在/etc/my.cnf文件中添加此行:
innodb_force_recovery = 2
现在重启数据库:
/usr/local/bin/mysqld_safe &
(注意:如果MySQL没有启动,继续增加 innodb_force_recovery 的数值直到将参数值设为8( innodb_force_recovery =)
将所有数据保存到临时文件alldb.sql(下个命令需要花一定时间):
mysqldump --force --compress --triggers --routines --create-options -uUSERNAME -pPASSWORD --all-databases > /usr/alldb.sql
再次关闭数据库:
mysqladmin -uUSERNAME -pPASSWORD shutdown
删除数据库目录。(注意:我的数据目录在/usr/local/var下。你的设置有可能不同,确保删除的是正确的文件夹。)
rm -fdr /usr/local/var
重建数据库文件夹,安装MySQL基础表
mkdir /usr/local/var
chown -R mysql:mysql /usr/local/var
/usr/local/bin/mysql_install_db
chown -R mysql:mysql /usr/local/var
从/etc/my.cnf文件中删除innodb_force_recovery ,重启数据库:
/usr/local/bin/mysqld_safe &
导入所有备份文件(下一命令需要花一段时间):
mysql -uroot --compress < /usr/alldb.sql
最后,刷新MySQL的权限(因为我们也更新了MySQL的表)
/usr/local/bin/mysqladmin -uroot flush-privileges
注意:为了得到最好的结果,添加port=8819(或任何其他随机端口)到/etc/my.cnf文件中在重启MySQL之前,然后将--port=8819添加到mysqldump命令中。这种方法避免了MySQL数据库过于系繁忙当修复进程正在进行时。
mysql初始密码设置:
1、登陆到mysql上:执行
update mysql.user set Password=PASSWORD(‘密码‘) where user=‘root‘;
flush privileges;
2、退出mysql,以新密码重新登陆即可。
mysql忘记密码时怎么办:
1、首先将mysql关闭
2、mysqld_safe --skip-grant-tables
3、执行第二步后需另开启一个终端,登陆mysql,无需密码可直接登陆
4、进mysql后修改密码
update mysql.user set Password=PASSWORD(‘密码‘) where user=‘root‘;
5、修改完成后,将当前的mysql通过kill -9 Pid 杀死,最后重启mysql,以更改后的密码登录即可
6、mysqladmin -uroot -predhat password ‘topwalk‘
7、set password for ‘user‘@‘host‘=PASSWORD(‘password‘);
Webservice的基础讲解:
URI(Uniform Resource Indentifier):统一资源标识符
URL(Uniform Resource location):统一资源定位符
Web资源:http://www.malong.com/linux/xiaoxiang.gif
多个资源很可能被整合为一个html文档
html语言的定义:
将分散在多台web服务器上的资源整合成一个页面,并能够让浏览器予以显示的语言就是html标记语言
Web对象:
html的方法:GET POST PUT DELETE
GET:将服务器上的资源获取到本地用浏览器显示
POST:将本地数据通过表单提交个服务器
PUT:获取远程服务器资源到本地
DELETE:删除远程服务器上的数据
MIME(Multipurpose Interface Mail Extension):多用途互联网邮件扩展
SMTP(Simple Mail Transmission Protocol):纯文本
MIME:将非文本数据在传输前重新编码为文本格式接收方能够用相反的方式重新还原为原来的程序,还能够调用相应的程序打开此文件。
动态网页:服务端存储的文档非html格式,而是编程语言开发的脚本,脚本接受参数后在服务器运行一次,运行完成后会生成HTML文档,将生成的文档发给客户端
C/S模型:
client-->request-->server
server-->response-->client
server的操作:
1、建立连接--接收或拒绝客户端的连接请求
2、接收请求--通过网络读取http请求报文
3、处理请求--解析请求报文做出相应的动作
4、访问资源--访问请求报文中相应的资源
5、构建响应--使用正确的响应生成http响应报文
6、发送响应--向客户端发送响应报文
7、记录日志--当已完成的http事务记录进日至文件
server的响应模型:
1、单进程响应
2、多进程响应
3、单进程多线程响应
4、多进程多线程响应
web请求模型:
MPM(Multi Path Modules):多道处理模块
mpm_winnt win平台上专用的,多线程处理机制
prefork 预先生成进程(一个请求用一个进程处理)
worker 一个请求用一个线程处理(启动多个进程) 优:能提高多次访问同一个资源的速度,进程负责请求链接,链接建立了当有请求需要同样资源时直接分享就可以了;缺:多个线程在共享一个资源时,而其中要有多个线程要写一个
资源时,就会导致资源竞争,所以为了避免资源竞争需要实现资源加锁,但是worker模型对于枷锁的处理机制不太好,所以这种模型的处理效果并不太好。
event 一个进程同时处理多个请求
Web登陆认证:
AuthType Basic
AuthName "jiami"
AuthUserFile /etc/Auth
Require user UserName
Require group GroupName
Require valid-user
python的基础讲解:
python的基础:
1、print同时打印多个字符串,只需将他们用逗号分隔开。
即:print ‘ma‘,23
2、从模块导入函数的时候,可以使用:
import somemodule 主要为内建模块
或from somemodule import somefunction
或from somemodule import somefunction anotherfunction yetanotherfunction
或from somemodule import *
如果两个模块中的函数相同时,怎么办:
1、module.function()
2、import function as long
long.function()
3、from module import function as long1
long1()
3、序列解包:
a,b,c=1,2,3
a,b=b,a
print a,b,c
字典的基础用法(dict):
1、字典的建立:
a=[(‘ma‘,1),(‘cheng‘,2),(‘long‘,3)]
b=dict(a)
b=dict(ma=1,cheng=2,long=3)
2、len
显示字典中有多少项,键-值是一项。
3、a[‘ma‘]=4
4、del a[‘ma‘]
5、‘ma‘ in a 检查字典a中是否有‘ma‘这个键
6、a={‘name‘:‘ma‘,‘like‘:‘funny‘}
"my name is %(name)s" % a
my name is ma
7、只要所有给出的键都能在字典中找到,就可以获得任意数量的转换符。这类字符串格式化在模板中很有用。
例如:
a=‘‘‘
<html>
<head>%(title)s</head>
<body>
<h1>%(title)</h1>
<p>%(text)</p>
</body>
</html>
‘‘‘
b={‘title‘:‘my name is machenglong‘,‘text‘:‘my hobby is freedom‘}
c=a%b
8、clear
清除字典中的所有项
例如:
a={}
a[‘name‘]=‘machenglong‘
a[‘age‘]=24
a.clear()
clear可以清除关联性的赋值。
例如:
例1:
a={}
a[‘name‘]=‘machenglong‘
a=b
a={}
例2:
a={}
a[‘name‘]=‘machenglong‘
a=b
a.clear()
通过以上的两个例子可以得出,例1无法清除关联性赋值,即:b的赋值没有清除。而例2使用clear清除真正做到了完全清除赋值。
9、copy
deepcopy
深复制:
from copy import deepcopy
b=deepcopy(a)
深复制的内容做修改不会影响到原字典,原字典做修改也不会影响到复制的字典。
10、fromkeys
fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None
例如:
a={}.fromkeys([‘name‘,‘age‘,‘like‘])
设定默认值:
a=dict.fromkeys([‘like‘,‘age‘],‘(unknown)‘)
11、get
获取字典中键所对应的值,类似索引似的获取键值。但索引获取键值,如果没有查找的键不存在,那么结果就会报错,而get则就不会,只不过会输出none打印到屏幕。
例如:
a.get(‘m‘)
还可以设定不存在键值时默认回复的内容:
例如:
a.get(‘m‘,‘N/A‘)
12、has_key
可以检查字典中是否含有给出的键,与a in b的用法相同
例如:
a.has_key(‘name‘)
13、items
将字典一列表的形式返回,列表中的每一项都来自于(键-值)。
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
b=a.items()
14、iteritems
作用大致与items的用法相同。但是会返回一个迭代对象而不是列表。
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
b=a.iteritems()
c=list(b)
15、keys
将字典中的键一列表的形式返回
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
b=a.keys()
16、iterkeys
返回一个键的迭代器
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
b=a.iterkeys()
c=list(b)
17、pop
用来获取对应与给定键的值,然后将这个值-键对从字典中删除。
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
b=a.pop(‘name‘)
18、popitem
随机一个一个的删除字典中项。这对一个一个的处理项很有好处。
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
a.popitem()
19、setdefault
a={}
b=a.setdefault(‘name‘,‘ma‘)
b
n[‘name‘]=‘cheng‘
b
b.setdefault(‘name‘,‘ma‘)
b
可以看到当键不存在时,setdefault返回默认值并且相应的更新字典。如果键存在那么就会返回其对应的值,但不改变字典。默认值使可以改变的,如不设定默认为none
20、update
可以利用一个字典更新另一个字典。
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
b={‘name‘:‘cheng‘}
print a.update(b)
{‘name‘:‘cheng‘,‘age‘:24,‘like‘:‘apple‘}
21、values
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
print a.values()
[‘ma‘,‘24,‘apple‘]
以列表的形式返回字典中的值
22、itervalues
a={‘name‘:‘ma‘,‘age‘:24,‘like‘:‘apple‘}
b=a.itervalues()
c=list(b)
c
[‘ma‘,24,‘apple‘]
数列的基础用法(list):
数列:
索引:
hello[1]
a=raw_input(‘please input:) 将输入的任何内容转化为字符串格式
a=input(‘please input:) 保留输入内容的格式,即:不会改变输入的内容的类型
分片:
a=‘www.baidu.com‘
print a[4:9]
‘baidu‘
print a[0:-1:2] 第三个元素为步长
‘wwbiuc‘
序列可以相加亦可以相乘
例如:
a=list(‘machenglong‘]
b=list[‘long‘]
c=a+b
d=3*b
判断指定字符串是否存在:
例如:
a=‘machenglong‘
‘ma‘ in a
True
判断数列长度:
len(a)
判断数列最大值:
max(a)
判断最小值:
min(a)
删除元素:
del a[1]
列表方法:
append
用于在列表末尾追加新的内容
a=range(1,10)
a.append(1)
a.append(‘ma‘)
count
统计某个元素在列表中出现的次数
a=range(1,10)
a.append(1)
a.count(1)
extend
一次性的在列表中追加另外的一个列表
a=range(1,10)
b=range(10,20)
c=a.extend(b)
index
用于找出某个元素在列表中第一次出现的位置
a=range(1,10)
a.index(1)
insert
将对象插入到指定位置
a=range(1,10)
a.insert(2,‘macheng‘)
pop
默认删除列表中最后一个元素
a=range(1,10)
a.pop()
a.pop(3) 删除索引为3的元素
remove
用于删除第一个搜索到的元素
a=range(1,10)
a.remove(1)
reverse
将列表中的内容反向排序
a=range(1,10)
a.reverse()
sort
将列表中的内容正向排序
a=range(1,10)
a.sort(a.reverse())
a=[‘ma‘,‘cheng‘,‘long‘,‘hong‘]
a.sort(key=len) 设定排序的一句为元素长度
a=range(1,10)
a.sort(reverse=true) reverse用来指明是否反向排序
cmp
用于两数值进行对比
cmp(10,9)
1
cmp(9,10)
-1
cmp(9,9)
0
元祖:
tuple
与list的功能一样;以一个序列作为参数,并把他们转化为元祖。如果参数就是元祖就会把他原样返回。
tuple([‘l‘,‘c‘,‘m‘])
tuple(‘ma‘)
tuple((1,2,3))
os模块的基础用法:
OS模块的使用:
os.name 查看系统平台,windows返回‘nt‘,linux返回‘posix‘。
os.getcwd() 获取当前所处路径
os.listdir(dir) 获取目录下的文件列表
os.system(‘comm‘) 执行系统自身的命令
os.remove(file) 删除指定文件
os.rmdir(dir) 删除指定目录,但是如果目录理由内容需要先删除目录内的文件。
os.mkdir(dir) 创建目录,但是不能递归性的创建,os.makedirs(dir)就可以递归性的创建了。
os.mknod(file) 创建文件
os.chdir(dir) 转换文件路径
os.rename(old_dir,new_dir) 重命名目录名
os.sep 可以取代系统特定的路径分割符
os.path.spilt(path) 可以将一个文件分割‘路径’和‘文件名’两部分。
os.path.isfile(path) 判断是不是文件,路径加绝对路径。os.path.isdir(path)判断一个文件是不是目录。
os.path.exists(path) 判断给出的路径是否存在,路径要加绝对路径。
os.path.abspath(file) 获得当前路径下文件的绝对路径。
os.path.getsize(file) 获得文件的大小
os.path.splitext(file) 分离文件名和扩展名
os.path.join(dir,file/dir) 连接目录与文件名或目录名
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回目录
shutil模块:
shutil.copyfile(file_old,file_new) 只能复制文件
shutil.copytree(old_dir,new_dir) 只能是目录,且新目录必须不存在
a
shutil.move(old,new) 移动目录
shutil.remove(file) 删除文件
shutil.rmtree(dir) 有内容的目录和空目录都可以删除
备注:若路径中含中文,在windows环境(编码为GBK)下,要将目录编码成GBK,如:dir.encode(‘GBK‘)
sys模块:
sys.argv[1] 获取脚本执行的参数,argv[0]代表脚本本身
len(sys.argv)-1 参数个数
sys.platform 查看系统平台
sys.exit() 退出
xlrd模块:
data=http://www.mamicode.com/xlrd.open_workbook(‘file.xls‘) 打开一个office文件
table=data.sheets()[0] 获取第一个工作表
nrows=table.nrows 获取行数
ncols=table.cols 获取列数
table.row_values(i) 获取整行的值
table.col_values(i) 获取整列的值
table.cell(row,col).value 获取逐个单元格的内容
xlwt模块:
file=xlwt.Workbook()
table=file.add_sheet(‘name.sheet‘) 新建一个sheet
table.write(row,col,value) 在表格中写入值
table.write(0,0,‘test‘)
file.save(‘name.xls‘) 保存xls文件
MySQLdb模块:
import MySQLdb as mysql
conn=mysql.connect(host=‘IP‘,user=‘username‘,passwd=‘password‘,port=‘3306‘,db=‘data‘) 创建数据库链接
cur=conn.cursor() 获取游标
data=http://www.mamicode.com/cur.execute(command) 加载sql命令语句
cur.fetchone()/cur.fetchall() 执行加载的sql命令
conn.commit() 保存操作
conn.close() 关闭数据库的链接状态
psutil模块的基础用法:
进程信息:
1、psutil.pids():列出所有进程的id
2、p=psutil.Process(pid):实例化一个进程
3、p.name():显示进程名字
4、p.exe():进程的bin路径
5、p.cwd():进程的绝对路径
6、p.status():进程的状态
7、p.create_time():进程创建的时间
8、p.memory_percent():进程的内存使用率
9、p.memory_info:进程内存的rss、vms信息。
10、p.io_counters():进程的io信息,包括IO数及字节数
11、p.connections():返回打开进程socket的namedutples列表,包括fs、family、laddr的信息。
12、p.num_threads():进程开启的线程数
内存信息:
13、mem=psutil.virtual_memory():获取整体内存信息 swap=psutil.swap_memory():显示交换分内存信息。
14、mem.total:显示全部内存大小
15、mem.used:显示已用内存
16、mem.free:显示空闲内存
cpu信息:
17、psutil.cpu_count():显示cpu个数
18、psutil.cpu_count(logical=False):显示cpu物理个数
19、psutil.cpu_times():显示cpd的整个信息
硬盘信息:
20、psutil.disk_io_counters():获取磁盘的完整信息。
21、part=psutil.disk_partitions():获取分区表的分区信息
22、psutil.disk_usage(‘/‘):获取"/"分区的信息
其他信息:
23、psutil.users():获取开机时间
24、psutil.boot_time():以linux格式返回当前时间
25、datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M%S")
字符串的基础用法(string):
find:
查找索要寻找的字符串的起始索引位置
用法:
‘machenglong‘.find(‘long‘)
指定搜索范围:
‘machenglong‘.find(‘long‘,1,-1)
join:
将数列转换为字符串。
用法:
a=list(‘long‘)
b=‘+‘
b.join(a) 注:其中b是指在转化数列a时在其中添加b
lower:
将字符串转化为小写
用法:
‘MACHENGLONG‘.lower()
upper:
将字符串转化为大写
用法:
‘machenglong‘.upper()
replace:
替换字符串
用法:
‘machenglong‘.replace(‘ma‘,‘cheng‘)
split:
与join的用法相反。
用法:
a=‘1+2+3+4+5‘
a.split(‘+‘)
strip:
去除字符串两边的空格
用法:
‘ machenglong ‘.strip()
lstrip、rstrip
translate:
在指定范围中将指定的字符串全部替换为指定的字符串。
用法:
1、制作需替换的字符表:
from string import maketrans
a=maketrans(‘cs‘,‘kz‘)
len(a)
a[97:123]指定替换范围
2、‘machenglong‘.translate(a) 替换字符串中的cs字符为kz
‘ma cheng long‘.translate(a,‘ ‘) 第二个参数是用来指定需要删除的字符。
爬虫框架的安装(scrapy):
安装setuptools
安装Zope.Interface
安装Twisted
安装w3lib
安装libxml2
安装pyOpenSSL
安装Scrapy
linux基础的一些常见问题总结_学习笔记