始于cd,ls命令

好啦,步入正题,我使用的linux连接工具为xshell,mRemoteNG,对两款工具不做介绍啦,你可以百度一下,实在不会入左上方群。

进入之后,便是上面的界面黑乎乎一片,对于初学者也可能是一片懵逼,犹如狗拿刺猬,那么不要急,我们先来看下人生中的第一个linux命令:ls 与 cd 。

首先你先使用下面的cd命令:

[root@localhost ~]#   这个是当前用户的用户文件夹主目录
[root@localhost  /]#   这个是整个系统的根目录

紧接着输入ls命令展示出一下结果。

那么这些文件都装载啦什么东东,为什么要放在根目录下,接下来我们对此做个详解。

ls,cd命令的语法与参数使用方法:http://man.linuxde.net  ,不能偷懒哦,要敲敲, 你才能学好,多敲才能记住的。

Linux的文件种类,扩展名

在linux中,任何设备都是文件,就连数据通信接口也有专门的文件负责。所以我们要搞清楚linux下的文件有哪些?哪些作用?

首先我们这样输入命令,如下:

乱七八糟的都是什么呢?我拿dev这个文件夹做为示例分解下:

1、文件类型

普通文件:就是我们一般的文件,他在linux中按照文件内容大致分文3种。

  • 纯文本文件(ASCII):内容直接被我们读到,如数字,字母等,几乎我们可以设置读写的文件都是这一种,他可以通过cat命令打开,直接查看内容。
  • 二进制文件(binary):linux唯一可以识别执行的文件,在系统中可执行文件就是这种格式,例如:刚刚执行的cat就是一个二进制文件。
  • 数据格式文件(data):程序在运行过程中读取的特定格式文件,就是数据文件,比如:用户登录的用户数据记录在/var/log/wtmp这个数据格式文件中。比较明显的特征使用last可以读出来,cat读时是乱码。

块(block)设备文件:为一些存储数据,以体统随机访问的接口设备,如硬盘,软盘等,可以随机的在硬盘的不同块读写,可以看看/dev/sda

字符(character)设备文件:一些串行端口的接口设备,如键盘、鼠标等。这些设备的特征就是“一次性读取”的,不能够截断输出。例如:鼠标只能滑动到一个地方而不能跳到另外一个地方。

套字节(sockets):这种文件类型用于在网络上的数据连接。

管道(FIFO,pipe):fifo,first-in-first-out,主要解决多个程序同事访问一个文件所造成的错误问题。

目录(directory):就是目录。

连接文件(link):类似windows系统中的快捷键。

 2、文件权限r-xr-xr-x

  • 缩写字母的意义:x:可执行,r:可读,w:可写,-占位。
  • 123:拥有者权限,456:用户组用户权限,789:其他用户权限。
  • 特征顺序为rwx。

3、连接数:表示有多少文件名连接到此节点。

4、文件名

  • linux中没有像windows中所谓的扩展名。但是为啦方便认识还是要有写扩展名的习惯。
  • 文件长度限制,一般不要超过255个字符就好。

  • 文件命名限制,最好避免*?><;&|、\'"(){}

文件目录结构

当你打开linux系统之后,输入命令:cd \ 进入根目录之后,再ls会显示出如下目录结构

那么这些目录都有存放些什么文件,我们的文件又该以何种规范来存放呢?

Linux目录结构标准:FHS(Filesystem Hierarchy Standard)标准

为什么要使用一个标准呢?很简单,就是让用户和厂商有个共同的认识与约束,不至于各自为政,把linux系统的目录搞的乱七八糟,东西随便放,那我们的学习成本就很大啦。

关于FHS网上有很多介绍,FHS根据多去的经验也一直在持续改版(http://www.pathname.com/fhs/),FHS根据文件系统使用的频繁情况,是否允许用户随意改动,将目录定义成4种交互作用的形态,如下:

  • 可分享的:可以分享给其他系统挂载使用的目录。
  • 不可分享的:仅与自身机器有关,不适合分享给其他主机的。如自己机器上运行的设备文件或者与程序有关的socket文件。
  • 不变的:不会经常变动的数据,如说明文件,函数库,主机服务配置文件等。
  • 可变动的:经常会改变的数据,如登录文件,新闻组等。

根目录与根目录下的文件夹存放说明

根目录是整个系统最重要的一个目录,因为所有的目录都是由它衍生出来,而且根目录也与开机,还原,系统修复等操作有关。

由于系统开机需要特定的开机软件、内核文件、开机所需要的程序、函数库等文件数据,若系统出现异常时,根目录也要有能够修复文件系统的程序。由此可见根目录的重要性,所以FHS建议,根目录不要放在非常大的分区内,因为越大防止的文件越多,出错的几率也越大,性能也越不好,所以,根目录应该越小越好,且应用程序所安装的软件最好不要与根目录放在一个分区内。

由此我们来说说下面的文件都是什么,又怎么放置才好。

其实,FHS标准对根目录的定义仅有如下的目录数据。

其中有5个目录不可与根目录分开放在不同的分区。这5个目录分别为:etc,bin,dev,lib,sbin。

那么除啦以上的文件夹之外,还有一些linux系统中也非常重要的目录如下:

/dev目录:

  • hd[a-t]:IDE设备
  • sd[a-z]:SCSI设备
  • fd[0-7]:标准软驱
  • md[0-31]:软raid设备
  • loop[0-7]:本地回环设备
  • ram[0-15]:内存
  • null:无限数据接收设备,相当于黑洞
  • zero:无限零资源
  • tty[0-63]:虚拟终端
  • ttyS[0-3]:串口
  • lp[0-3]:并口
  • console:控制台
  • fb[0-31]:framebuffer
  • cdrom => /dev/hdc
  • modem => /dev/ttyS[0-9]
  • pilot => /dev/ttyS[0-9]
  • random:随机数设备
  • urandom:随机数设备

/etc目录

  • /etc/rc,/etc/rc.d,/etc/rc*.d : 启动、或改变运行级时运行的scripts或scripts的目录。
  • /etc/passwd: 用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息。
  • /etc/fstab :启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表。Linux下,也包括用swapon -a启用的swap区的信息。
  • /etc/group :类似/etc/passwd ,但说明的不是用户而是用户组。
  • /etc/inittab :init 的配置文件,设定系统启动时init进程将把系统设置成什么样的runlevel 。
  • /etc/issue getty 在登录提示符前的输出信息.通常包括系统的一段短说明或欢迎信息内容由系统管理员确定。
  • /etc/motd: Message Of The Day,成功登录后自动输出内容由系统管理员确定,经常用于通告信息,如计划关机时间的警告。
  • /etc/mtab: 当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新,需要一个当前安装的文件系统的列表时使用,例如df 命令。
  • /etc/shadow: 在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对root可读这使破译口令更困难.
  • /etc/login.defs: login 命令的配置文件。
  • /etc/printcap: 类似/etc/termcap ,但针对打印机语法不同。
  • /etc/profile , /etc/csh.login , /etc/csh.cshrc :登录或启动时Bourne或C shells执行的文件,这允许系统管理员为所有用户建立全局缺省环境。
  • /etc/securetty: 确认安全终端,即哪个终端允许root登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权。
  • /etc/shells: 列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在 /etc/shells 文件中,如果不是将不允许该用户登录.
  • /etc/sysconfig :网络配置相关目录
  • /etc/DIR_COLORS: 设定颜色
  • /etc/HOSTNAME: 设定用户的节点名
  • /etc/NETWORKING: 只有YES标明网络存在
  • /etc/host.conf: 文件说明用户的系统如何查询节点名
  • /etc/hosts: 设定用户自已的IP与名字的对应表
  • /etc/hosts.allow: 设置允许使用inetd的机器使用
  • /etc/hosts.deny: 设置不允许使用inetd的机器使用
  • /etc/hosts.equiv: 设置远端机不用密码
  • /etc/inetd.conf: 设定系统网络守护进程inetd的配置
  • /etc/inetd.pid :inetd这个进程的进程id
  • /etc/hosts.lpd :设定远端有哪些节点可以使用本机的打印机
  • /etc/gateways: 设定路由器
  • /etc/protocols: 设定系统支持的协议
  • /etc/named.boot: 设定本机为名字服务器的配置文件
  • /etc/named.pid: 本机上运行的名字服务器的进程id
  • /etc/networks :设定网络的配置文件
  • /etc/resolv.conf :设定系统的名字服务器
  • /etc/services: 设定系统的端品与协议类型和提供的服务
  • /etc/exports: 设定NFS系统用的
  • /etc/NNTP_INEWS_DOMAIN: 设置新闻服务器的配置文件
  • /etc/nntpserver: 设置用户使用的新闻服务器的地址
  • /etc/XF86Config: X Window的配置文件
  • /etc/hostid: 系统独有的一个硬件id
  • /etc/at.deny: 设置哪些用户不能使用at命令
  • /etc/bootptab: 给MAKEDEV程序设定各种不同的设备驱动文件的格式
  • /etc/makedev.cfg: 同DEVINFO一样给MAKEDEV使用的设置文件
  • /etc/diphosts: 设置拔号服务器的用户名和口令
  • /etc/slip.hosts,/etc/slip.login: 设定SLIP的配置文件
  • /etc/fastboot: 使用shutdown -f产生的,重启系统要查这个文件
  • /etc/fstab: 记录开机要mount的文件系统
  • /etc/ftpaccess: FTP服务器的一些配置
  • /etc/ftpconversions: 设定在FTP时使用的过滤器的位置
  • /etc/ftpusers: 设定不能使用FTP服务的用户
  • /etc/ld.so.cache: 查找系统动态链接库的缓存
  • /etc/ld.so.conf: 系统动态链接库的路径
  • /etc/lilo.conf lilo:的配置文件
  • /etc/magic: 给file命令使用的
  • /etc/aliases :给sendmail使用的设置别名的文件
  • /etc/sendmail.st: 设置sendmail的
  • /etc/motd: 超级用户发布通知的地方
  • /etc/organization: 存放用户的名字和组织
  • /etc/pnpdevices: 列出支持的Plug&Play设备
  • /etc/snooptad: 监控用户的屏幕,监听的终端列表
  • /etc/sudoers: 可以sudo命令的配置文件
  • /etc/syslog.conf: 系统记录程序syslogd的配置文件
  • /etc/utmp: 目前在用系统的用户信息
  • /etc/wtmp: 同utmp差不多,只是它累加
  • /etc/nologin: 系统在shutdown时不希望用户登录就产生这个文件
  • /etc/termcap: 设置系统终端信息的
  • /etc/ttys: 设定系统的终端类型
  • /etc/gettydefs: getty_ps的定义文件
  • /etc/yp.conf: NIS的配置文件
  • /etc/mtools.conf: 设定mtools程序的参数
  • /etc/fdprm: 设定格式化软盘的参数
  • /etc/login.access: 控制用户登录权限的文件

/proc目录

  • /proc/cmdline: 加载 kernel 时所下达的相关参数,查阅此文件,可了解系统是如何启动。
  • /proc/cpuinfo: 本机的 CPU 的相关资讯,包含时脉、类型与运算功能等
  • /proc/devices: 这个文件记录了系统各个主要装置的主要装置代号,与 mknod 有关。
  • /proc/filesystems: 目前系统已经加载的文件系统。
  • /proc/interrupts: 目前系统上面的 IRQ 分配状态。
  • /proc/ioports: 目前系统上面各个装置所配置的 I/O 位址。
  • /proc/kcore: 这个就是内存的大小,但是不要读他。
  • /proc/loadavg: 还记得 top 以及 uptime 吧?没错,上头的三个平均数值就是记录在此。
  • /proc/meminfo: 使用 free 列出的内存资讯,在这里也能够查阅到。
  • /proc/modules: 目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序。
  • /proc/mounts: 系统已经挂载的数据,就是用 mount 这个命令呼叫出来的数据。
  • /proc/swaps: 到底系统挂加载的内存在哪里?使用掉的 partition 就记录在此啦。
  • /proc/partitions: 使用 fdisk -l 会出现目前所有的 partition 吧?在这个文件当中也有纪录。
  • /proc/pci: 在 PCI 汇流排上面,每个装置的详细情况,可用 lspci 来查阅。
  • /proc/uptime: 就是用 uptime 的时候,会出现的资讯。
  • /proc/version: 核心的版本,就是用 uname -a 显示的内容。
  • /proc/bus/*: 一些汇流排的装置,还有 U盘 的装置也记录在此。

/usr目录

依据FHS的基本定义/usr里面放置的数据属于可分享不可变动的。usr是UNIX
Software
Resource的缩写,也就是“UNIX操作系统软件资源”所放置的目录,而不是用户数据,不要跟user扯上关系。它相当于windows系统中的c:\windows与c:program

files这两个目录的综合体。刚装完系统时,这个目录占用的硬盘容量最多。因为几乎所有的应用程序都安装在这里,本地安装的程序和其他东西放在/usr/local下。

  • /usr/etc: 存放配置文件。
  • /usr/games: 存放游戏和教学文件。
  • /usr/include: c/c++等程序语言的头文件与包含文件放置处,当我们以tarball方式(*.tar.gz的方式安装软件)安装某些数据时,会使用到里面的许多包含文件。开发和编译应用程序所需要的头文件。
  • /usr/share:放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,因为几乎都是文本文件。如/usr/share/man:在线帮助文件,/usr/share/doc:软件杂项的文件说明,zoneinfo:与时区相关的文件。
  • /usr/bin: 绝大部分用户可使用的命令都放在这里。有些命令在/bin(是否与开机过程有关) 或/usr/local/bin 中。
  • /usr/sbin :根文件系统不必要的系统管理命令,例如多数服务程序。
  • /usr/share/man , /usr/share/info , /usr/share/doc: 手册页、GNU信息文档和各种其他文档文件。
  • /usr/lib: 包含各应用软件的函数库,目标文件,以及不被一般用户惯用的执行文件或脚本。某些软件会提供一些特殊的命令来进行服务器的设置,这些命令也不会经常被系统管理员操作,那就被放在这个目录下。
  • /usr/local:管理员在本机自己安装自己下载的软件,建议安装到此目录。该目录也具有bin,etc,include,lib。
  • /usr/src: 存放程序的源代码,linux内核的源代码存放在/usr/src/kernels。

/var目录

usr是安装时占用大量的硬盘容量,而var则是在系统运行后才会慢慢占用硬盘的容量。因为var目录主要针对常态性变动的文件,比如,缓存,登录文件,以及某些软件运行所产生的文件,包括程序文件(lock file,run file)。

  • /var/catman:当要求格式化时的man页的cache.man页的源文件一般存在/usr/man/man*
    中;有些man页可能有预格式化的版本,存在/usr/man/cat*
    中.而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了.
    (/var/catman 经常被清除,就象清除临时目录一样.)
  • /var/lib:系统正常运行时要改变的文件。
  • /var/local,/usr/local:中安装的程序的可变数据(即系统管理员安装的程序).注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。
  • /var/lock:锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件。
  • /var/log:各种程序的Log文件,特别是login
    (/var/log/wtmp log所有到系统的登录和注销) 和syslog (/var/log/messages
    里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除。
  • /var/run:某些程序或者服务启动后,会将他们的pid放置在这个目录下。保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息。
  • /var/spool:放置一些队列数据,就是排队等待其他程序使用的数据。这些数据被使用后通常都会被删除。例如,系统收到新信件会放置到/var/spool/mail中,用户收下后,该信件原则上时会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue中,等到被送出去就被删除。如果是工作排程数据,就会被放置到/var/spool/cron目录中。
  • /var/tmp 比/tmp:允许的大或需要存在较长时间的临时文件。 (虽然系统管理员可能不允许/var/tmp 有很旧的文件.)
  • /var/cache:应用程序本身运行过程中会产生的一些暂存文件。

LIUNX系统的目录树,如下:

Linux系统中文件的压缩打包功能

压缩:是一种通过特定的算法来减小计算机文件大小的机制(百度百科下)。

打包:将多个文件放入一个文件中,最终以一个文件的形式存在。

Linux系统中常见的压缩命令有三种:compress , gzip , bzip2 。

  • compress:这个压缩命令仅存在古老的unix机器上,是一个很古老的压缩方式,被gzip所取代,gzip也可以解压commress的压缩文件。所以我这里不做过多介绍,有需求的朋友可以:http://man.linuxde.net/compress  我这里给一个截图如下:
  • gzip:这个压缩命令在目前来说算是最常见的,它可以解开compress\zip\gzip等软件所压缩的文件。有9个压缩等级,1最快压缩比最差,9最慢压缩比最好,默认为6。使用zcat命令可以查看读取compress与gzip的压缩文件。对文本的压缩率可达到:60%-70%,可配合tar使用。
  • bzip:如果说gzip是用来取代compress的,那么bzip就是为了取代gzip而存在的。他的压缩率竟然比gzip还要好,可配合tar使用。

gzip的常用用法:

语法:gzip  参数  文件名

参数:

-c:将压缩的数据输出到屏幕上,可通过数据重定向来处理。

-d:解压的参数

-t:可以用来检验一个压缩文件的一致性,看看文件是否有错误。

-v:可以显示出源文件/压缩文件的压缩比信息。

-#:压缩等级,1-9。

常用的语句:压缩:gzip -v filename  ,解压:gzip -d filename 。 查看文本压缩文件:zcat 文件名。

bzip2的常用用法:

语法:bzip2 参数 文件名

参数:

-c:将压缩过程中产生的数据输出到屏幕上

-d:解压缩

-k:保留源文件,而不会删除原始文件

-z:压缩

-v:显示出源文件/压缩文件的压缩比等信息。

-#:与gzip相同,1-9压缩比的参数,1最快,9最佳。

常用的语句:压缩:bzip2 -z  filename ,解压:bzip2 -d filename 。查看压缩文本:bzcat filename.bz2

tar打包命令

以上三种压缩解压只能针对单文件执行,那么如果将多个文件合并到一个大文件中,怎么做到呢?那就要用tar这个命令。tar不止这么多,它还支持gzip/bzip2在打包的同时对文件进行压缩。由于这tar使用过于广泛,就连windows中的WinRAR也支持.tar.gz文件名的解压缩。

语法:打包与压缩:tar  [-j|-z] [cv] [-f 新建的文件名] filename     解压缩: tar [-j|-z] [xv] [-f 新建的文件名] [-C 目录]

参数:

-c:新建打包文件,可搭配-v来查看过程中被打包的文件名

-t:查看打包文件的内容含有那些文件名,重点在查看文件

-x:解压缩或解打包的功能,可搭配-C在特定目录解开。特别留意的是,-c,-t,-x不可同时出现在一串命令中。

-j:通过bzip2的支持进行压缩或解压。

-z:通过gzip的支持进行压缩或解压。

-v:在压缩或解压的过程中,将正在处理的文件名称显示出来。

-f filename:-f后面要接被处理的文件名。建议-f单独写一个参数。

-C 目录:这个参数在解压时,若要在特定目录解压缩,可以使用这个参数。

.tar.bz2 格式常用的语法

解压: tar jxvf filename.tar.bz2 , 压缩: tar jcvf filename.tar.bz2  要压缩的文件

.tar.gz 格式常用的语法

解压:tar zxvf filename.tar.gz ,压缩: tar zcvf filename.tar.gz  要压缩的文件

Linux系统(二)软件的安装与卸载

 

序言

上一篇我们了解啦Linux系统中,根目录下的各个文件夹是做什么用的啦,也学会文件如何压缩打包。那么接下来我们就该用到这个系统啦。用这个系统,就是用这个系统的软件,那么我们对我们需要的软件如何安装,对不需要的软件如何卸载,本篇就此做个详解。

我们针对的系统为Centos,那么Centos的主要软件管理有3种,源码与tarball,rpm与srpm,yum。

我会在讲解每一种安装方式的同时,写一个我们开发常用到的软件实例的安装,源码安装redis,rpm安装rabbitmq,yum安装nginx。

源码与tarball方式安装软件的几个名词

在安装之前我们先说几个名词,对于开发人员来说应该是一目了然的。

开放源码:就是用编程语言写的程序代码,人懂机器不懂,无法在系统中执行。

编译程序:将程序代码转译成为机器看得懂的语言。

gcc:Liunx系统中最常见的语言为c语言,而c语言在linux上面最标准的编译程序就是gcc。它是由GNU计划所维护。对GNU有兴趣的话大家可以网上搜下资料。

利用gcc编译器进行程序的编译流程示意图:

可执行文件:经过编译程序变成二进制程序后机器能够看得懂所以称为可执行的文件。

函数库:类似子程序的角色,可以被调用来执行的一段功能函数。又分为动态函数库与静态函数库,动态函数库以so结尾,通常被命名为libxxx.so,编译时程序中只保存起指向地址,不合并到主程序中,所以主程序不能独立运行,需包含动态库,且动态库不可随意修改路径。静态函数库以.a结尾,通常被命名为libxxx.a,编译时会将其功能合并至主程序中,运行是不需要静态库的支持。

程序执行时引用外部动态函数库的示意图如下:

Tarball:这个更容易理解啦,就是为啦方面在网络上下载,软件开发者把源码打包压缩后,放到网上发布的软件文件。一般包含,源代码文件,检测程序文件(可能是configure或config等文件名),本软件的简易说明与安装说明(install或readme)。

Tarball方式安装Redis实例演练

基本步骤:

1、下载源文件至/usr/local/src目录下解压缩。

2、取得步骤流程:进入新建的目录下面,去查阅install与readme等相关文件内容。

3、相关属性软件安装:根据install与readme的内容查看并安装好一些相关的软件

4、建立makefile:以自动检测程序(configure或config)检测操作环境,并建立makefile这个文件

5、编译:以make这个程序并使用该目录下的makefile作为他的参数配置文件,进行make(编译)操作

安装:以make这个程序,并以makefile这个参数配置文件,依据install这个目标的指定来安装到正确的路径。

常用命令:

./configure:这个步骤就是在创建 Makefile 这个文件啰!通常程序开发者会写一支 scripts 来检查你的 Linux 系统、相关的软件属性等等,这个步骤相当的重要, 因为未来你的安装信息都是这一步骤内完成的!另外,这个步骤的相关信息应该要参考一下该目录下的 README 或 INSTALL 相关的文件!

make clean:make 会读取 Makefile 中关于 clean 的工作。这个步骤不一定会有,但是希望执行一下,因为他可以去除目标文件!因为谁也不确定源代码里面到底有没有包含上次编译过的目标文件 (*.o) 存在,所以当然还是清除一下比较妥当的。 至少等一下新编译出来的可执行文件我们可以确定是使用自己的机器所编译完成的嘛!

make:make 会依据 Makefile 当中的默认工作进行编译的行为!编译的工作主要是进行 gcc 来将源代码编译成为可以被执行的 object files ,但是这些 object files 通常还需要一些函数库之类的 link 后,才能产生一个完整的可执行文件!使用 make 就是要将源代码编译成为可以被执行的可可执行文件,而这个可可执行文件会放置在目前所在的目录之下, 尚未被安装到预定安装的目录中;

make install:通常这就是最后的安装步骤了,make 会依据 Makefile 这个文件里面关于 install 的项目,将上一个步骤所编译完成的数据给他安装到预定的目录中,就完成安装啦!

通过configure与make进行编译的示意图如下:

Redis实例安装:

下载:

解压:

编译:

设置配置参数:

启动:

验证使用redis:

总结下:其实在安装某些软件时,可能没有那么繁琐,就比如redis官方也有安装示例,大家看看就会啦,安装的方式有很多种,不必过于居于模式,但是一定要看官方的文档,不能胡乱一起瞎搞。

rpm与srpm基础理解

RPM全名是“RedHat Package Manager”,是RedHat公司发展出来的以一种数据库记录的方式来将你所需要的软件安装到linux系统的一套管理机制。

那么什么叫一种数据库记录的方式呢?就是开发发布者将软件编译过之后,打包成rpm基础的包文件,包中的软件都有头文件,头文件中记录这个软件需要依赖的软件,所需的服务器配置,及自身版本的一些信息,当我们安装这个软件时,rpm会根据这个头文件与liunx主机中的安装软件的记录信息做匹配,然后反馈环境是否满足,是否已存在,等等信息。

那么编译过后的软件,直接安装有什么优缺点呢?优点不用编译可快速安装,缺点:我们安装的主机环境必须要跟开发发布者编译时的环境一致。

那么什么叫做依赖的软件呢?很简单就想你安装MSSQL需要.NetFramwork一样,安装rabbitmq需要安装erlang环境一样。他们安装时都有依赖的软件或平台。

那么rpm与srpm的区别是什么呢?一张图搞定,如下:

rpm的包是什么样子呢?

首先先挂载cdrom到media下

查看rpm什么样子

看看有多少自带的Rpm包

哇自带3725个,基本够你用的啦。如果处理一些依赖软件或者自带的不能满足你的话,除啦软件官网下载之外,哥哥推荐三个网站:

http://rpm.pbone.net/

http://rpmfind.net/

http://www.rpmseek.com/index.html

Rpm命名规则

操作硬件平台

Rpm安装语法:

[root@localhost ~]# rpm -ivh package_name

选项与参数:

-i :install 的意思

-v :察看更细部的安装信息画面

-h :以安装信息列显示安装进度

一般情况下这一句命令,配上系统自带的rpm包与上面三个网站中的包就足够啦,如果不能解决你的问题的话,那要查看软件官方提供的安装文档。

如果你对软件足够的熟悉那么也可以采用下面的参数进行安装。

Rpm的升级与更新

Rpm的查询

Rpm验证与数码签章

上面查询是否被改动过中有......T. 这是什么意思呢?

  • S :(file Size differs) 文件的容量大小是否被改变
  • M :(Mode differs) 文件的类型或文件的属性 (rwx) 是否被改变?如是否可执行等参数已被改变
  • 5 :(MD5 sum differs) MD5 这一种指纹码的内容已经不同
  • D :(Device major/minor number mis-match) 设备的主/次代码已经改变
  • L :(readLink(2) path mis-match) Link 路径已被改变
  • U :(User ownership differs) 文件的所属人已被改变
  • G :(Group ownership differs) 文件的所属群组已被改变
  • T :(mTime differs) 文件的创建时间已被改变
  • P :(caPabilities differ) 功能已经被改变

如果一个文件都被改动过,那么如下显示:SM5DLUGTP c filename

至于那个 c 代表的是“ Config file ”的意思,也就是文件的类型,文件类型有下面这几类:

  • c :配置文件 (config file)
  • d :文件数据文件 (documentation)
  • g :鬼文件~通常是该文件不被某个软件所包含,较少发生!(ghost file)
  • l :授权文件 (license file)
  • r :读我文件 (read me)

Rpm反安装与重建数据库

rpm --rebuilddb   ==重建数据库

Rpm安装rabbitmq实战

首先打开rabbitmq.com官网,他的安装页有rpm包。安装文档指示我们安装rabbitmq需要2大步骤。

1、先安装erlang环境,2、安装rabbitmq。

由此可知rabbitmq是依赖erlang环境的,下面我们先安装下erlang。

[root@localhost src]# wget https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_19.2~centos~7_amd64.rpm
--2017-02-07 14:10:27-- https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_19.2~centos~7_amd64.rpm
正在解析主机 packages.erlang-solutions.com (packages.erlang-solutions.com)... 31.172.186.53
正在连接 packages.erlang-solutions.com (packages.erlang-solutions.com)|31.172.186.53|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:43611864 (42M) [application/x-redhat-package-manager]
正在保存至: “esl-erlang_19.2~centos~7_amd64.rpm” 100%[==================================================================================================================================>] 43,611,864 446KB/s 用时 80s 2017-02-07 14:12:04 (530 KB/s) - 已保存 “esl-erlang_19.2~centos~7_amd64.rpm” [43611864/43611864]) [root@localhost src]# rpm -ivh esl-erlang_19.2~centos~7_amd64.rpm
错误:依赖检测失败:
libodbc.so.2()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_baseu-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_baseu-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_baseu_xml-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_adv-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_adv-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_aui-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_aui-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_aui-2.8.so.0(WXU_2.8.5)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_core-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_core-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_core-2.8.so.0(WXU_2.8.10)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_gl-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_gl-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_html-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_html-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_stc-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_stc-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_xrc-2.8.so.0()(64bit) 被 esl-erlang-19.2-1.x86_64 需要
libwx_gtk2u_xrc-2.8.so.0(WXU_2.8)(64bit) 被 esl-erlang-19.2-1.x86_64 需要

由此可见安装erlang环境也是需要环境支持的。那么我们安装erlang需要的安装环境,那么我们首先需要安装非默认的第三方yum库。

[root@localhost bin]# yum install epel-release

然后安装erlang需要的安装环境

[root@localhost bin]# yum install unixODBC unixODBC-devel wxBase wxGTK SDL wxGTK-gl
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirror.premi.st
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 unixODBC-2.3.1-11.el7.x86_64 已安装并且是最新版本
软件包 unixODBC-devel-2.3.1-11.el7.x86_64 已安装并且是最新版本
软件包 wxBase-2.8.12-20.el7.x86_64 已安装并且是最新版本
软件包 wxGTK-2.8.12-20.el7.x86_64 已安装并且是最新版本
软件包 SDL-1.2.15-14.el7.x86_64 已安装并且是最新版本
软件包 wxGTK-gl-2.8.12-20.el7.x86_64 已安装并且是最新版本

然后就可以顺利的把erlang安装上啦

[root@localhost src]# rpm -ivh esl-erlang_19.2~centos~7_amd64.rpm

最后安装rabbitmq那也是顺溜的很啦。

[root@localhost src]# rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm 

启动/关闭rabbitmq服务

  • Whereis rabbitmq 找到bin/rabbitmq-server
  • ./rabbitmq-server 启动  Starting broker... completed with 0 plugins.  说明安装成功。
  • ./rabbitmq-server  -detached 后台启动方式
  • ./rabbitmqctl stop 关闭

启动端口

找到/etc/sysconfig/iptables ,如果不存在,随便一个iptalbles命令即可出现,如iptables -F 清除iptables已有的所有规则。配置如下端口对外开放。

[root@localhost src]# vim /etc/sysconfig/iptables
#RabbitMQ  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 15672 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25672 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5672 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4369 -j ACCEPT  
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5671 -j ACCEPT  
#RabbitMQ  

启动插件

./rabbitmq-plugins enable rabbitmq_management(执行一次以后不用再次执行)

客户端打开管理页面

输入:服务器地址:15672    默认gust,不可用。只能在服务端可用。

关于rabbitmq的详细内容以后我还会补充,以前也有一篇我自己的博文,有兴趣的可以点开看下:.Net使用Rabbitmq详解

yum安装软件详细

关于yum的使用是非常简单的,大家可以看下 http://man.linuxde.net/yum 多敲敲练练就会啦。

而文章一开始说yum方式安装nginx,那么命令看仔细啦啊。

[root@localhost src]# yum install nginx

对,你没有看错,在线安装,自动解决软件相互依赖问题,安装成功啦,就是这么简单。

这里值得一说的是yum的包源配置是在下面的文件中:

[root@localhost etc]# ll /etc|grep yum
drwxr-xr-x. 6 root root 95 2月 7 20:09 yum
-rw-r--r--. 1 root root 970 11月 15 23:30 yum.conf
drwxr-xr-x. 2 root root 4096 2月 7 20:10 yum.repos.d

在yum.repos.d这个文件夹下,你如何看懂文件中的内容,以及如何配置,那么你需要自行百度,我不想写啦

主要内容:网络,系统,cpu,内存,硬盘,进程等等常用的基础信息查看与基础功能设置。

Linux系统时间相关

查看系统当前时间

[root@zlhpc ~]# date
2017年 02月 09日 星期四 03:20:45 CST

修改时间

[root@zlhpc sysconfig]# date -s "2016-02-09 15:15:00"
2016年 02月 09日 星期二 15:15:00 CST
[root@zlhpc sysconfig]# date
2016年 02月 09日 星期二 15:15:05 CST

同步网路时间

[root@zlhpc sysconfig]# ntpdate -u ntp.api.bz
9 Feb 15:56:21 ntpdate[4132]: step time server 17.253.68.253 offset 31624839.558211 sec
[root@zlhpc sysconfig]# date
2017年 02月 09日 星期四 15:56:27 CST

note1:ntp是网络时间协议,主要用作同步计算机时间与服务器时间一致的。常见的ntp服务器有:210.72.145.44(国家授时中心服务器地址),ntp.api.bz(上海),time.nist.gov(美国),ntp.fudan.edu.cn(复旦),s1b.time.edu.cn(清华大学),等等。

note2:date命令设置时间只有超级用户才有,一般用户只能查看,且修改玩之后要记得执行clock -w 命令,把系统时间写入CMOS中。

Linux系统主机名与操作系统相关信息

显示系统主机名

[root@zlhpc sysconfig]# hostname
zlhpc

修改主机名,需要同时修改/etc/hosts和/etc/sysconfig/network,且修改完之后需重启机器生效且永久保存,使用hostname命令只能临时修改不能永久有效。

[root@zlhpc sysconfig]# vim /etc/hostname
-v:详细信息模式;
-a:显示主机别名;
-d:显示DNS域名;
-f:显示FQDN名称;
-i:显示主机的ip地址;
-s:显示短主机名称,在第一个点处截断;
-y:显示NIS域名。

uname查看操作系统相关信息

[root@zlhpc /]# uname -a
Linux zlhpc 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

数据依次为:内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称

参数如下

  • -m或–machine 显示主机的硬件(CPU)名
  • -n或-nodename 显示主机在网络节点上的名称或主机名称
  • -r或–release 显示linux操作系统内核版本号
  • -s或–sysname 显示linux内核名称
  • -v 显示显示操作系统是第几个 version 版本
  • -p 显示处理器类型或unknown
  • -i 显示硬件平台类型或unknown
  • -o 显示操作系统名
  • –help 获得帮助信息
  • –version 显示uname版本信息

其他几种出去啊看Linux版本信息的方法

[root@zlhpc /]# cat /proc/version
Linux version 3.10.0-327.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015
[root@zlhpc /]# cat /etc/issue
\S
Kernel \r on an \m [root@zlhpc /]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.2.1511 (Core)
Release: 7.2.1511
Codename: Core

Linux系统查看cpu信息

[root@zlhpc /]# grep "model name" /proc/cpuinfo  #查看cpu信息
model name : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
[root@zlhpc /]# more /proc/cpuinfo #查看cpu信息
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
stepping : 3
microcode : 0x1e
cpu MHz : 3591.678
cache size : 8192 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
[root@zlhpc /]# getconf LONG_BIT #查看cpu位数
64

Linux系统用户与用户组

用户与组分类,根据帐号或组的位置都可以分为:本地帐号|组,远程(域)帐号|组 ,LDAP,NIS

根据帐号|组的功能分类可以分为:超级用户(root) uid:0 ,普通用户。普通用户又分为:系统帐号(uid范围:1-499,1-99:由distributions自行创建的系统帐号,100-499:若用户有系统帐号的需求时,可以使用的帐号uid)和可登录帐号(uid范围:500+)

关于系统用户和组的相关配置文件放在系统的一下文件中:

用户的帐号信息:/etc/passwd 用户的密码信息:/etc/shadow

用户组信息:/etc/group  组的密码信息:/etc/gshadow

那么下面我们一一打开这些文件来看看他们到底存放啦那些内容,格式是什么样的,我们又该怎么解读。

[root@zlhpc home]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:997:995:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
libstoragemgmt:x:996:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
chrony:x:995:993::/var/lib/chrony:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rabbitmq:x:994:992:RabbitMQ messaging server:/var/lib/rabbitmq:/bin/bash
nginx:x:993:991:Nginx web server:/var/lib/nginx:/sbin/nologin

每一行都代表一个用户,每一行中的冒号(:)代表分割符,那我们拿第一行做一个解读,如下:

root:x:0:0:root:/root:/bin/bash

  1. root:用户名
  2. x:密码占位符
  3. UID
  4. GID
  5. 用户描述
  6. 用户主文件夹
  7. 登录后使用的shell./sbin/nologin此shell会让该用户无法登录。

查看系统中支持那些shell:

[root@zlhpc home]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

接下来我们看下用户关于密码的配置文件:

[root@zlhpc home]# cat /etc/shadow
root:$6$zVDR2oO1Yg7alTbs$.70PPMYxg70k9BvLtjHdm94CDA1YWDRDI5NFzSfcmZF5WMESgIbLUdnqRjuVycg481Ny9rl//YzAFnXhurQi//::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
sync:*:16659:0:99999:7:::
shutdown:*:16659:0:99999:7:::
halt:*:16659:0:99999:7:::
mail:*:16659:0:99999:7:::
operator:*:16659:0:99999:7:::
games:*:16659:0:99999:7:::
ftp:*:16659:0:99999:7:::
nobody:*:16659:0:99999:7:::
avahi-autoipd:!!:17203::::::
systemd-bus-proxy:!!:17203::::::
systemd-network:!!:17203::::::
dbus:!!:17203::::::
polkitd:!!:17203::::::
tss:!!:17203::::::
postfix:!!:17203::::::
sshd:!!:17203::::::
rpc:!!:17204:0:99999:7:::
abrt:!!:17204::::::
libstoragemgmt:!!:17204::::::
chrony:!!:17204::::::
ntp:!!:17204::::::
tcpdump:!!:17204::::::
rabbitmq:!!:17204::::::
nginx:!!:17204::::::

依然拿出第一行做一下解读:

root:$6$zVDR2oO1Yg7alTbs$.70PPMYxg70k9BvLtjHdm94CDA1YWDRDI5NFzSfcmZF5WMESgIbLUdnqRjuVycg481Ny9rl//YzAFnXhurQi//::0:99999:7:::

  1. root:用户名
  2. $6$zVDR2oO1Yg7alTbs$.70PPMYxg70k9BvLtjHdm94CDA1YWDRDI5NFzSfcmZF5WMESgIbLUdnqRjuVycg481Ny9rl//YzAFnXhurQi//:root用户用sha512加密过的用户密码
  3. 最近更改密码的日期,从19700101开始计算至修改密码那天的累积天数。
  4. 0:密码不能更改的天数,最近更改过后几年之后才能被再次更改,0表示可以随意随时修改。
  5. 99999:密码的过期时间,密码在多少天后必须被修改。
  6. 7:系统需要在密码过期的的前7天发出密码即将过期的警告。
  7. 宽限天数,密码过啦几天后还能修改密码。
  8. 帐号过期时间
  9. 保留字段,目前没有用到。

查看关于组的配置文件,如下:

[root@zlhpc home]# head -n 4 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:

root:x:0:

  1. root:用户组名称
  2. x:用户组密码的占位符
  3. 0:用户组的GID
  4. 此用户组支持的帐号名称。

接下来我们来看下帐号管理,关于帐号的增删改查操作

1、添加用户

[root@zlhpc home]# useradd zhanglonghao
[root@zlhpc home]# useradd zhanglonghao1

useradd (选项)(参数)

  • -c<备注>:加上备注文字。备注文字会保存在passwd的备注栏位中;
  • -d<登入目录>:指定用户登入时的启始目录;
  • -D:变更预设值;
  • -e<有效期限>:指定帐号的有效期限;
  • -f<缓冲天数>:指定在密码过期后多少天即关闭该帐号;
  • -g<群组>:指定用户所属的群组;
  • -G<群组>:指定用户所属的附加群组;
  • -m:自动建立用户的登入目录;
  • -M:不要自动建立用户的登入目录;
  • -n:取消建立以用户名称为名的群组;
  • -r:建立系统帐号;
  • -s:指定用户登入后所使用的shell;
  • -u:指定用户id。

修改用户信息,参数选项和添加一致。

[root@zlhpc home]# usermod zhanglonghao -u 1005
[root@zlhpc home]# id zhanglonghao
uid=1005(zhanglonghao) gid=1000(zhanglonghao) 组=1000(zhanglonghao)

删除用户

[root@zlhpc home]# userdel zhanglonghao2 -rf

userdel,参数如下:如果不加下面的参数进行直接删除,则用户删除,用户的目录与文件依旧保留。

  • -f:强制删除用户,即使用户当前已登录;
  • -r:删除用户的同时,删除与用户相关的所有文件。

把某个用户添加到哪个组中:示例把用户zhanglonghao添加到zhanglonghao1的组中,且也在原有的组中不被删除,这是必须加 -a意思是附加的意思,如下:

[root@zlhpc home]# usermod zhanglonghao -a -G zhanglonghao1
[root@zlhpc home]# groups zhanglonghao
zhanglonghao : zhanglonghao zhanglonghao1

id查看用户的id信息

[root@zlhpc home]# id zhanglonghao
uid=1005(zhanglonghao) gid=1000(zhanglonghao) 组=1000(zhanglonghao),1001(zhanglonghao1)

查看当前登录系统的用户信息

[root@zlhpc home]# who
root pts/0 2017-02-12 15:01 (172.18.8.196)
[root@zlhpc home]# users
root
[root@zlhpc home]# id -un
root
[root@zlhpc home]# whoami
root
[root@zlhpc home]# who
root pts/0 2017-02-12 15:01 (172.18.8.196)
[root@zlhpc home]# w
16:51:15 up 1:50, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.18.8.196 15:01 3.00s 0.44s 0.01s w

我们针对w这个命令做个解释

  1. user:用户名
  2. tty:用户的机器名或tty号
  3. from:远程主机的地址
  4. login@:用户登录系统的时间
  5. idle:空闲时间
  6. jcpu:附加到tty(终端)的进程所用的时间(JCPU时间)
  7. pcpu:当前进程所用时间(PCPU时间)
  8. what:用户当前正在使用的命令

参数为 -h :忽略头文件信息, -u:显示结果的加载时间 , -s :不显示JCPU,PCPU,登陆时间。

Liunx网络的基本操作

打开网页:curl

[root@zlhpc ~]# curl www.baidu.com
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class="head_wrapper"> <div class="s_form"> <div class="s_form_wrapper"> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class="fm"> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class="s_ipt" value maxlength=255 autocomplete=off autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn"></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class="mnav">新闻</a> <a href=http://www.hao123.com name=tj_trhao123 class="mnav">hao123</a> <a href=http://map.baidu.com name=tj_trmap class="mnav">地图</a> <a href=http://v.baidu.com name=tj_trvideo class="mnav">视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class="mnav">贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class="lb">登录</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script> <a href=//www.baidu.com/more/ name=tj_briicon class="bri" style="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必读</a>&nbsp; <a href=http://jianyi.baidu.com/ class="cp-feedback">意见反馈</a>&nbsp;京ICP证030173号&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

下载文件:wget

[root@zlhpc ~]# wget http://download.redis.io/releases/redis-3.0.6.tar.gz

linux下的文本浏览器:w3m与links

[root@zlhpc ~]# w3m www.baidu.com
[root@zlhpc ~]# links www.baidu.com

检查你的网络与另外一台机器是否互通:ping

[root@zlhpc ~]# ping www.baidu.com

做路由图提供我们分析哪里出现故障或者是否存在网络拥塞情况:mtr

[root@zlhpc ~]# mtr
[root@zlhpc ~]# mtr -r -c 30 www.baidu.com #每秒发送数据包的数量是30 ,mtr -r -c 30 -s 1024 www.baidu.com #ping包的大小为1024个字节
Start: Sun Feb 12 18:01:09 2017
HOST: zlhpc Loss% Snt Last Avg Best Wrst StDev
1.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
2.|-- 116.236.169.77 0.0% 30 4179. 9116. 4179. 11973 2051.2
3.|-- 124.74.124.165 0.0% 30 1.9 3.6 1.7 5.4 1.0
4.|-- 124.74.210.101 0.0% 30 4.1 4.5 2.4 6.1 1.0
5.|-- 59.43.77.141 0.0% 30 20.1 18.1 7.4 54.5 8.2
6.|-- 59.43.80.94 0.0% 30 4.3 6.0 2.7 24.3 3.6
7.|-- 202.97.26.2 86.7% 30 5.1 5.2 5.0 5.4 0.0
8.|-- 220.191.200.30 0.0% 30 5.9 5.5 5.1 7.0 0.3
9.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
10.|-- 115.239.209.2 0.0% 30 6.8 7.1 6.6 8.0 0.0
11.|-- ??? 100.0 30 0.0 0.0 0.0 0.0 0.0
12.|-- 115.239.210.27 0.0% 30 6.1 6.5 5.6 11.7 1.4
  • 第一列:显示的是IP地址和本机域名,这点和tracert很像。
  • 第二列 Loss%:是显示的每个对应IP的丢包率。
  • 第三列 snt:snt等于10,设置每秒发送数据包的数量,默认值是10 可以通过参数 -c来指定。
  • 第四列 Last:显示的最近一次的返回时延。
  • 第五列 Avg:平均值,这个应该是发送ping包的平均时延。
  • 第六列 Best:最好或者说时延最短的时间。
  • 第七列 Wrst:最坏或者说时延最长的时间。
  • 第八列 StDev:标准偏差。

mtr参数如下:

  1. -h 提供帮助命令
  2. -v 显示mtr的版本信息
  3. -r 已报告模式显示
  4. -c 设置每秒发送数据包的数量
  5. -s 用来指定ping数据包的大小
  6. -n no-dns不对IP地址做域名解析
  7. -a 来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
  8. -i 使用这个参数来设置ICMP返回之间的要求默认是1秒
  9. -4 IPv4
  10. -6 IPv6

DNS查询,如果是参数是域名输出关联ip,如果参数是ip输出关联的域名:host

[root@zlhpc ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 115.239.211.112
www.a.shifen.com has address 115.239.210.27

出网络接口配置、调优和debug的各种选项:ifconfig

[root@zlhpc ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.8.190 netmask 255.255.255.0 broadcast 172.18.8.255
inet6 fe80::20c:29ff:feb5:d2d8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:b5:d2:d8 txqueuelen 1000 (Ethernet)
RX packets 10916 bytes 7044121 (6.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7267 bytes 774719 (756.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 318 bytes 32844 (32.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 318 bytes 32844 (32.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

关于ip的命令

[root@zlhpc ~]# ip link show  #查看所有网络接口属性信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:b5:d2:d8 brd ff:ff:ff:ff:ff:ff
[root@zlhpc ~]# ip -s link show #查看所有统计信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
32844 318 0 0 0 0
TX: bytes packets errors dropped carrier collsns
32844 318 0 0 0 0
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:b5:d2:d8 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
7050452 10988 0 0 0 0
TX: bytes packets errors dropped carrier collsns
780097 7309 0 0 0 0
[root@zlhpc ~]# ip addr show #查看网络信息
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:b5:d2:d8 brd ff:ff:ff:ff:ff:ff
inet 172.18.8.190/24 brd 172.18.8.255 scope global dynamic eno16777736
valid_lft 83120sec preferred_lft 83120sec
inet6 fe80::20c:29ff:feb5:d2d8/64 scope link
valid_lft forever preferred_lft forever

这里简单介绍下,以后会有深入介绍。

ifdown与ifup分别是禁用与启用摸个网络接口

[root@zlhpc ~]# ifdown eno16777736
[root@zlhpc ~]# ifup eno16777736

netstat命令查看网络信息

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的,netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。

netstat [选项]

  • -a 显示所有socket,包括正在监听的。
  • -c 每隔1秒就重新显示一遍,直到用户中断它。
  • -i 显示所有网络接口的信息,格式同“ifconfig -e”。
  • -n 以网络IP地址代替名称,显示出网络连接情形
  • -r 显示核心路由表,格式同“route -e”。
  • -t 显示TCP协议的连接情况。
  • -u 显示UDP协议的连接情况。
  • -v 显示正在进行的工作。
  • -p 显示建立相关链接的程序名

列出所有连接

[root@zlhpc ~]# netstat -a  --列出所有连接
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN

只列出tcp或者udp协议的连接

[root@zlhpc ~]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
[root@zlhpc ~]# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:18604 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp6 0 0 localhost:323 [::]:*
udp6 0 0 [::]:53744 [::]:*

禁用反向域名解析,加快查询速度

[root@zlhpc ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 52 172.18.8.190:22 172.18.8.196:51171 ESTABLISHED
tcp 0 0 172.18.8.190:22 172.18.8.196:49639 ESTABLISHED

只列出监听中的连接

[root@zlhpc ~]# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN

获取进程名,进程号以及用户id

[root@zlhpc ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1538/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2094/master
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1538/sshd
tcp6 0 0 ::1:25 :::* LISTEN 2094/master
[root@zlhpc ~]# netstat -ltpe
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN root 16299 1/systemd
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN root 21179 1538/sshd
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN root 22083 2094/master
tcp6 0 0 [::]:sunrpc [::]:* LISTEN root 16298 1/systemd
tcp6 0 0 [::]:ssh [::]:* LISTEN root 21189 1538/sshd
tcp6 0 0 localhost:smtp [::]:* LISTEN root 22084 2094/master

网络报统计情况

[root@zlhpc ~]# netstat -s
Ip:
7872 total packets received
0 forwarded
0 incoming packets discarded
6932 incoming packets delivered
7284 requests sent out
60 dropped because of missing route
Icmp:
260 ICMP messages received
1 input ICMP message failed.
ICMP input histogram:
destination unreachable: 1
timeout in transit: 214
echo requests: 1
echo replies: 44
409 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 33
echo request: 12
echo replies:
... OUTPUT TRUNCATED ...

持续输出 -c持续输出tcp协议信息

[root@zlhpc ~]# netstat -ct
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 52 zlhpc:ssh localhost:51171 ESTABLISHED
tcp 0 0 zlhpc:ssh localhost:49639 ESTABLISHED

iftop工具实时监控linux系统的网络流量信息

最后上一个简单的实时流量监控工具:iftop ,它可以用来监控实时流量,反向解析ip,显示端口等。使用需先安装iftop,官网地址:http://www.ex-parrot.com/~pdw/iftop/

不过还有很多类似的软件,我们放在以后讨论。

[root@zlhpc ~]# iftop
interface: eno16777736
IP address is: 172.18.8.190
MAC address is: 00:0c:29:b5:d2:d8

常用参数命令:

  • -i设定监测的网卡,如:# iftop -i eth1
  • -B 以bytes为单位显示流量(默认是bits),如:# iftop -B
  • -n使host信息默认直接都显示IP,如:# iftop -n
  • -N使端口信息默认直接都显示端口号,如: # iftop -N
  • -F显示特定网段的进出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
  • -h(display this message),帮助,显示参数信息
  • -p使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
  • -b使流量图形条默认就显示;
  • -f这个暂时还不太会用,过滤计算包用的;
  • -P使host信息及端口信息默认就都显示;
  • -m设置界面最上边的刻度的最大值,刻度分五个大段显示,例:# iftop -m 100M

图解:

  • 界面头部:流量刻度尺,对应下边每行的白色横条。
  • 界面中部:左边为服务器;中间为外网IP,左箭头流入,右箭头流出;右边为2s 10s 40s 的流量情况。
  • 界面下部:TX:发送流量 ,RX:接收流量 ,TOTAL:总流量 ,Cumm:运行iftop到目前时间的总流量 ,peak:流量峰值 ,rates:分别表示过去 2s 10s 40s 的平均流量

界面命令:

  • 按h切换是否显示帮助;
  • 按n切换显示本机的IP或主机名;
  • 按s切换是否显示本机的host信息;
  • 按d切换是否显示远端目标主机的host信息;
  • 按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
  • 按N切换显示端口号或端口服务名称;
  • 按S切换是否显示本机的端口信息;
  • 按D切换是否显示远端目标主机的端口信息;
  • 按p切换是否显示端口信息;
  • 按P切换暂停/继续显示;
  • 按b切换是否显示平均流量图形条;
  • 按B切换计算2秒或10秒或40秒内的平均流量;
  • 按T切换是否显示每个连接的总流量;
  • 按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
  • 按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
  • 按j或按k可以向上或向下滚动屏幕显示的连接记录;
  • 按1或2或3可以根据右侧显示的三列流量数据进行排序;
  • 按<根据左边的本机名或IP排序;
  • 按>根据远端目标主机的主机名或IP排序;
  • 按o切换是否固定只显示当前的连接;
  • 按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
  • 按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!
  • 按q退出监控。

Linux系统的硬盘存储与tree工具

整个系统的存储情况

[root@zlhpc ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 2.1G 16G 12% /
devtmpfs 479M 0 479M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.7M 483M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 497M 124M 374M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0

某个文件或文件夹大小

[root@zlhpc usr]# du --max-depth=1 -h
108M ./bin
46M ./sbin
390M ./lib
417M ./lib64
517M ./share
0 ./etc
0 ./games
35M ./include
78M ./libexec
51M ./local
55M ./src
1.7G .

du的相关参数如下:

  • -a 显示所有文件及目录大小,递归显示
  • --apparent-size 显示文件及目录展现大小,而非磁盘占用量。
  • -B,--block-size='SIZE' 显示块的数量,引号中的size表示系统的块尺寸。
  • -b 以byte的方式显示查看对象大小,相当于--apparent-size --block-size=1
  • -c 计总并以total表面总数
  • -D 计算不包含链接文件
  • -H 类似于--si 以1000为计算单位计算文件及目录的磁盘占用量
  • -h 人类可读的模式(K,M,G)
  • --si 以1000取代1024换算单位
  • -k 类似于--block-size=1k指定块大小为1k,计算文件目录大小。
  • -l, --count-links 多次计算如果包含硬链接
  • -m 类似于--block-size=1M指定块大小为1M,计算文件目录大小。
  • -L, --dereference 和-D参数不同,忽略所有链接对象(文件,目录)
  • -P, --no-dereference 默认参数,不
  • -0 用0字节替代换行符
  • -S, --separate-dirs 不包含子目录的大小
  • -s, --summarize 仅显示当前目录级下每个对象的总大小
  • -x, --one-file-system 跳过那些在不同文件系统上的目录。
  • -X FILE, --exclude-from=FILE 不包含匹配的对象,这里的FILE是用户指定的文件对象
  • --exclude=PATTERN
  • --max-depth= 显示目录级的深度--max-depth=0相当于--summarize
  • --time 显示目录中文件的或子目录最后的改动时间
  • --time=WORD 以关键词 WORD显示时间,包含:atime,access,use,ctime,status
  • --time-style=STYLE 调整显示时间格式,格式包含full-iso, long-iso, iso, +FORMAT(该格式来自于date命令)
  • --help 帮助
  • --version 版本信息

使用tree工具,查看树形目录结构,首先先安装tree工具

[root@zlhpc usr]# tree -L 3 src   #列出src层数为3以内的所有文件
src
├── debug
└── kernels
└── 3.10.0-514.6.1.el7.x86_64
├── arch
├── block
├── crypto
├── drivers
├── firmware

tree常用参数:

-d:仅显示目录

-a:显示所有

-f:显示完整路径

-L n :n为数字,表示要现实几层。

进程资源的实时占用状况,Linux中的任务管理器:top

top默认3秒刷新一次,按空格立即刷新,q:退出,M:按内存排序,P:按cpu排序,<>:翻页 。

top - 21:32:45 up  6:31,  2 users,  load average: 0.01, 0.02, 0.05
Tasks: 348 total, 2 running, 346 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1001332 total, 321616 free, 166176 used, 513540 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 596688 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3865 root 20 0 146296 2272 1452 R 0.7 0.2 0:00.62 top
1 root 20 0 126416 7184 2608 S 0.0 0.7 0:02.43 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.06 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.37 ksoftirqd/0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.98 kworker/u256:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/1
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/2
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/3
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcuob/4

统计讲解:

第一行的统计信息与命令uptime命令执行结果一致,依次为:

  • 21:32:45 :当前时间
  • 6:31 :系统运行时间
  • 2 users:当前登录用户数
  • load average: 0.01, 0.02, 0.05  :系统负载,即任务队列的平均长度:1分钟,5分钟,15分钟前到现在的平均值。一般来说,每个cpu内核当前活动进程不大于3,则系统运行表现良好。当然这里说的是每个cpu内核,也就是如果你的主机是8核的话,那么uptime输出的最后一串字符应小于8*3=24即表示系统负载不是很严重。

第二、三行为进程和cpu的信息,当有多个cpu时,这些内容可能会超过2行,内容如下:

  • Tasks: 348 total:进程总数
  • 2 running:正在运行的进程数
  • 346 sleeping:睡眠的进程数
  • 0 stopped:停止的进程数
  • 0 zombie :僵尸进程数
  • %Cpu(s) 0.3 us:系统用户进程使用cpu百分比,不包括调高优先级的进程。cpu%是由每个核的cpu占用率之和计算出来的,如果是4核,核1使用率为100%,核2cpu使用率为100%,则会出现cpu高于100%的现象,最终为200%。
  • 0.3 sy :内核空间占用cpu百分比
  • 0.0 ni :用户进程空间内改变过优先级的进程占用cpu百分比
  • 99.3 id :空闲cpu百分比
  • 0.0 wa :等待输入输出的cpu时间百分比
  • 0.0 hi :硬件cpu中断占用百分比
  • 0.0 si :软中断占用百分比
  • 0.0 st :虚拟机占用百分比

第四、五行为内存信息

  • KiB Mem : 1001332 total :物力内存总量
  • 321616 free :空闲内存总量
  • 166176 used :使用物理内存总量
  • 513540 buff/cache :用作内核缓存的内存量,和free -k 命令一个意思
  • KiB Swap: 2097148 total :交换区总量
  • 2097148 free :空闲交换区总量
  • 0 used :使用交换区总量
  • 596688 avail Mem :缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。

第六列头标题详细

  • PID :进程id
  • PPID :父进程id
  • RUSER :Real user name
  • UID : 进程所有者的用户id
  • USER : 进程所有者的用户名
  • GROUP : 进程所有者的组名
  • TTY : 启动进程的终端名。不是从终端启动的进程则显示为 ?
  • PR : 优先级
  • NI : nice值。负值表示高优先级,正值表示低优先级
  • P : 最后使用的CPU,仅在多CPU环境下有意义
  • %CPU : 上次更新到现在的CPU时间占用百分比
  • TIME : 进程使用的CPU时间总计,单位秒
  • TIME+ : 进程使用的CPU时间总计,单位1/100秒
  • %MEM : 进程使用的物理内存百分比
  • VIRT : 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • SWAP : 进程使用的虚拟内存中,被换出的大小,单位kb。
  • RES: 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • CODE: 可执行代码占用的物理内存大小,单位kb
  • DATA : 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
  • SHR : 共享内存大小,单位kb
  • nFLT: 页面错误次数
  • nDRT : 最后一次写入到现在,被修改过的页面数。
  • S : 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
  • COMMAND :命令名/命令行
  • WCHAN : 若该进程在睡眠,则显示睡眠中的系统函数名
  • Flags : 任务标志,参考 sched.h

top命令参数

  • d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
  • p 通过指定监控进程ID来仅仅监控某个进程的状态。
  • q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  • S 指定累计模式
  • s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
  • i 使top不显示任何闲置或者僵死进程。
  • c 显示整个命令行而不只是显示命令名

常用命令

top   //每隔5秒显式所有进程的资源占用情况
top -d 2 //每隔2秒显式所有进程的资源占用情况
top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数

Linux系统free命令查看系统内存情况

[root@zlhpc ~]# free -h
total used free shared buff/cache available
Mem: 977M 138M 693M 6.6M 145M 690M
Swap: 2.0G 0B 2.0G
  • Mem:系统物理内存
  • Swap:相当于windows中的虚拟内存,这里叫做交换区,当系统的物理内存不够用时,系统会将磁盘空间虚拟成内存使用。内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行。
  • Buff:buff这里我简单说明下,与cache对比,他是在做写操作的时候,把分散的写操作集中进行,减少磁盘I/O,从而提高系统性能。文件是在写操作之前先放入buff。
  • Cache:在做读操作的时候,把数据放入缓存中,等下次来访问此数据时候,不用读磁盘,直接读缓存即可。
  • total:去掉为硬件和操作系统保留的内存后剩余的内存总量。许多人奇怪自己的电脑安装了一共8G的内存,但是显示总共只有七点几G的,现在应该没什么疑惑了把,不管Linux还是Windows都会有部分内存是保留给硬件和操作系统的!
  • used:已分配的内存
  • free:未分配内存
  • shared:共享内存
  • available:可以使用的内存总量

Linux系统查看内存信息

[root@zlhpc /]# more /proc/meminfo   #查看内存信息
MemTotal: 1001332 kB
MemFree: 322740 kB
MemAvailable: 597536 kB
Buffers: 1004 kB
Cached: 261816 kB
SwapCached: 0 kB
Active: 169740 kB
Inactive: 167476 kB
Active(anon): 74780 kB
Inactive(anon): 6452 kB
Active(file): 94960 kB
Inactive(file): 161024 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 2097148 kB
SwapFree: 2097148 kB
Dirty: 0 kB
Writeback: 0 kB
[root@zlhpc /]# grep MemTotal /proc/meminfo #查看内存信息
MemTotal: 1001332 kB

Linux系统进程相关

pstree:树形结构显示系统进程信息

-p显示进程号

[root@zlhpc ~]# pstree -p
systemd(1)─┬─NetworkManager(978)─┬─dhclient(1320)
│ ├─{NetworkManager}(1051)
│ └─{NetworkManager}(1054)
├─abrt-watch-log(886)
├─abrtd(885)
├─agetty(906)
├─atd(900)
├─auditd(852)───{auditd}(871)

ps:用于展示当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

[root@zlhpc ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 126420 7172 ? Ss 09:12 0:01 /usr/lib/systemd/system
root 2 0.0 0.0 0 0 ? S 09:12 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 09:12 0:00 [ksoftirqd/0]
root 6 0.0 0.0 0 0 ? S 09:12 0:00 [kworker/u256:0]
root 7 0.0 0.0 0 0 ? S 09:12 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 09:12 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 09:12 0:00 [rcuob/0]
  • user:运行次进程的用户名
  • pid:该进程的进程号码
  • %CPU:该进程使用掉的cpu资源百分比
  • %MEM:该进程所占用的物理内存百分比
  • VSZ:该进程使用掉的虚拟内存量(Kbytes)
  • RSS:该进程占用的固定内存量(Kbytes)
  • TTY:该进程是在哪个终端机上运作,若与终端机无关,则显示?,另外,tty-tty6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。
  • STAT:该程序目前的状态,Linux进程有6种基本状态:R:正在运行或运行队列中等待,S:可中断的睡眠状态,可被某些讯号(signal)唤醒。T:暂停状态或跟踪状态,D:不可中断的睡眠状态,Z:退出状态,进程成为僵尸进程,X:退出状态,进程即将被销毁。6种状态下又有6种子状态分别为:<:高优先级的,N:低优先级的,L:有内存分页但是带锁,s:包含子进程,l:多线程,+:前台程序(命令正在打开使用的程序,比如vim)
  • START:该进程被触发的时间
  • Time:该进程实际使用cpu运作的时间
  • Command:该程序的实际指令

恐怖的参数多的如下:

  • -a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
  • a:显示现行终端机下的所有程序,包括其他用户的程序。
  • -A:显示所有程序。
  • -c:显示CLS和PRI栏位。
  • c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
  • -C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。
  • -d:显示所有程序,但不包括阶段作业领导者的程序。
  • -e:此选项的效果和指定"A"选项相同。
  • e:列出程序时,显示每个程序所使用的环境变量。
  • -f:显示UID,PPIP,C与STIME栏位。
  • f:用ASCII字符显示树状结构,表达程序间的相互关系。
  • -g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。
  • g:显示现行终端机下的所有程序,包括群组领导者的程序。
  • -G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
  • h:不显示标题列。
  • -H:显示树状结构,表示程序间的相互关系。
  • -j或j:采用工作控制的格式显示程序状况。
  • -l或l:采用详细的格式来显示程序状况。
  • L:列出栏位的相关信息。
  • -m或m:显示所有的执行绪。
  • n:以数字来表示USER和WCHAN栏位。
  • -N:显示所有的程序,除了执行ps指令终端机下的程序之外。
  • -p<程序识别码>:指定程序识别码,并列出该程序的状况。
  • p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
  • r:只列出现行终端机正在执行中的程序。
  • -s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
  • s:采用程序信号的格式显示程序状况。
  • S:列出程序时,包括已中断的子程序资料。
  • -t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
  • t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。
  • -T:显示现行终端机下的所有程序。
  • -u<用户识别码>:此选项的效果和指定"-U"选项相同。
  • u:以用户为主的格式来显示程序状况。
  • -U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
  • U<用户名称>:列出属于该用户的程序的状况。
  • v:采用虚拟内存的格式显示程序状况。
  • -V或V:显示版本信息。 -w或w:采用宽阔的格式来显示程序状况。 
  • x:显示所有程序,不以终端机来区分。
  • X:采用旧式的Linux i386登陆格式显示程序状况。
  • -y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
  • -<程序识别码>:此选项的效果和指定"p"选项相同。
  • --cols<每列字符数>:设置每列的最大字符数。
  • --columns<每列字符数>:此选项的效果和指定"--cols"选项相同。
  • --cumulative:此选项的效果和指定"S"选项相同。
  • --deselect:此选项的效果和指定"-N"选项相同。
  • --forest:此选项的效果和指定"f"选项相同。
  • --headers:重复显示标题列。
  • --help:在线帮助。
  • --info:显示排错信息。
  • --lines<显示列数>:设置显示画面的列数。
  • --no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。
  • --group<群组名称>:此选项的效果和指定"-G"选项相同。
  • --Group<群组识别码>:此选项的效果和指定"-G"选项相同。
  • --pid<程序识别码>:此选项的效果和指定"-p"选项相同。
  • --rows<显示列数>:此选项的效果和指定"--lines"选项相同。
  • --sid<阶段作业>:此选项的效果和指定"-s"选项相同。
  • --tty<终端机编号>:此选项的效果和指定"-t"选项相同。
  • --user<用户名称>:此选项的效果和指定"-U"选项相同。
  • --User<用户识别码>:此选项的效果和指定"-U"选项相同。
  • --version:此选项的效果和指定"-V"选项相同。
  • --widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
[root@zlhpc ~]# ps -ef    --标准格式显示进程
[root@zlhpc ~]# ps -aux --BSD格式显示进程

linux命名详解及其软件安装实例的更多相关文章

  1. Linux目录详解,软件应该安装到哪个目录

    原文地址:https://www.w3h5.com/post/336.html 我们应该知道 Windows 有一个默认的安装目录专门用来安装软件.Linux 的软件安装目录也应该是有讲究的,遵循这一 ...

  2. Linux 链接详解----静态链接实例分析

    由Linux链接详解(1)中我们简单的分析了静态库的引用解析和重定位的内容, 下面我们结合实例来看一下静态链接重定位过程. /* * a.c */ ; void add(int c); int mai ...

  3. Linux 目录详解 树状目录结构图

    1.树状目录结构图 2./目录 目录 描述 / 第一层次结构的根.整个文件系统层次结构的根目录. /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如:cat.ls.cp,和/ ...

  4. Linux 系统结构详解

    Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...

  5. [转帖]Linux文件系统详解

    Linux文件系统详解 https://www.cnblogs.com/alantu2018/p/8461749.html 贼复杂.. 从操作系统的角度详解Linux文件系统层次.文件系统分类.文件系 ...

  6. [转载]Linux 命令详解:./configure、make、make install 命令

    [转载]Linux 命令详解:./configure.make.make install 命令 来源:https://www.cnblogs.com/tinywan/p/7230039.html 这些 ...

  7. Linux命令详解之—less命令

    Linux下还有一个与more命令非常类似的命令--less命令,相比于more命令,less命令更加灵活强大一些,今天就给大家介绍下Linux下的less命令. 更多Linux命令详情请看:Linu ...

  8. Linux命令详解之—more命令

    Linux more命令同cat命令一样,多用来查看文件内容,本文就为大家介绍下Linux more命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux的more命令类似 ca ...

  9. Linux命令详解之—cat命令

    cat命令的功能是连接文件或标准输入并打印,今天就为大家介绍下Linux中的cat命令. 更多Linux命令详情请看:Linux命令速查手册 Linux 的cat命令通常用来显示文件内容,也可以用来将 ...

随机推荐

  1. 基于jmeter和shell的接口性能自动化

    基于jmeter和shell的接口性能自动化 1. 总体需求 由于性能测试中涉及的查询接口多,版本迭代频繁,版本更新后自动跑一轮查询业务的性能,可以及时发现一些开发修复bug触发的非预期的bug,利用 ...

  2. ubuntu4.04服务器添加虚拟主机

    buntu 14.04配置虚拟主机   虚拟主机常用于在一个单独的IP地址上提供多个域名的网站服务.如果有人想在单个VPS的单个IP地址运行多个网站,这是非常有用的.在这个教程中,让我告诉你如何设置在 ...

  3. oracle的系统表

    -- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图-- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表.-- ALL_TABLES意为某一 ...

  4. js将时间戳装换成日期格式

    13位时间戳改为yyyy-MM-dd HH-mm-ss 格式 目标时间戳:1516324500000 formatDateTime (unix) { // 转换时间戳 var date = new D ...

  5. softmax_regression完成mnist手写体数据集的识别

    ---恢复内容开始--- import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnis ...

  6. 全志T8智能汽车方案芯片参数介绍

    T8处理器代表了Allwinner在智能汽车市场上的最新成就.T8适用于需要三维图形.高级视频处理.精密相机.多种连接选项和高水平系统集成的应用程序.它将把先进的消费电子体验带入未来的汽车,实现高性能 ...

  7. spring-3-AOP

    自定义注解类 1.定义注解类 package anno; import java.lang.annotation.ElementType; import java.lang.annotation.Re ...

  8. 5.1 qbxt 一测 T2

    求和[问题描述] 组合数 C(n,m)是从 n 个物品中取 m 个的方案数. C(n,m)=(n!)/(m!(n-m)!) 斐波那契数列 F 满足,F[0]=F[1]=1,n≥2 时 F[n]=F[n ...

  9. vue 页面过渡效果

    App.vue 模板 <template> <div id="app"> <transition :name="transition&quo ...

  10. 自动化测试如何解析excel文件?

    前言 自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们的首选,无论是编写测试用例还是存放测试数据,excel都是 ...