linux使用的日常问题

这片文章会一直写下去,当篇幅过大时会截断继续

克隆的虚拟机网卡配置的问题

参考文章:http://www.jb51.net/article/111941.htm

一. 问题描述

虚拟机克隆后,由于网卡信息不一致的问题,导致不能上网或者执行“sercice network restart”命令失败

二. 原因分析

由于克隆后的系统,系统只是修改了虚拟机的名字和MAC等,并在/etc/udev/rules.d/70-persistent-net.rules文件中增加了一行名为eth1的设备名

三. 解决方法

修改文件/etc/udev/rules.d/70-persistent-net.rules和/etc/sysconfig/network-scripts/ifcfg-eth0,使得两个文件中的设备名和MAC地址相对应
(参看文章写的很详细就不上图了)

手动生成70-persistent-net.rules

项目中使用的ubantu系统,本来使用的是网线连接,但是在搬到客户那边去后使用光纤,为了不更改服务器间的配置,此时需要更改网卡配置名称,将光纤设备名改为之前的eth0,而这个系统版本默认没有70-persistent-net.rules文件:

  1. export MATCHADDR="00:f1:f3:1a:f0:05" 光纤网卡的mac地址,一定要小写
  2. export INTERFACE=eth0 eth0网卡名称
  3. /lib/udev/write_net_rules 此时会生成70-persistent-net.rules文件,内容如下

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?", ATTR{address}=="00:f1:f3:1a:f0:05", KERNEL=="eth", NAME="eth0"

重复上面的步骤可在70-persistent-net.rules文件追加网卡的信息

Linux下内存的Buffer和Cache

参考文章:http://www.cnblogs.com/JohnABC/p/5799781.html

内存的监控

[root@jinbo ~]# free -m

                  total       used       free     shared    buffers     cached
Mem:               980        164        816          0         10         41
-/+ buffers/cache:            112        868
Swap:              1983         0       1983

我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。

total1:表示物理内存总量。
used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free1:未被分配的内存。
shared1:共享内存,一般系统不会用到,这里也不讨论。
buffers1:系统分配但未被使用的buffers 数量。
cached1:系统分配但未被使用的cache 数量。
used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。
free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

关系等式:
used1 = buffers1 + cached1 + used2  free2 = buffers1 + cached1 + free1

上面提到free命令输出的内存状态,可以通过两个角度来查看:一个是从内核的角度来看,一个是从应用层的角度来看的

buffers和cached的异同

在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写 数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。然而,如果有大量数据需要从磁盘读取到内存或者由内存写入磁盘时,系统的读写性 能就变得非常低下,因为无论是从磁盘读数据,还是写数据到磁盘,都是一个很消耗时间和资源的过程,在这种情况下,Linux引入了buffers和 cached机制。

buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件属性信息,这样当操作系统需要读取某些文件时,会首先在buffers 与cached内存区查找,如果找到,直接读出传送给应用程序,如果没有找到需要数据,才从磁盘读取,这就是操作系统的缓存机制,通过缓存,大大提高了操 作系统的性能。但buffers与cached缓冲的内容却是不同的。

buffers是用来缓冲块设备做的,它只记录文件系统的元数据(metadata)以及 tracking in-flight pages,而cached是用来给文件做缓冲。更通俗一点说:buffers主要用来存放目录里面有什么内容,文件的属性以及权限等等。而cached直接用来记忆我们打开过的文件和程序。

执行 find /* -name *.conf ,看看buffers的值是否变化,然后重复执行find命令,看看两次显示速度有何不同。

dd命令

dd与cp的区别

参考文章:http://blog.csdn.net/erazy0/article/details/6087554
dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd命令使用

1. [linux 下dd命令直接清除分区表(不用再fdisk一个一个的删除啦)
分区表是硬盘的分区信息,要删除一个硬盘的所有分区表很麻烦的,需要fdisk一个一个的删除,其实dd命令可直接清除分区信息,当然,这也是给root用户留下的作死方法之一。
dd 命令主要参数如下
  if= in file 输入文件,linux下文件的概念应用范围相当广,通常是普通光盘镜像文件或者块设备
  of= out file 输出文件,通常是普通光盘镜像文件或者块设备
  bs= buffer size 缓存区大小,你可以认为dd命令读取一块输入文件到buffer(缓存区),然后将缓存区的内容吸入到输出文件。通常可将bs=1M或者bs=1KB之类的。
  count= 读取输入文件的最多次数。默认情况下,dd命令直接把输入文件已知读取到文件末尾,这个参数可以控制读取的大小。
  skip= 跳过文件开头的大小。默认错排能个文件开头开始读取。
例子:
  将U盘当前状态保存下来成为一个文件。
  dd if=/dev/sdb of=/backup/ISO/Upan/save.iso
  清空U盘的分区信息(慎重使用)
  dd if=/dev/zero of=/dev/sdb bs=512K count=1

小测试:

##CentOS最小化安装默认没有partprobe命令
#yum -y install parted
#dd if=/dev/sda of=/tmp/sda_mbr bs=512 count=1    #备份sda的分区表
#dd if=/tmp/sda_mbr of=/dev/sdc   #将sda的分区信息写入sdc的mbr中
#partprobe    #使内核重读分区表信息,partprobe /dev/sdc
#lsblk

最好使用fdisk -l来看

linux使用的日常问题_第1张图片
1.png

linux使用的日常问题_第2张图片
2.png

2.使用dd命令快速生成大文件和测试硬盘的IO性能

http://m.blog.csdn.net/bug1314/article/details/43152225

3. dd命令使用详解

http://www.360doc.com/content/14/1010/22/4171006_415914841.shtml

补充:新建磁盘分区作为swap分区

#swapoff -a     #swapon -a,停止或打开所有的swap分区
##使用fdisk命令:新建分区,在fdisk中用“t”命令将新添的分区id改为82(Linux swap类型)
#mkswap /dev/sdc1  #格式化swap分区
#swapon /dev/sdc1      #启动新的swap分区
#free -m
##编辑/etc/fstab

fuser命令

参考文档:https://www.cnblogs.com/lizhilin/p/5111004.html

fuser功能

fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息.
fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访问类型。 访问类型如下:
c 代表当前目录
e 将此文件作为程序的可执行对象使用
f 打开的文件。默认不显示。
F 打开的文件,用于写操作。默认不显示。
r 根目录。
m 映射文件或者共享库。
s 将此文件作为共享库(或其他可装载对象)使用
当指定的文件没有被访问,或者出现错误的时候,fuser会返回非零。

常用选项

-m name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称name)。
-v 详细模式。输出似ps命令的输出,包含PID,USER,COMMAND等许多域,如果是内核访问的那么PID为kernel.
-k 杀掉访问文件的进程。如果没有指定-signal就会发送SIGKILL信号。结合 –signal
-u 在每个PID后面添加进程拥有者的用户名称。

假设无法卸载的设备为/dev/sdb1 
1)运行下面命令看一下哪个用户哪个进程占用着此设备 
fuser -m -v /dev/sdb1

2)运行下面命令杀掉占用此设备的进程 
fuser -m -v -k /dev/sdb1 
或者fuser -m -v -k -i  /dev/sdb1(每杀掉一下进程会让你确认) 
3)再umount

查看那些程序使用tcp的80端口: 
$fuser -n tcp 80 
或$fuser -v -n tcp 80 
或$fuser -v 80/tcp 

制作本地和局域网软件源

系统环境:ubuntu 14.04.5

1.apt-get 安装的软件会存在/var/cache/apt/archives目录下
2.dpkg-scanpackages生成包的依赖信息,apt-get install dpkg-dev

制作本地软件源

一般是这种情况:同样系统的两台服务器其中一台装了这个软件,而另一台却没有装,这时我们可以这样;
复制到U盘中
将下载好的包( /var/cache/apt/archives目录下的所有文件)复制到U盘中,准备转移。如果你不想拷贝多余的包文件,你可以提前将 /var/cache/apt/archives 目录清空后再下载需要的包。

在另一服务器上创建软件源目录/var/debs,将U盘中下载好的包文件全部复制到/var/debs目录下

生成包的索引文件

apt-get install dpkg-dev
dpkg-scanpackages /var/debs  /dev/null  | gzip > /var/debs/Packages.gz

在 /etc/apt/sources.list 中添加本地目录
将sources.list 原来的内容都注释掉。在最后添加

deb file:/var debs/

更新索引

apt-get update

现在可以安装包了。运行sudo apt-get install <包名> 就会像以前一样安装好了指定的包了。

制作局域网软件源

在有源的节点上搭建ftp服务器

apt-get install vsftpd

默认的话vsftp是不允许匿名登录的,修改vim /etc/vsftpd.conf文件

anonymous_enable=YES       ///默认为no 修改为yes就是允许匿名用户登录

匿名用户登录的默认目录是:/srv/ftp

把下载的包移到/srv/ftp下。

制作源的索引

root@demolr01n02:/srv/ftp# dpkg-scanpackages ./ | gzip >/srv/ftp/Packages.gz

修改完重启服务 service vsftpd restart

在局域网的机器上配置/etc/apt/source.list

修改之前就得把原来的source.list先备份一下
#vi /etc/apt/sources.list
deb ftp://192.168.0.199/ /

#apt-get update   #更新索引

参考文档:https://www.cnblogs.com/gzxbkk/p/7809296.html

你可能感兴趣的:(linux使用的日常问题)