四月 11th, 2016

首先,我们知道基于文件的几种服务:ftp,sftp,这两种服务都是文件传输服务,偏重于网络传输,并不是实时互访。通常,我们需要在远程和本地 同时操作同一个目录,如:在Windows下使用各种强大的IDE编辑代码,在Linux下编译和运行该代码。如果在Windows下编写好代码再拷贝到 Linux下编译,这样修改时很费事,直接在Linux下修改,还要同步回Windows,相当费事。当然有人会说,所有的工作都在Linux下搞 定,VI、Linux命令行足够强大,没有需要使用Windows系统的理由,本文的重点不在讨论命令行熟练程度与工作效率的问题。

怎样像访问本地文件系统一样访问远程的文件呢?如果远程的系统与本地系统是不同类型的,又该如何做呢。

我们知道,在Windows系统之间,可以通过共享目录的方式,让远程系统直接访问。其实这里是Windows提供一种远程文件系统机制,NAS协 议的一种——CIFS协议。如果是Linux系统呢,同样有另外一种NAS协议——NFS协议来实现远程访问。那么这两种NAS协议能否互通呢?答案是否 定的。虽然二者不能互通,但是,在Linux系统上面已经有了CIFS协议的服务端和客户端的实现,这样,无论是Linux给Windows共享还是 Windows给Linux共享都可以借助这些已有的实现来做到了。

相反的,Windows上面有没有NFS的客户端或者服务端呢?也有,但是不常用,这里就不详细介绍了。

这里主要围绕着Linux上面使用CIFS协议来阐述如何实现两个系统之间的跨文件系统,跨操作系统共享。按照上面的描述,有两种方式来实现共享。Linux分别作为CIFS的服务端和客户端。下面分别就这两种方式来说明操作步骤和简单的原理介绍:

一、Samba软件实现共享Linux文件系统给Windows用户

Samba软件被誉为10大最有价值的开源软件之第五位。其获取方式非常容易,配置使用也非常简单。下面以fedora系统为例,先看一下本地是否 已经安装好samba,如果/etc/init.d/smb 文件存在,则说明已经安装好了samba软件,否则使用如下命令安装:

  1. yum install samba

安装完成后,修改配置文件,打开:/etc/samba/smb.conf,在文件末尾加上如下配置:

  1. [root]
  2.   comment = root
  3.   path = /
  4.   creat mask = 64
  5.   writeable = yes
  6.   browseable = yes
  7.   valid users = root

这个配置的意思是,创建一个名为root的共享,将根文件目录“/”共享给用户。允许登录的用户名是root。

然后给samba系统添加root用户,使用如下命令:

  1. smbpasswd -a root

按照提示设置root用户的密码。

重新启动samba服务。

  1. service smb restart

检查smb进程是否已经运行:

  1. root      1787  0.0  0.4  33068  4784 ?        Ss   21:51   0:00 smbd
  2. root      1788  0.0  0.2  33068  2580 ?        S    21:51   0:00  \_ smbd

在需要访问该Linux系统的Windows客户机上面,打开Windows的资源管理器,在地址栏输入:\\192.168.1.110

会发现,提示有一个共享root,双击访问时,提示输入用户名和密码,输入此前配置的root用户和密码即可访问。这里就是Samba软件实现了 CIFS的服务端,Windows资源管理作为客户端访问远程的共享文件系统。为了更为方便的使用该文件系统,还可以将该共享映射成一个本地的盘符,让 Windows上面的各种工具像使用本地磁盘一样使用该目录。所有在Windows上面对该共享做的操作都会实时同步到Linux系统上面。

二、Linux访问Windows的共享

上面的借助于Samba的方式是大家常用的。还有一种,Windows系统天然就是一个CIFS的服务端和客户端,既然Windows系统可以给 Windows系统共享目录,那么Linux系统能否访问这些共享呢?答案是肯定的,由于有强大的VFS支撑,Linux支持挂载和访问各种文件系统。 mount工具支持挂在CIFS甚至NTFS的文件系统。如果是Windows本机上面的Linux虚拟机,那么可以直接通过虚拟机管理软件,如 Vmware直接共享本地的磁盘分区给Linux系统,Linux系统根据Windows的磁盘分区的文件系统类型挂载即可。这里不详述该方案。

进入本段的正题,首先我们需要共享一个Windows的目录:

下面以Windows XP为例,Windows 7未做验证,应该类似。在共享之前,首先需要确保Windows系统的server服务处于启动状态,如下图:

server服务启动

选择需要共享的目录,右键,属性,选择“共享”页,如下图:

配置共享

选择在网络上共享这个文件夹,并指定共享名。根据需要选择是否允许远程用户修改该文件夹。这样这个文件夹就被共享给远程访问了。

共享目录

在Linux系统下挂载该共享:

  1. [root@f2 ~]# mount -t cifs -o username=“Test” //192.168.1.100/sourcecode /root/sourcecode
  2. Password for Test@//192.168.1.100/sourcecode:

按照要求输入指定用户的密码即可。

此时,Windows的共享sourcecode目录就已经挂载到Linux系统上面了,Linux系统可以像访问本地目录一样访问该目录了。

这种方法应该是更好的访问方式,因为一般而言,我们操作的文件和工作空间都是在Windows上面的,只有少数时候,需要在Linux上面进行编 译,调试。但是用起来稍显麻烦。注意,此前曾遇到过Windows系统与虚拟出来的Linux系统之间无法传输数据的问题,原因是Windows系统的防 火墙未开启。

原文链接:http://shentar.me/windows%E4%B8%8Elinux%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%BA%92%E8%AE%BF%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E6%B3%95/

四月 11th, 2016

某些环境中,系统管理员想要允许极少数用户在可以传输文件到Linux机器中,但是不允许使用 SSH。要实现这一目的,我们可以使用SFTP,并为其构建chroot环境。

SFTP & chroot背景:

SFTP是指SSH文件传输协议(SSH File Transfer protocol)或安全文件传输协议(Secure File Transfer Protocol),它提供了可信数据流下的文件访问、文件传输以及文件管理功能。当我们为SFTP配置chroot环境后,只有被许可的用户可以访问,并被限制到他们的家目录中,换言之:被许可的用户将处于牢笼环境中,在此环境中它们甚至不能切换它们的目录。

在本文中,我们将配置RHEL 6.XCentOS 6.X中的SFTP Chroot环境。我们开启一个用户帐号‘Jack’,该用户将被允许在Linux机器上传输文件,但没有ssh访问权限。

步骤:1 创建组

  1. [root@localhost ~]# groupadd  sftp_users

步骤:2 分配附属组(sftp_users)给用户

如果用户在系统上不存在,使用以下命令创建( LCTT 译注:这里给用户指定了一个不能登录的 shell,以防止通过 ssh 登录):

  1. [root@localhost ~]# useradd  -G sftp_users  -s /sbin/nologin  jack
  2. [root@localhost ~]# passwd jack

对于已经存在的用户,使用以下usermod命令进行修改:

  1. [root@localhost ~]# usermod –G sftp_users  -s /sbin/nologin  jack

注意:如果你想要修改用户的默认家目录,那么可以在useradd和usermod命令中使用‘-d’选项,并设置合适的权限

步骤:3 现在编辑配置文件 “/etc/ssh/sshd_config”

  1. # vi /etc/ssh/sshd_config
  2. #comment out the below line and add a line like below
  3. #Subsystem sftp /usr/libexec/openssh/sftp-server
  4. Subsystem sftp internal-sftp
  5. # add Below lines  at the end of file
  6.   Match Group sftp_users
  7.   X11Forwarding no
  8.   AllowTcpForwarding no
  9.   ChrootDirectory %h
  10.   ForceCommand internal-sftp

此处:

  • Match Group sftp_users – 该参数指定以下的行将仅仅匹配sftp_users组中的用户
  • ChrootDirectory %h – 该参数指定用户验证后用于chroot环境的路径(默认的用户家目录)。对于用户 Jack,该路径就是/home/jack。
  • ForceCommand internal-sftp – 该参数强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令。

重启ssh服务

  1. # service sshd restart

步骤:4 设置权限:

  1. [root@localhost ~]# chmod 755 /home/jack
  2. [root@localhost ~]# chown root /home/jack
  3. [root@localhost ~]# chgrp -R sftp_users /home/jack

如果你想要允许jack用户上传文件,那么创建一个上传文件夹,设置权限如下:

  1. [root@localhost jack]# mkdir /home/jack/upload
  2. [root@localhost jack]# chown jack. /home/jack upload/

步骤:5 现在尝试访问系统并进行测试

尝试通过ssh访问系统

正如下图所示,用户jack通过SFTP登录,而且因为chroot环境不能切换目录。

现在进行上传和下载测试,如下图:

正如上图所示,jack用户的上传下载功能都工作得很好。

TAGS: ,
四月 11th, 2016

Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变,比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。

Linux默认输入是键盘,输出是显示器。你可以用重定向来改变这些设置。比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定 向后可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个文件的字符数等了。输出也是一样,你可以把屏幕输出重定向到一个文件 里,再到文件里去看结果。重定向操作符可以用来将命令输入和输出数据流从默认位置重定向到其他位置,其输入或输出数据流的位置称为句柄;常见的句柄有三 种,当然句柄可以自行扩展,一般的OS都提供类似的功能。句柄 句柄代号 句柄描述

STDIN 0 键盘输入

STDOUT 1 输出信息到提示符窗口

STDERR 2 输出错误信息到提示符窗口

默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是 1。键入 < 或 > 操作符之后,必须指定数据的读写位置,可以是文件名或其他现有的句柄。

要指定重定向到现有句柄,请使用与 & 字符,后面接要重定向的句柄号(即 &句柄号)。

例如,下面的命令可以将句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):2>&1

下表列出了可用于重定向输入和输出数据流的操作符:

Linux重定向操作符 功能描述
> 将命令输出写入文件或设备,而不是命令提示符或句柄
< 从文件而不是从键盘或句柄读入命令输入
>> 将命令输出添加到文件末尾而不删除文件中已有的信息
>& 将一个句柄的输出写入到另一个句柄的输入中
<& 从一个句柄读取输入并将其写入到另一个句柄输出中
| 从一个命令中读取输出并将其写入另一个命令的输入中;也称为管道操作符

现在我们回过头来看看上面的那条语句mysh > mylog.txt 2>&1就可明白:

> mylog.txt意思是将标准输出重定向到mylog.txt,等价于mysh 1> mylog.txt;

2 >& 1 意思是将错误输出重定向到句柄1标准输出;综合起来就是mysh命令执行过程中产生的标准输出和错误输出都会被重定向到mylog.txt中;

重定向的功能十分强大,有兴趣的可以去尝试各种不同的组合,看看前后位置变下会有什么结果?

某些时候我们可能并不希望记录什么标准输出或者是错误输出,那可以用mysh >null 2>null或者mysh >/dev/null 2>/dev/null;

I/O重定向详解

1、 基本概念(这是理解后面的知识的前提,请务必理解)

  • a、 I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9;
  • b、 常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关;
  • c、 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进;
  • d、 用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案;
  • e、 0 是 < 的默认值,因此 < 与 0<是一样的;同理,> 与 1> 是一样的;
  • f、 在IO重定向 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料;
  • g、 管道“|”(pipe line):上一个命令的 stdout 接到下一个命令的 stdin;
  • h、 tee 命令是在不影响原本 I/O 的情况下,将 stdout 复制一份到档案去;
  • i、 bash(ksh)执行命令的过程:分析命令-变量求值-命令替代(“和$)-重定向-通配符展开-确定路径-执行命令;
  • j、 将 command group 置于 sub-shell 去执行,也称 nested sub-shell,它有一点非常重要的特性是:继承父shell的Standard input, output, and error plus any other open file descriptors。
  • k、 exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这一命令时任何现有环境都将会被清除。exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。

2、 基本IO

  • cmd > file 把 stdout 重定向到 file 文件中;
  • cmd >> file 把 stdout 重定向到 file 文件中(追加);
  • cmd 1> fiel 把 stdout 重定向到 file 文件中;
  • cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 文件中;
  • cmd 2> file 把 stderr 重定向到 file 文件中;
  • cmd 2>> file 把 stderr 重定向到 file 文件中(追加);
  • cmd >> file 2>&1 把 stderr 和 stderr 一起重定向到 file 文件中(追加);
  • cmd < file >file2 cmd 命令以 file 文件作为 stdin,以 file2 文件作为 stdout;
  • cat <>file 以读写的方式打开 file;
  • cmd < file cmd 命令以 file 文件作为 stdin;
  • cmd << delimiter Here document,从 stdin 中读入,直至遇到 delimiter 分界符。

3、 进阶IO

  • >&n 使用系统调用 dup (2) 复制文件描述符 n 并把结果用作标准输出;
  • <&n 标准输入复制自文件描述符 n;
  • <&- 关闭标准输入(键盘);
  • >&- 关闭标准输出;
  • n<&- 表示将 n 号输入关闭;
  • n>&- 表示将 n 号输出关闭;

上述所有形式都可以前导一个数字,此时建立的文件描述符由这个数字指定而不是缺省的 0 或 1。如:

… 2>file 运行一个命令并把错误输出(文件描述符 2)定向到 file。

… 2>&1 运行一个命令并把它的标准输出和输出合并。(严格的说是通过复制文件描述符 1 来建立文件描述符 2 ,但效果通常是合并了两个流。)

我们对 2>&1详细说明一下 :2>&1 也就是 FD2=FD1 ,这里并不是说FD2 的值 等于FD1的值,因为 > 是改变送出的数据信道,也就是说把 FD2 的 “数据输出通道” 改为 FD1 的 “数据输出通道”。如果仅仅这样,这个改变好像没有什么作用,因为 FD2 的默认输出和 FD1的默认输出本来都是 monitor,一样的!但是,当 FD1 是其他文件,甚至是其他 FD 时,这个就具有特殊的用途了。请大家务必理解这一点。

  1. exec 0exec 1>outfilename # 打开文件outfilename作为stdout。
  2. exec 2>errfilename # 打开文件 errfilename作为 stderr。
  3. exec 0<&- # 关闭 FD0。
  4. exec 1>&- # 关闭 FD1。
  5. exec 5>&- # 关闭 FD5。

这样就完成了Linux重定向的学习。

原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/451/11757951.shtml

1重定向

1.1 重定向符号

> 输出重定向到一个文件或设备 覆盖原来的文件

> ! 输出重定向到一个文件或设备 强制覆盖原来的文件

>> 输出重定向到一个文件或设备 追加原来的文件

< 输入重定向到一个程序

1.2标准错误重定向符号

2> 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 b-shell

2>> 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件

2>&1 将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出

>& 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 c-shell

|& 将一个标准错误 管道 输送 到另一个命令作为输入

1.3命令重导向示例

在 bash 命令执行的过程中,主要有三种输出入的状况,分别是:

  • 1. 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <<BR>
  • 2. 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
  • 3. 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>
  1. [test @test test]# ls -al > list.txt

将显示的结果输出到 list.txt 文件中,若该文件以存在则予以取代!

  1. [test @test test]# ls -al >> list.txt

将显示的结果累加到 list.txt 文件中,该文件为累加的,旧数据保留!

  1. [test @test test]# ls -al 1> list.txt 2> list.err

将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err

  1. [test @test test]# ls -al 1> list.txt 2> &1

将显示的数据,不论正确或错误均输出到 list.txt 当中!错误与正确文件输出到同一个文件中,则必须以上面的方法来写!不能写成其它格式!

  1. [test @test test]# ls -al 1> list.txt 2> /dev/null

将显示的数据,正确的输出到 list.txt 错误的数据则予以丢弃! /dev/null ,可以说成是黑洞装置。为空,即不保存。

1.4为何要使用命令输出重导向

• 当屏幕输出的信息很重要,而且我们需要将他存下来的时候;

• 背景执行中的程序,不希望他干扰屏幕正常的输出结果时;

• 一些系统的例行命令(例如写在 /etc/crontab 中的文件)的执行结果,希望他可以存下来时;

• 一些执行命令,我们已经知道他可能的错误讯息,所以想以『 2> /dev/null 』将他丢掉时;

• 错误讯息与正确讯息需要分别输出时。

2 管线命令 ( pipe )

就如同前面所说的, bash 命令执行的时候有输出的数据会出现,那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定?这就牵涉到管线命令的问题了( pipe ),管线命令使用的是『 | 』。

例子:简单的管线命令

假设我们要读取 last 这个指令中,那个 root 登入的『次数』应该怎么作?

那么我所进行的步骤是:

  • 1. 执行 last ,将所有这个月的所有人登入数据取出来;
  • 2. 使用 grep 将上面的输出数据(stdout)当中的 root 撷取出来,其它的不要;
  • 3. 使用 wc 这个可以计算行数的指令将上一步的数据计算行数!

由于 last 的输出是一行代表一次登入,所以只要计算几行就代表登入几次的意思,经由上面三个步骤,将 last 数据逐步的筛选,就可以得到我们的数据了!整个命令可以写成如下:

  1. [test @test bin]# last | grep root | wc -l

这个管线命令『 | 』仅能处理经由前面一个指令传来的正确信息,也就是standard output ( STDOUT ) 的信息,对于 stdandard error 并没有直接处理的能力。

2.1基本的管线命令指令介绍

• cut

语法:[root @test /root ]# cut -d “分隔字符” [-cf] fields

参数说明:

-d :后面接的是用来分隔的字符,预设是『空格符』

-c :后面接的是『第几个字符』

-f :后面接的是第几个区块?

范例:[root @test /root]# cat /etc/passwd | cut -d “:” -f 1

将 passwd 这个文件里面,每一行里头的 : 用来作为分隔号,而列出第一个区块!也就是姓名所在啦!

[root @test /root]# last | cut -c1-20

将 last 之后的数据,每一行的 1-20 个字符取出来!

• sort

语法:[root @test /root ]# sort [-t 分隔符] [(+起始)(-结束)] [-nru]

参数说明:

-t 分隔符:使用分隔符来隔开不同区间,预设是 tab

+start -end:由第 start 区间排序到 end 区间

-n :使用『纯数字』排序(否则就会以文字型态来排序)

-r :反向排序

-u :相同出现的一行,只列出一次!

范例:

  1. [root @test /root]# cat /etc/passwd | sort将列出来的个人账号排序!
  2. [root @test /root]# cat /etc/passwd | sort -t: +2n将个人账号中,以使用者 ID 来排序(以 : 来分隔,第三个为 ID ,但第一个代号为 0 之故)
  3. [root @test /root]# cat /etc/passwd | sort -t: +2nr反相排序啰!

• wc

语法:[root @test /root ]# wc [-lmw]

参数说明:

-l :多少行

-m :多少字符

-w :多少字

范例:

  1. [root @test /root]# cat /etc/passwd | wc -l这个文件里头有多少行?
  2. [root @test /root]# cat /etc/passwd | wc -w这个文件里头有多少字!?

• uniq这个指令用来将『重复的行删除掉只显示一个』

语法:[root @test /root ]# uniq

范例:

  1. [root @test /root]# last | cut -d” ” -f1 | sort | uniq

• tee命令重定向到文件的同时将数据显示在屏幕上

语法:[root @test /root ]# last | tee last.list | cut -d ” ” -f1

范例:

  1. [root @test /root]# last | tee last.list | cut -d ” ” -f1

• tr

语法:[root @test /root ]# tr [-ds] SET1

参数说明:

-d :删除 SET1 这个字符串

-s :取代掉重复的字符!

范例:

  1. [root @test /root]# last | tr ‘[a-z]‘ ‘[A-Z]‘ <==将小写改成大写
  2. [root @test /root]# cat /etc/passwd | tr -d : <== : 这个符号在 /etc/passwd 中不见了!
  3. [root @test /root]# cat /home/test/dostxt | tr -d ‘\r’ > dostxt-noM

• split

语法:[root @test /root ]# split [-bl] 输入文件 输出文件前导字符

参数说明:

-b :以文件 size 来分

-l :以行数来分

范例:

  1. [root @test /root]# split -l 5 /etc/passwd test <==会产生 testaa, testab, testac… 等等的文件

说明:在 Linux 底下就简单的多了!你要将文件分割的话,那么就使用 -b size 来将一个分割的文件限制其大小,如果是行数的话,那么就使用 -l line 来分割!

管线命令在 bash 的连续的处理程序中是相当重要的!另外,在 log file 的分析当中也是相当重要的一环。

管道输送到一个命令的标准输入可以使用标准输入参数”-“ 进行更仔细的控制.如cat命令的示例

原文链接:http://outofmemory.cn/wr/?u=http%3A%2F%2Fopkeep.com%2F

四月 11th, 2016

linux总共做的事可以分为五步来完成。

1、 BIOS加电自检:

加电自检,检测硬件设备。然后按照cmos上面的顺序来搜索处在活动状态下的可以引导的设备。可以是光驱、软盘、USB等。

2、 加载主引导加载程序(MBR):

主引导程序是一个512字节的映像。包含一点机器码还有一个小的分区。

主引导程序的任务就是查找并且加载处在硬盘分区上的次引导程序。通过分区表查找活动分区,并将处在活动分区的次引导加载程序读取到内存里面运行

3、 加载次引导记载程序(GRUB)

次引导加载程序只要就是加载linux内核。

上一阶段结束之后次引导加载程序就会在内存里面跑起来。就会出现GRUB图形界面,让用户选择加载什么样的内核。

4、 linux内核映像:

用户选择要加载的内核之后,次引导加载程序(GRUB)就会根据/boot/grub.conf配置文件中所设置的信息,从/boot/所在的分区上读取Linux内核映像,然后把内核映像加载到内存中并把控制权交给Linux内核。

linux内核获得控制权之后开始干自己的事

  •  检测硬件
  •  解压缩自己并安装必要驱动
  •  初始化与文件系统相关的虚拟设备,LVM或RAID
  •  装载根文件系统,挂在根目录下面
  •  完成之后,linux在进程空间里面加载init程序,下面轮到init干活
  •  init进程

init是所有进程的发起者和控制者,所有的进程都由此衍生。

init进程获得控制权之后,它会执行/etc/rc.d/rc.sysinit脚本,根据里面的代码设置环境变量、网络、启动swap、检查并挂载文件系统、执行其他初始化工作。

至此,linux启动完成。

我们稍微总结一下:

首先是BIOS加电自检,之后加载主引导加载程序、次引导加载程序,最后就是linux内核映像,完了把控制权交给init进程,完成初始化工作。

swap分区是什么?

类似windows系统中的虚拟内存,当物理内存不够用的时候,使用swap中的内存。

原文链接:http://www.cnblogs.com/lamian/p/3971195.html

TAGS: ,
四月 8th, 2016

FIND命令

很多Linux用户喜欢使用find命令来查找文件,例如他们通常喜欢这样做:

find / -name ‘pattern’

确实find的强大功能不仅仅用来查找文件,它能用来定位更加细节的东西,比如你想在某个目录下找到一些赋予其拥有者和管理员可写的权限( if you wanted to find files which are writable by both their owner and their group),可以这样做:

find / -perm -444 -perm /222 ! -perm /111

又或者你想看看在你的下载目录下的过去24小时之内被修改过的文件,

find /home/user/Downloads/ -mtime 0

find命令的强大不仅仅用于查找文件,其搜索磁盘的时候是需要时间的。那么有没有快速定位的方法呢?

LOCATE命令

在使用locate之前,你得确认系统是否安装了mlocate包,现在大多数Linux发行版都集成了此包。如果没有安装,可以访问mlocate主页(http://carolina.mff.cuni.cz/~trmac/blog/mlocate/)下载安装。下载安装成功后,你需要执行一条命令为你的文件系统索引。否则你就得等到程序哪天自动执行了。

已root用户身份执行如下命令:

updatedb &

这条命令会后台更新你的mlocate数据库,这数据库包含了你的文件系统的索引(This updates the mlocate database that indexes your files and forks it to the background (the ‘&’ forks it to the background)。

等这条命令执行完了,你可以轻松的使用locate命令:

locate firefox | less

这会快速地定位有关firefox的文件、目录等等。速度也比find快,因为它读取的是mlocate数据库里面的索引!

原文链接:http://blog.csdn.net/hanszang/article/details/37994671

TAGS: ,
四月 8th, 2016

在我们面对的日常工作中,各种平台上的归档文件有可能是Windows、Mac或Linux等类型。几款应用软件可供所有平台创建归档文件以及对归档文件进行解压缩。说到在Linux平台上工作,我们需要非常频繁地处理归档文件。
Linux命令行归档工具

我们在本文中将探讨标准Linux发行版上可供使用的归档工具、功能特性以及实例等。文章分上下两部分,每个部分各自介绍了五款命令行归档工具(也就是说,总共介绍了十款最佳的Linux命令行工具)。

何谓归档文件

归档文件是经过压缩的文件,它由一个或多个计算机文件以及元数据组成。

归档的功能特性

  • 数据压缩
  • 加密
  • 文件并置
  • 自动解压
  • 自动安装
  • 源卷和介质信息
  • File spanning
  • 校验和
  • 目录结构信息
  • 其他元数据(关于数据的数据)
  • 错误发现

应用领域

  • 存储计算机文件系统以及元数据。
  • 适用于本地传送文件。
  • 适用于通过互联网传送文件。
  • 软件包装应用程序。

标准Linux发行版上实用的归档应用软件包括如下:

1. tar命令

tar是标准的UNIX/Linux归档应用软件工具。在早期阶段,它曾经是一款磁带归档软件,后来慢慢发展成了通用归档软件包,能够处理各种类型的归档文件。tar可接受许多带选项的归档过滤器。

tar选项

  • -A:将tar文件添加到现有归档的末尾。
  • -c:创建一个新的归档文件。
  • -d:使用指定的文件系统比较归档。
  • -j:用bzip压缩归档。
  • -r:将文件添加到现有归档的末尾。
  • -t:列出现有归档的内容。
  • -u:更新归档。
  • -x:从现有归档解压文件。
  • -z:用gzip压缩归档。
  • –delete:从现有归档删除文件。

tar实例

创建一个tar归档文件。

  1. # tar -zcvf name_of_tar.tar.gz /path/to/folder

对tar归档文件进行解压缩。

  1. # tar -zxvf Name_of_tar_file.tar.gz

想了解更详细的例子,请参阅《Linux下的18个Tar命令实例》一文:http://www.tecmint.com/18-tar-command-examples-in-linux/。

2. shar命令

shar代表外壳归档,这是一个外壳脚本,执行该脚本就可以创建文档。shar是自解压归档文件,这是一款老式实用工具,需要Unix Bourne外壳来解压文件。shar的优势在于采用明文格式,不过它可能很危险,因为它输出的是可执行文件。

shar选项

  • -o:将输出保存到选项中指定的归档文档。
  • -l:限制选项中指定的输出文件大小,但不分割输入文件。
  • -L:限制在选项中指定的输出文件大小,但分割输入文件。
  • -n:归档名称添加到shar文件的头部中。
  • -a:允许自动生成文件头部。

注意:如果使用了“-l”或“-L”选项,就要用“-o”选项;如果使用了“-a”选项,就要用“-n”选项。

shar实例

创建一个shar归档文件。

  1. # shar file_name.extension > filename.shar

解压shar归档文件。

  1. # unshar file_name.shar

3. ar命令

ar是创建和处理归档的实用工具,主要用于二进制对象文件库。ar代表归档工具,可用于归档任何用途的各种归档,但是基本上已被“tar”取而代之;现如今,它只用于创建和更新静态库文件。

ar选项

  • -d:从归档中删除模块。
  • -m:移动归档中的成员。
  • -p:显示归档的指定成员的内容。
  • -q:快速添加。
  • -r:将文件成员插入到归档。
  • -s:为归档添加索引。
  • -a:将新文件添加到归档的现有成员。

ar实例

使用“ar”工具创建一个归档,静态库为“libmath.a”,两个对象文件为“substraction”和“division”,具体如下。

  1. # ar cr libmath.a substraction.o division.o

解压“ar”归档文件。

  1. # ar x libmath.a

4. cpio

cpio代表Copy in and out(拷贝输入和输出)。cpio是一款面向Linux的通用文件归档工具。它被红帽软件包管理器(RPM)积极使用,用于Linux内核的 initramfs(初始RAM文件系统)中,还是苹果公司的安装工具(pax)中的一个重要归档工具。

cpio选项

  • -0:读取由空字符终止而不是由换行符终止的文件名列表。
  • -a:复位访问时间。
  • -A:添加到现有归档。
  • -b:交换。
  • -d:创建目录。

cpio实例

创建一个“cpio”归档文件。

  1. # cd tecmint
  2. # ls
  3. file1.o file2.o file3.o
  4. # ls | cpio -ov > /path/to/output_folder/obj.cpio

解压cpio归档文件。

  1. # cpio -idv < /path/to folder/obj.cpio

5. gzip

gzip是一种标准的、广泛应用的文件压缩和解压缩实用工具。gzip允许文件并置。用gzip压缩文件,可以得到格式为“*.tar.gz”或“*.tgz”的tarball打包文件。

gzip选项

  • –stdout:将输出写到标准输出设备上。
  • –to-stdout:将输出写到标准输出设备上。
  • –decompress:解压缩文件。
  • –uncompress:解压缩文件。
  • -d:解压缩文件。
  • -f:强行压缩/解压缩。

gzip实例

创建一个“gzip”归档文件。

  1. # tar -cvzf name_of_archive.tar.gz /path/to/folder

解压缩“gzip”归档文件。

  1. # gunzip file_name.tar.gz

执行上面这个命令后必须紧跟着执行下面这个命令。

  1. # tar -xvf file_name.tar

注意:由于gzip的架构和功能,很难恢复受损坏的用gzip处理的tar归档文件。所以建议在不同的地方对用gzip处理的重要文件做几个备份。

暂且介绍这么多。我们会在下一篇文章中介绍另外面向Linux的压缩和解压缩应用软件。敬请关注。

英文:http://www.tecmint.com/command-line-archive-tools-for-linux/

四月 8th, 2016

Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行 的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从 Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。其实,Swap的调整对Linux服务器,特别是Web服务器 的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。

计算机用户会经常遇这种现象。例如,在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗 哗” 直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自己的数 据,将其放进内存,然后接着运行。

需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到 文件 系统。例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去 时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下 次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不 同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一 些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。

突破128M Swap限制

经常看到有些Linux(国内汉化版)安装手册上有这样的说明:Swap空间不能超过128M。为什么会有这种说法?在说明“128M”这个数字的来历之前,先给问题一个回答:现在根本不存在128M的限制!现在的限制是2G!

Swap空间是分页的,每一页的大小和内存页的大小一样,方便Swap空间和内存之间的数据交换。旧版本的Linux实现Swap空间时,用 Swap空 间的第一页作为所有Swap空间页的一个“位映射”(Bit map)。这就是说第一页的每一位,都对应着一页Swap空间。如果这一位是1,表示此页Swap可用;如果是0,表示此页是坏块,不能使用。这么说来, 第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个映射位也被占用,用来表示Swap的版本(原来的版本是 Swap_space ,现在的版本是swapspace2)。那么,如果说一页的大小为s,这种Swap的实现方法共能管理“8 * ( s – 10 ) – 1”个Swap页。对于i386系统来说s=4096,则空间大小共为133890048,如果认为1 MB=2^20 Byte的话,大小正好为128M。

Swap配置对性能的影响

分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。

如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数 量衍 生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。

通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应 用,应 有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web 服务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。

另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流 的方 式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间 处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

建立一个有连续空间的空白文件

服务器的物理内存是512MB,按照1.5~2倍原则,我将swap文件设置为1GB。

  1. #root @aliyun :/srv# dd if=/dev/zero of=SWAPFILE bs=1024 count=1048576 1048576+0 records in 1048576+0 records out 1073741824 bytes (1.1 GB) copied, 59.7957 s, 18.0 MB/s
  2. #root@aliyun :/srv# dd if=/dev/zero of=SWAPFILE bs=1024 count=1048576
  3. 1048576+0 records in
  4. 1048576+0 records out
  5. 1073741824 bytes (1.1 GB) copied, 59.7957 s, 18.0 MB/s

使用swap文件

使用swapon命令让系统使用这个文件作为swap文件。但是这个文件不能直接使用,否则会报错:

  1. root @aliyun :/srv# swapon swapfile swapon: /srv/swapfile: read swap header failed: Invalid argument
  2. root@aliyun:/srv# swapon swapfile
  3. swapon: /srv/swapfile: read swap header failed: Invalid argument

必须先使用mkswap将文件格式化成swap格式(不知道为什么会少了4KB):

  1. root @aliyun :/srv# mkswap SWAPFILE 1048576 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=1aaed031-33ef-479b-a9a4-2f008a7bbb2f
  2. root@aliyun:/srv# mkswap SWAPFILE 1048576
  3. Setting up swapspace version 1, size = 1048572 KiB
  4. no label, UUID=1aaed031-33ef-479b-a9a4-2f008a7bbb2f

使用格式化完毕的文件:

  1. root @aliyun :/srv# swapon SWAPFILE
  2. root@aliyun:/srv# swapon SWAPFILE

查看文件使用情况:

  1. root@aliyun:/srv# swapon -s Filename Type Size Used Priority /srv/SWAPFILE file 1048572 95852 -1
  2. root@aliyun:/srv# swapon -s
  3. Filename                                Type            Size    Used    Priority
  4. /srv/SWAPFILE                           file            1048572 95852   -1

加入自动启用

为避免重启后swapfile生效,可以将启用swap的代码加入启动文件中,对于ubuntu server,编辑/etc/rc.local文件,加入以下内容(具体文件路径自定):

  1. swapon /srv/SWAPFILE
  2. swapon /srv/SWAPFILE

或者

修改/etc/fstab文件,加入以下内容:

  1. /srv/SWAPFILE swap swap defaults 0 0
  2. /srv/SWAPFILE   swap    swap    defaults        0       0

原文链接:http://my.oschina.net/renguijiayi/blog/299150

TAGS: ,
四月 8th, 2016

一:查看cpu

  1. more /proc/cpuinfo | grep “model name”
  2. grep “model name” /proc/cpuinfo

如果觉得需要看的更加舒服

  1. grep “model name” /proc/cpuinfo | cut -f2 -d:

怎么样,linux的命令就要这样熟悉。

二:查看内

  1. [root@CentOS ~]# grep MemTotal /proc/meminfo
  2. [root@CentOS ~]# grep MemTotal /proc/meminfo | cut -f2 -d:
  3. [root@CentOS ~]# free -m |grep “Mem” | awk ‘{print $2}’
  4. [root@CentOS ~]# free -m

三:查看cpu是32位还是64位

查看CPU位数(32 or 64)

  1. [root@CentOS ~]# getconf LONG_BIT
  2. [root@CentOS ~]# echo $HOSTTYPE
  3. [root@CentOS ~]# uname -a

四:查看当前linux的版本

  1. [root@CentOS ~]# more /etc/redhat-release
  2. [root@CentOS ~]# cat /etc/redhat-release

五:查看内核版本

  1. [root@CentOS ~]# uname -r
  2. [root@CentOS ~]# uname -a

六:查看当前时间

  1. [root@CentOS ~]# date

七:查看硬盘和分区

  1. [root@CentOS ~]# df -h
  2. [root@CentOS ~]# fdisk -l

也可以查看分区

  1. [root@CentOS home]# du -sh

可以看到全部占用的空间

  1. [root@CentOS home]# du /var/www -sh

可以看到这个目录的大小

八:查看安装的软件包

查看系统安装的时候装的软件包

  1. cat -n /root/install.log
  2. more /root/install.log | wc -l

查看现在已经安装了那些软件包

  1. [root@CentOS home]# rpm -qa
  2. …………………..
  3. …………………..
  4. …………………..
  5. …………………..
  6. …………………..
  7. [root@CentOS home]# rpm -qa | wc -l
  8. [root@CentOS home]# yum list installed | wc -l

不过很奇怪,我通过rpm,和yum这两种方式查询的安装软件包,数量并不一样。没有找到原因。

九:查看键盘布局

  1. [root@CentOS home]# cat /etc/sysconfig/keyboard
  2. [root@CentOS home]# cat /etc/sysconfig/keyboard | grep KEYTABLE | cut -f2 -d=

十:查看selinux情况

  1. [root@CentOS home]# sestatus
  2. [root@CentOS home]# sestatus | cut -f2 -d:
  3. [root@CentOS home]# cat /etc/sysconfig/selinux

十一:查看ip,mac地址

在ifcfg-eth0 文件里你可以看到mac,网关等信息。

  1. [root@CentOS home]# ifconfig
  2. [root@CentOS home]# cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth0
  3. [root@CentOS home]# cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth0 | grep IPADDR | cut -f2 -d=
  4. [root@CentOS home]# ifconfig eth0 |grep “inet addr:” |awk ‘{print $2}’|cut -c 6-
  5. [root@CentOS home]# ifconfig | grep ‘inet addr:’| grep -v ‘127.0.0.1’ | cut -d: -f2 | awk ‘{ print $1}’

查看网关

  1. [root@CentOS home]# cat /etc/sysconfig/network

查看dns

  1. [root@CentOS home]# cat /etc/resolv.conf

十二:查看默认语言

  1. [root@CentOS home]# echo $LANG $LANGUAGE
  2. [root@CentOS home]# cat /etc/sysconfig/i18n

十三:查看所属时区和是否使用UTC时间

  1. [root@CentOS /]# cat /etc/sysconfig/clock

十四:查看主机名

  1. [root@CentOS /]# hostname
  2. [root@CentOS /]# cat /etc/sysconfig/network

修改主机名就是修改这个文件,同时最好也把host文件也修改

原文链接:http://blog.sina.com.cn/s/blog_6e0c0fdf0101c34b.html

四月 8th, 2016

在不同的Linux发行版中,会有不同的GUI程序可以显示各种系统信息,比如SUSE Linux发行版中,就有非常棒的图形化的配置和管理工具YaST,KDE桌面环境里的KDE System Guard也很不错。

然而,对于一名Linux系统管理员来说,除非迫不得已,否则不会在Linux服务器上去运行这样的GUI程序,主要还是因为GUI会占用很多的系 统资源。所以呢,使用GUI工具一般都是做简单的排查,如果你真的想知道系统里真正发生了什么,那么请关掉你的GUI,快点进入Linux命令行的世界 吧。

如果希望追求最佳性能,那么Linux服务器应该运行在runlevel 3级别,也就是支持网络和多用户功能,但不支持GUI功能。如果你真的需要GUI,那么可以在命令行输入startx进入GUI。

如果你的Linux系统默认就是进入GUI,你可以调一调配置,让他默认进入runlevel 3。具体方法就是:

  • 1 打开一个终端,su到root账号
  • 2 用你喜欢的编辑器(vi/emacs/…)打开/etc/inittab文件
  • 3 查找initdefault关键字,将“id:5:initdefault:”修改为“id:3:initdefault:”

如果系统中根本就没有/etc/inittab文件的话,也没关系,直接创建这个文件,并添加新的一行“id:3”。这样的话,你再重启服务器,便会默认进入命令行状态。当然,如果你只想在临时进入命令行状态,那么直接在终端中输入“init 3”就好了。

至此,我们的命令行准备好了,下面就可以开始通过强大的命令来查看“到底服务器里发生了什么”:

  1. [01 – iostat ]
  2. [02/03 – meminfo/free ]
  3. [04 – mpstat ]
  4. [05 – netstat ]
  5. [06 – nmon ]
  6. [07 – pmap ]
  7. [08/09 – ps/pstree ]
  8. [10 – sar ]
  9. [11 – strace ]
  10. [12 – tcpdump ]
  11. [13 – top ]
  12. [14 – uptime ]
  13. [15 – vmstat ]
  14. [16 – wireshark ]

[01 – iostat]

iostat命令显示的是你的存储系统的细节状态。你通常可以用这个命令去检测你的存储设备是否工作正常,

完全可以在用户抱怨服务器慢之前,通过这个命令发现系统IO方面的问题。

如下可以看到iostat既可以显示CPU使用情况,也可以看到每个磁盘的IO情况。

  1. # iostat 1
  2. Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012年12月22日 _i686_ (4 CPU)
  3. avg-cpu: %user %nice %system %iowait %steal %idle
  4. 0.55 0.00 0.03 0.02 0.00 99.40
  5. Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
  6. sdb 0.41 2.61 5.76 2558664 5653872
  7. sda 0.24 0.80 4.12 784650 4038344

[02/03 – meminfo/free]

meminfo提供了很详细的内存使用状况。可以直接用cat命令查看:

  1. cat /proc/meminfo

当然meminfo里包含了太多细节,你可以直接使用free命令来查看有关内存的综述。

  1. # free -m
  2. total used free shared buffers cached
  3. Mem: 1513 1429 83 0 343 836
  4. -/+ buffers/cache: 249 1263
  5. Swap: 0 0 0

[04 – mpstat]

mpstat用在多处理器的服务器上,用来显示每一个CPU的状态。

另外,mpstat也会显示所有处理器的平均状况。

你可以设置显示每个服务器的CPU统计信息,或者每个处理的CPU统计信息。

  1. # mpstat -P ALL
  2. Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012年12月22日 _i686_ (4 CPU)
  3. 17时46分35秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
  4. 17时46分35秒 all 0.55 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.40
  5. 17时46分35秒 0 0.84 0.00 0.04 0.03 0.00 0.01 0.00 0.00 99.08
  6. 17时46分35秒 1 0.51 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.44
  7. 17时46分35秒 2 0.45 0.00 0.02 0.01 0.00 0.00 0.00 0.00 99.51
  8. 17时46分35秒 3 0.40 0.00 0.02 0.01 0.00 0.00 0.00 0.00 99.56
  9. # mpstat -P 0
  10. Linux 2.6.32-220.4.1.el6.i686 (roclinux) 2012年12月22日 _i686_ (4 CPU)
  11. 17时46分39秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
  12. 17时46分39秒 0 0.84 0.00 0.04 0.03 0.00 0.01 0.00 0.00 99.08

其中各个域的含义简述如下:

  • 1 CPU:处理器编号,如果为all,则此行表示的是所有处理器的统计平均值
  • 2 %usr:用户态的CPU利用率
  • 3 %nice:具有调度优先级的用户态CPU利用率
  • 4 %sys:内核态CPU利用率(此值不包括响应硬件中断和软件中断的时间)
  • 5 %iowait:处理IO请求导致CPU处于IDLE状态的时间百分比
  • 6 %irq:CPU响应硬件中断的时间比率
  • 7 %soft:CPU响应软件中断的时间比率
  • 8 %steal:当虚拟机监控器在服务于其他虚拟处理器时,虚拟CPU的被动等待时间比率
  • 9 %guest:运行一个虚拟处理器所消耗的CPU时间比率

[05 – netstat]

netstat命令,是Linux系统管理员几乎每天都会用到的命令(它已经逐步在被ss命令取代),他可以显示很多有关网络方面的信息,例如socket使用情况、路由情况、网卡情况、协议情况、网络流量统计等等。

一些常用的netstat选项包括:

  • -a : 显示所有socke信息
  • -r : 显示路由信息
  • -i : 显示网卡借口统计
  • -s : 显示网络协议统计

[06 – nmon]

nmon是Nigel’s Monitor的缩写,它是一个很知名的监视Linux系统性能的工具。

nmon可以查看到处理器利用率、内存使用率、运行队列信息、磁盘IO统计、网络IO统计、换页统计等。

你可以通过一个基于curses的类GUI界面来查看到上述信息。

nmon监控工具

[07 – pmap]

pmap命令可以显示进程占用的内存量。

你可以通过pmap找到那个占用内存量最多的进程。

如下就是nignx主进程所占用的内存情况:

  1. # pmap 2395|head -n 10
  2. 2395: nginx: master process ./sbin/nginx
  3. 00110000 240K r-x– /lib/libgssapi_krb5.so.2.2
  4. 0014c000 4K —– /lib/libgssapi_krb5.so.2.2
  5. 0014d000 4K r—- /lib/libgssapi_krb5.so.2.2
  6. 0014e000 4K rw— /lib/libgssapi_krb5.so.2.2
  7. 0014f000 12K r-x– /lib/libcom_err.so.2.1
  8. 00152000 4K r—- /lib/libcom_err.so.2.1
  9. 00153000 4K rw— /lib/libcom_err.so.2.1
  10. 00154000 48K r-x– /lib/libnss_files-2.12.so
  11. 00160000 4K r—- /lib/libnss_files-2.12.so
  12. b78e4000 20K rw— [ anon ]
  13. b78f3000 4K rw-s- /dev/zero (deleted)
  14. b78f4000 4K rw— [ anon ]
  15. bfeaa000 84K rw— [ stack ]
  16. total 7280K

[08/09 – ps/pstree]

ps和pstree在Linux系统里是一对好兄弟,它们都是用来列出处于运行状态的进程的列表的。

ps告诉我们每个进程使用的内存量以及所消耗的CPU时间。

pstree则会告诉我们进程间的父子关系,如下便是mysql的一些父子关系信息:

  1. # pstree -p 1829
  2. mysqld_safe(1829)───mysqld(2307)─┬─{mysqld}(2309)
  3. ├─{mysqld}(2310)
  4. ├─{mysqld}(2311)
  5. ├─{mysqld}(2312)
  6. ├─{mysqld}(2313)
  7. ├─{mysqld}(2314)
  8. ├─{mysqld}(2315)
  9. ├─{mysqld}(2316)
  10. ├─{mysqld}(2317)
  11. ├─{mysqld}(2318)
  12. ├─{mysqld}(2320)
  13. ├─{mysqld}(2321)
  14. ├─{mysqld}(2322)
  15. ├─{mysqld}(2323)
  16. ├─{mysqld}(2325)
  17. ├─{mysqld}(2544)
  18. ├─{mysqld}(2548)
  19. ├─{mysqld}(7912)
  20. ├─{mysqld}(7914)
  21. ├─{mysqld}(7916)
  22. ├─{mysqld}(24689)
  23. ├─{mysqld}(27329)
  24. └─{mysqld}(27331)

[10 – sar]

sar命令堪称系统监控工具里的瑞士军刀。

sar命令实际上是由三个程序组成的,即sar(用于显示数据)、sa1(用于采集数据)和sa2(用于存储数据)。

sar可以涵盖到CPU利用率信息、内存换页信息、网络IO传输信息、进程创建行为和存储设备行为。

sar和nmon的最大区别在于,sar更适用于长期的系统监控,而nmon则更适用于快速查看信息。

如果希望更详细的学习sar命令,可以阅读《sar访谈》-linux命令五分钟系列之二十九

[11 – strace]

starce经常被用来作为追查程序问题的工具,但他的功能远非如此。

它可以解析和记录进程的系统调用行为,这使得strace成为了一个非常有用的诊断、调查和纠错工具。

举例来说,你可以适用strace来追查到一个程序在启动之初所需加载的配置文件信息。

当然,strace也有它自身的缺陷,那就是strace会严重拖慢调查对象(某个进程)的性能和运行速度。

顺便推荐一篇非常好的strace的文章:《strace使用详解

另外,如果你使用MAC,strace的替代品是truss。

[12 – tcpdump]

tcpdump是一个简单的、好用的网络监控工具。它的网络协议分析能力使得它能够看清网络中到底发生了什么,如果你希望更细节的调查的话,可以考虑适用功能更为强大的wireshark工具。

tcpdump的系列教程“在这里”。

[13 – top]

top命令可以显示系统中的进程信息。默认情况下,top会按照CPU使用率从高到低来显示系统中的进程,并且每5秒刷新一次排行榜。

当然,你也可以让top按照PID、进程寿命、CPU耗时、内存消耗等维度对进程进行排序。(我经常使用的是P和M快捷键,分别是按CPU利用率排序、按内存使用量排序)

通过top命令,你可以很快的发现那些失去控制或不符合预期的进程。

[14 – uptime]

通过uptime命令可以查看系统已经运行了多久,可以统计当前处于登陆状态的用户数量,还可以显示当前服务器的负载情况。

  1. # uptime
  2. 18:35:17 up 11 days, 9:30, 1 user, load average: 0.00, 0.00, 0.00

[15 – vmstat]

大多数情况下,你可以使用vmstat命令去查看系统的虚拟内存情况,因为Linux通常会通过虚拟内存来获得更好的存储性能。

如果你的程序占用了大量了内存,那么系统会进行内存页换出的动作,以便把程序从内存中移动到系统SWAP空间中,也就是硬盘中。

如果系统的内存页的换入换出动作频度超过一个临界值,那么这种状态被叫做“Thrashing”。当系统处于thrashing状态时,性能会急剧下降。

vmstat命令便可以帮助人们及时发现此类问题,找出那个拖慢系统的元凶。

  1. # vmstat 1
  2. procs ———–memory———- —swap– —–io—- –system– —–cpu—–
  3. r b swpd free buff cache si so bi bo in cs us sy id wa st
  4. 2 0 0 57484 356864 861332 0 0 0 1 7 3 1 0 99 0 0
  5. 0 0 0 57468 356864 861360 0 0 0 0 336 145 6 1 94 0 0
  6. 0 0 0 57468 356864 861360 0 0 0 0 43 51 0 0 100 0 0
  7. 0 0 0 57468 356864 861360 0 0 0 16 51 62 0 0 100 0 0

[16 – wireshark]

Wireshark的前身叫做Ethereal,我们可以认为wireshark是tcpdump命令的大师兄,因为wireshark会更为专业,也具有更高级的协议分析和统计能力。

Wireshark同时具有GUI界面和shell借口。

如果你是一位资深的网络管理员,那么你一定使用过ethereal。而如果你正在使用wireshark/ethereal,那么我推荐你阅读Chris Sander的一本非常好的书《Practical Packet Analysis》。

谢谢!

原文链接:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.techug.com%2F

四月 8th, 2016

1. 认识几个大牛

Linus Torvalds

生于1969年12月28日的芬兰赫尔辛基市,拥有美国国籍。他是Linux内核的最早作者,随后发起了这个开源项目,担任Linux内核的首席架构师与项目协调者,是当今世界最著名的电脑程序员、黑客之一。他还发起了Git这个开源项目,并为主要的开发者。

Richard Matthew Stallman

简称RMS,生于1953年3月16日,美国自由软件运动的精神领袖、GNU计划以及自由软件基金会的创立者。作为一个著名的黑客,他的主要成就包 括Emacs及后来的GNU Emacs,GNU C编译器及GDB调试器。他所写作的GNU通用公共许可证是世上最广为采用的自由软件许可证,为Copyleft观念开拓出一条崭新的道路。

Eric Steven Raymond

生于1957年12月4日,程序员,《大教堂与市集》的作者、《新黑客词典》(”Jargon File”)的维护人、著名黑客。作为《新黑客词典》的主要编撰人以及维护者,雷蒙很早就被认为是黑客文化的历史学家以及人类学家。但是在1997年以 后,雷蒙被广泛公认为是开放源代码运动的主要领导者之一,并且是最为大众所知道(并最具争议性)的黑客。

了解更多开源界名人请见这里:

2. 了解Linux家族的明星成员

  • Red Hat Enterprise Linux:Red Hat Enterprise Linux是Red Hat公司的Linux发行版,面向商业市场,包括大型机。红帽公司从Red Hat Enterprise Linux 5开始对企业版LINUX的每个版本提供10年的支持,Red Hat Enterprise Linux常简作RHEL。Red Hat Enterprise Linux大约3年发布一个新版本。
  • Fedora Linux:Fedora Linux是较具知名度的Linux发行版之一。它是一套功能完备、更新快速的免费操作系统。而对赞助者Red Hat公司而言,它是许多新技术的测试平台,被认为可用的技术最终会加入到Red Hat Enterprise Linux 中。
  • Centos:CentOS全名为“社区企业操作系统”(Community Enterprise Operating System),是Linux发布版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。CentOS 对上游代码的主要修改是为了卸载不能自由使用的商标。
  • Ubuntu:Ubuntu是一个以桌面应用为主的GNU/Linux操作系统,其名称来自非洲南部祖鲁语或豪萨语的“Ubuntu”一词,意思是“人性”。 Ubuntu基于Debian发行版,与Debian的不同在于它每6个月会发布一个新版本。
  • SUSE Linux:SUSE 是Linux操作系统其中一个发布版,也是德国的一个发布版。SUSE Linux目前专注于企业市场。
  • openSUSE:openSUSE是一个开放社区的计划,号称“最美丽的Linux发行版”。
  • Debian:Debian是一种自由操作系统,全称Debian GNU/Linux,由Debian计划(Debian Project)组织维护,Debian是一个纯粹由自由软件所组合而成的操作环境。
  • Archlinux:Arch Linux(或称Arch)是一种以轻量简洁为设计理念的Linux发行版。其开发团队秉承简洁、优雅、正确和代码最小化的设计宗旨。Arch Linux 项目受 CRUX 启发,由 Judd Vinet 于2002年启动。

更多Linux版本请看这里: Linux系统家族族谱

3. 初学者必读的Linux基础书籍

要想学好Linux,你至少需要:一本好入门教材、一本linux指令参考手册、linux系统管理手册、讲解linux系统原理的书。这里我们推荐几部公认的好书:

4. 熟悉Linux常用命令

  • man :任何时候你觉得对一个命令行不是很确定,都可以通过输入“man + 命令”来了解这个命令能确切是做什么的。
  • ls :列出目录内容。
  • pwd :在终端中显示当前工作目录的全路径。
  • cd :要变更你当前所在的目录。
  • mkdir :创建一个新的目录。
  • cp :复制文件/重命名文件。
  • mv :移动文件。
  • find 和 locate:搜索文件。
  • kill :快速关闭一个进程。
  • passwd :更改密码。
  • md5sum :计算和检验MD5信息签名
  • history :查询历史记录命令。
  • sudo :(super user do)命令允许授权用户执行超级用户或者其它用户的命令。
  • touch :创建一个新文件,或者将文件的访问和修改时间更新为当前时间。
  • chmod :修改文件的访问权限。
  • chown :改变文件拥有者和所在用户组。
  • apt :APT是一个为Debian系列系统(Ubuntu,Kubuntu等等)开发的高级包管理器,在Gnu/Linux系统上,它会为包自动智能地搜索、安装、升级以及解决依赖问题。

5. 小心新手常犯的几个错误

  • 不要以根用户登录:这是使用Unix的惯例,除非必须那么不要轻易在根用户下运行任何东西。
  • 文件命名混乱:避免使用美元符($),括弧和百分号(%)等特殊字符,这些字符对于shell有着特殊意义,可能会引起冲突。避免使用空格,不要使用无效字符,“/”是根目录专用的。
  • 所有文件都混在一起:将Home目录放在一个独立的分区上,可以在你重装系统甚至升级你的整个版本而不会丢失你的数据和个人设置。
  • 试图点击运行.exe文件:除非你安装了WINE,双击那些.exe文件毫无用处。新用户需要知道,无论是Linux还是Windows,都只会运行针对自身系统开发的应用程序。
  • 以默认格式向微软Office用户发送OpenOffice文档:微软产品对其它操作系统和其它应用程序的友好性并不强,许多新Linux用户在共享文件给朋友时往往会遇到麻烦,因为对方无法阅读他们共享的文件格式,因此新Linux用户要注意存储文件的格式,确保它们能够被微软类似应用所打开。
  • 忽视更新:新的更新可以为一些新的漏洞打上补丁。维持更新可以在一个易受损的系统与一个安全的系统之间构造分水岭。Linux的安全来自于不断地维护。

以上是一些操作习惯方面的错误,还有一些技术类型的错误,你可以查看《 避免UNIX和Linux中的常见错误

6. 常去逛逛一些Linux社区和网站

国内的专业Linux网站

  • ChinaUnix: 创办于2001年,是一个以讨论Linux/Unix类操作系统技术、软件开发技术、数据库技术和网络应用技术等为主的开源技术社区网站。
  • Linux伊甸园论坛: 中文GNU/Linux开源社区,开源资讯门户网站,提供最新最快的Linux和开源资讯,24小时滚动更新。
  • Linux中国:Linux中国是专注于中文Linux技术、资讯的社区,在这里你可以获得一手的Linux资讯和技术知识。

国外著名Linux网站

  • Linux Online: 最权威的Linux网站,文章讨论无所不包,软件硬件应有尽有。
  • Linux国际协会( Linux International ):有大量的Linux资源列表。
  • Linux:学习Linux的最好网站,也是Linux使用经验的汇聚地。
  • Linuxforums: 提供Linux的软件资源,Linux论坛,Linux服务器发行版的信息,LINUX文章教程等信息的综合性网站。

原文链接:http://code.csdn.net/news/2821271

TAGS: