我是靠谱客的博主 迅速冰淇淋,最近开发中收集的这篇文章主要介绍Linux环境搭建根目录命令Shell脚本编程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

环境搭建

https://blog.csdn.net/tennysonsky/article/details/44410265

虚拟机VMware

1:CentOS的镜像ISO包下载到本地。

阿里云镜像站点 CentOS下载地址 : https://mirrors.aliyun.com/centos-vault/

2:开始VMware搭建虚拟机

1)虚拟化硬件资源,包括内存,硬盘,CPU等。

文件-新建虚拟机-典型-稍后安装操作系统-Linux+版本-虚拟机名称-默认最大磁盘大小+存储为单个文件

2)安装CentOS操作系统

CD/DVD-使用ISO镜像文件-选择下载好了的ISO文件-打开虚拟机(开始安装虚拟机)

Welcome to CenOS-Install or upgrade an existing system 安装或更新一个已经存在的系统

Disc Found磁盘发现-点击Skip略过

选择存储类型-Basic Storage Devices 磁盘类型

Hostname 主机名称

which type of installation would you like 选择哪种安装方式-Use All Space选择我所有的空间

writing storage configuration to disk 分区数据写入磁盘-write changes to disk 确定写入磁盘

3)虚拟机组网

本地机器的以太网 =》VMware软件的 VMware(相当于网关,故配置为x.x.1.1) =》虚拟机CentOS的NAT的VMware

第一步:虚拟机CentOS的NAT的VMware

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=00:0C:29:6A:75:29
TYPE=Ethernet
UUID=013cc1b8-bda3-43b7-b4f2-eb54d9c3ffb5
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=dhcp

##改为如下配置
DEVICE=eth0
HWADDR=00:0C:29:6A:75:29
TYPE=Ethernet
UUID=013cc1b8-bda3-43b7-b4f2-eb54d9c3ffb5
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.25
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS1=192.168.1.1
DNS2=8.8.8.8

##修改内容备注
ONBOOT=网络启用
BOOTPROTO=dhcp动态IP,static静态IP
IPADDR=CentOS的IP地址,自定义
GATEWAY=网关 192.168.1.1
NETMASK=子网掩码 255.255.255.0
DNS1=DNS服务器,可以网关一样 192.168.1.1
DNS2=备用DNS服务器 8.8.8.8

第二步:VMware软件的 VMware

编辑-虚拟网络编辑器-选择NAT模式的VMnet-NAT配置-网关192.168.1.1

第二步:本地机器的以太网

以太网-IPV4

IP地址 192.168.1.2

子网掩码:255.255.255.0

默认网关:192.168.1.1

首选DNS服务器:192.168.1.1

备用DNS服务器:8.8.8.8

根目录

在Linux世界里,一切皆文件。Linux的文件系统采用的是层级式树状结构,此结构中的最上层是根目录“/”。

目录应放置文件内容子目录
/bin二进制(binary)可执行文件
/boot开机文件与核心文件/boot/grub:开机
/boot/vmlinuz:核心
/dev所有外设相关文件/dev/null
/dev/zero
/dev/tty
/dev/loop *
/dev/sd *
/etc配置文件/etc/passwd:用户信息
/etc/group:用户组信息
/etc/shadow:加密密码,登录信息
/etc/inittab 运行级别的配置文件
/etc/modprobe.d
/etc/fstab
/etc/issue
/etc/opt:第三方协同软件 /opt 的相关配置文件
/etc/X11:X Window 有关的各种配置文件
/etc/sgm:SGML 格式有关的各项配置文件
/etc/xml:XML 格式有关的各项配置文件
/etc/hosts:储存 计算机网络 中各节点信息的计算机文件。这个文件负责将 主机名称 映射到相应的 IP地址 。hosts文件通常用于补充或替换网络中 DNS 的功能。和DNS不同的是,计算机的用户可以直接对hosts文件进行控制。
/etc/resolv.conf 是DNS配置文件。在网卡配置文件中进行配置,默认情况下 网卡配置文件DNS优先于/etc/resolv.conf。
/etc/hostname 在Centos 7,配置主机名,查看修改。
/etc/hosts ip与域名对应关系 ,解析域名(主机名),用/etc/hosts搭建网站的测试环境 (虚拟机)。不同服务器之间相互访问。
/etc/gateways 设置路由器
/etc/fstab file system table :文件系统挂载表,开机的时候设备与入口对应关系 开机自动挂载列表。
/etc/rc.local 开机自启
/etc/profile 环境变量配置文件
/etc/bashrc 命令别名
/etc/motd 文件中的内容 会在用户登录系统之后显示出来
/etc/issue /etc/issue.net 文件中的内容 会在用户登录系统之前显示出来
/home用户的家目录
/lib系统运行相关的库文件/lib/modules/:驱动程序
/lost-found系统非正常关机而留下的“无家可归”的文件
/media可移除的装置;比如软盘,光盘,DVD等/media/floppy
/media/cdrom
/mnt暂时挂载目录,临时安装文件的系统安装点
/opt主要给源码安装软件时选择的安装目录位置(option : 自由选择)
/proc虚拟文件系统 ,存放着用户与内核的交互信息。放置的数据都是在内存当中/proc/cpuinfo
/proc/dma
/proc/interrupts
/proc/ioports
/proc/net/*
/root系统管理员(root)的家目录
/run系统开机后所产生的各项信息
/sys核心与系统硬件信息较相关的信息 ,与/proc 非常类似
/sbin开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令(system binary)
/srv系统启动网络服务后,这些服务所需要取用的数据目录(service)/srv/www:WWW 服务器需要的网页资料
/selinux主要用来加固操作系统,提高系统的安全性
/tmp临时文件,开机或者重启后应清空
/usrUnix 操作系统软件安装目录(unix software resource)/usr/bin:全部的用户指令。此目录下不应该有子目录
/usr/src:原始码
/usr/lib:/lib 链接目录
/usr/local:系统管理员在本机自行安装自己下载的软件
/usr/sbin:非系统正常运作所需要的系统指令。/sbin链接目录
/usr/share:只读架构的数据文件
/var变动性的数据/var/log:登录文件放置的目录
/var/log/messages 存放的是系统的日志信息,它记录了各种事件,基本上什么应用都能往里写日志,在做故障诊断时可以首先查看该文件内容
/var/cache:用程序本身运作过程中产生的暂存档

命令


选项含义

帮助命令

help 查看内置命令的帮助文档

help 内置命令名称

help cd
help umask

注:
1)命令名称 --help

man 查看命令及配置文件的帮助文档

man 【1】 命令名称
man 【5】 配置文件名称

注:
1命令的帮助
5配置文件的帮助

例如:man passwd
因为系统的passwd即有命令,又有配置文件;而系统默认是查看命令的帮助,若想查看配置文件的帮助文档,则需要加水参数5。

whatis 查看命令简介

whatis 命令名称

apropos 查看配置文件简介

whatis 配置文件名称

history 查看历史命令

history 

用户与用户组

存放目录存放信息格式
/etc/passwd用户信息用户名:口令:用户标识号:用户组标识号:注释性描述:主目录:登录shell
/etc/group用户组信息组名:口令:组标识号:组内用户列表
/etc/shadow加密密码,登录信息

useradd 创建用户

useradd 【选项】 用户名;

如果没有指定用户组,系统将自动创建与用户名一样的用户组;并创建/home/用户名。

useradd -d 指定家目录 用户名;给创建的用户指定家目录

useradd -g 用户组 用户名;创建用户时指定用户组。

用户组家目录/home/

passwd 指定密码

passwd 用户名;给用户指定密码。

userdel 删除用户

userdel 【选项】 用户名;

userdel -r 用户名 ;删除用户时同时删除家目录(一般不做此操作)。

usermod 修改用户所属用户组

usermod -g 用户组 用户名;

id 查看用户信息

id 用户名;.

id -un;显示自身用户名称

su 切换用户

su - 用户名;

从权限高的用户切换到权限低的用户不需要输入密码,反之则需要。

su -xx -c 切到之前的用户

exit 回退到原用户

exit;

groupadd 创建用户组

groupadd 组名;

groupdel 删除用户组

groupdel 组名;

文件操作

文件权限

当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组。

Linux 文件名命名:避免以下字符开头:- + .(文件名的开头为小数点.时, 代表这个文件为隐藏档);避免含有以下一些特殊字符:* ? > < ; & ! [ ] | ’ " ` ( ) { }

缩写权限数字作用在文件上作用在目录上
rsuid权限(set UID)4read读权限;read读权限;
wsgid权限(set GID)2write写权限;但是不能删除文件,如果需要删除文件,则该文件有读权限write写权限;增删改目录
xsbit权限(Sticky Bit)1execute可执行权限;文件可以被执行execute可执行权限;可以进入该目录
文件类型含义
d文件夹
-文件
l软连接(快捷方式)
c字符设备(鼠标键盘)
b块文件(硬盘)

0123456789

0文件类型

123所有者(用户)拥有的权限

456所在组(同用户组的用户)拥有的权限

789其他组(其他用户组的用户)拥有的权限

例如:-rwxr-xr–

表示是普通文件,所有者权限为读写与操作权限,用户权限为读与操作权限,其他组用户权限为读权限。

chmod 更改文件权限

方式一:chmod 【选项】 文件;

选项含义
u所有者
g所有组
o其他人
a所有人(u,g,o总和)
=权限等于
+权限加上
-权限减去

例如:给abc.txt文件的所有者读写执行权限,所在组增加读执行权限,其他组减去读执行权限。

chmod u=rwx,g+rx,o-rw abc.txt;

方式二:chmod 【权限数字】 文件;

chgrp 更改文件所属组

chgrp [-R] 用户组 filename;

chown 更改文件所属者

chown [-R] 用户 文件或目录

chown [-R] 用户:组名 文件或目录

chattr 更改文件底层权限

mkdir 创建目录

mkdir [-p] dirName

-p 确保父目录存在,不存在的就建一个。

touch 创建一个空文件

创建一个空文件或更改文件生成的时间

touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]

a 改变档案的读取时间记录。
m 改变档案的修改时间记录。
c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
f 不使用,是为了与其他 unix 系统的相容性而保留。
r 使用参考档的时间记录,与 --file 的效果一样。
d 设定时间与日期,可以使用各种不同的格式。
t 设定档案的时间记录,格式与 date 指令相同。
–no-create 不会建立新档案。
–help 列出指令格式。
–version 列出版本讯息。

tee 将输入流输出成文件

xarge 从文件或者输入流读取数据

ln 创建链接文件

ln -s 存放链接目录 链接文件;

ln -s -f /usr/local/bin/make /usr/bin/make

cp 复制文件

cp 【选项】src文件 dest文件;

选项用途
-r递归复制整个文件夹
-p保留源文件属性

如果想全部替换掉文件夹中的文件,可用cp进行不提示的强制覆盖。

scp 复制文件

从 本地Linux 复制到 远端Linux

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root

从 远端 复制到 本地
scp -r root@172.19.2.75:/home/root/full.tar.gz1 /home/daisy/full.tar.gz

sz 从Linux复制文件到windows

rz 从windows复制文件到Linux

mv 文件、目录移动或更名

mv 【选项】;

mv old文件名 new文件名;重命名。

mv move文件 target文件;移动文件。

rmdir 删除空目录

rmdir 目录;

rm 删除文件或目录

rm 【选项】 名称;删除一个文件或目录

-r 删除目录

-f 不提示直接删除

-v 显示删除进度

split 文件分割

split -5 a.txt//将a.txt每5行分割为一个文件

cd 切换目录

cd ~ 跳到 home 家目录 cd …/ 跳到 上一层 目录

ls 显示目录列表

ls 【选项】

ls -l /home | grep "^-" | wc -l#统计/home 文件夹下文件的个数

ls -l /home | grep "^d" | wc -l#统计/home 文件夹下目录的个数

ls -lR /home | grep "^-" | wc -l#统计/home 文件夹下文件的个数,包括子文件夹里的

ls -lR /home | grep "^d" | wc -l#统计文件夹下目录的个数,包括子文件夹里的

ls -ltr /home #按时间排序查看目录中的文件
选项含义
-a显示所有,包括隐藏的
-l列表格式显示
-h显示文件大小
-t
-r

lsattr 查看文件底层权限

pwd 显示当前工作目录路径

find 查找文件路径

find 【搜索范围】【选项】文件名称
选项含义
-name文件名
-user用户名称
-size +5M按照大小寻找。+20M大于20兆;-20M小于20兆;20M等于20兆。
-size +5M -a -size -15M按照大小寻找。大于5兆并且小于15兆
-size +5M -o -size -15M按照大小寻找。大于5兆或者小于15兆
-type -f 文件类型文件
-type -d 目录类型目录
-type -l 链接类型链接
-group属组
-amin +55分钟内被访问过的文件或目录
-cmin +55分钟内被修改过属性的文件或目录
-mmin +55分钟内被修改过内容的文件或目录

locate 快速查找文件路径

locate 【选项】文件名称

注:
1:使用locate前,必须先使用updatedb创建locate数据库。如:
updatedb
locate 文件名称
2:如果目标文件在tmp目录下,即使updatedb,也无法使用locate搜索出文件所在路径
3:find的升级
选项含义
-i忽略大小写
-c只显示个数
-r<正则表达式>使用正则表达式进行查找匹配

which 查找指令所在路径及别名

which 指令

whereis 查找指令所在路径及帮助文档

whereis  指令

grep 在文件中查找关键字

grep 【选项】查找关键字 查找文件或目录
#非压缩包
grep –i "被查找的字符串" 文件名 
grep –i "当前存在" 文件名 
#gz压缩包
zgrep –i "被查找的字符串" 文件名  
#zip压缩包
gzip -dc myfile.gz | grep 'Exception' | more
选项含义
-A n查找关键字出现的后n行
-B n查找关键字出现的前n行
-C n查找关键字出现的上下n行
-i忽略大小写
-n显示行号
-v搜索不含指定字符串的行。字符串是行开头的需要加上号,如#表示搜索不含#的行,即显示不是注释的内容
-r
-e

basename 获取文件名

basename 路径 【要截取的后缀】

basename /home/abc.sh
结果为:abc.sh

basename /home/abc.sh .sh
结果为:abc

dirname 获取目录名

dirname 路径

dirname /home/abc.sh
结果为:/home

纯文本文件操作命令

echo 显示环境变量

echo $PATH;显示环境变量

cat 只读形式显示

cat /proc/version;正在运行的内核版本

cat /etc/issue;发行版本信息

cat / proc / cpuinfo显示CPU信息的信息
cat / proc / interrupts显示中断
cat / proc / meminfo校验内存使用
cat / proc / swaps显示哪些交换被使用
cat / proc / version显示内核的版本
cat / proc / net / dev显示网络适配器及统计

cat / proc / mounts显示已加载的文件系统

-n 显示行号;

more 分页显示

Ctrl+F 向下翻页

Ctrl+B 向上翻页

less 分页显示

more的强化版,不会全部加载出来,只会一页页加载,对于大文件查看效率更高。

head 显示文件开头

head -n 5;显示开头的5行

tail 显示文件尾部

tail -f 文件名;实时显示文本信息。
tail -n 5 文件名;查看文件的最后5行。

在这里插入图片描述

查看反制log打印
tail -f /home/log/depoly.log
查看反制rules打印
tail -f /isec/rules/反制文件
查看板卡绑定情况
tail -f /icare/dpdk/tools/dpdk_nic_bind.py
查看控制台打印
tail -f /home/log/catalina.outsuperman

diff 比较两个文件的差异

vi/vim 文本编辑器

vi/vim [参数] 文件名
    -b 打开二进制文件
    -d A B 比较A文件与B文件的差异性
    -R 只读模式打开文件
    +number 
    
    
实例:
vim /etc/sysconfig/network-scripts/ifcfg-eth0 --网卡配置文件  配置ip  DNS地址

vim是vi的加强版,非系统自带需要安装。安装步骤如下:

yum -y install vim*

输入模式:i

命令行模式:ESC

命令行含义
:w保存
:q离开
:q!强制离开不保存
:wq保存离开
ctrl+ b u d f显示内容滚动 半/一 屏
yy向下拷贝行。5yy向下拷贝5行
p粘贴
dd向下删除行。5dd向下删除5行
/字符向下寻找字符。n 重复前一个搜寻的动作;N 反向进行前一个搜寻动作
?字符向上寻找字符。n 重复前一个搜寻的动作;N 反向进行前一个搜寻动作
:行跳到指定行
????跳到最后一行
n,m s/oldString/newString在n到m行中将oldString替换成newString
:set fileencoding查看编码
:set fileencoding=编码格式改变编码格式
:set number显示行号
:set nonumber隐藏行号
### wc -c +filename

> 统计文件中单词的个数。

### tac  反向显示文本文件内容


### vimdiff 文本比较和合并 

### nl 添加行号显示文本文件内容

 nl [-bnw] 文件
选项与参数: -b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行不要列出行号(默认值); -n :列出行号表示的方法,主要有三种:
-n ln :行号在屏幕的最左方显示;
-n rn :行号在自己字段的最右方显示,且不加 0 ; -n rz :行号在自己字段的最右方显示,且加 0 ; -w :行号字段的占用的字符数。

### diff 显示两个文本文件的差异



### file 文件类型与编码格式  

### iconv 文本转换编码格式

## 非纯文本文件查看

### od

od [-t TYPE] 文件
选项或参数: -t :后面可以接各种『类型 (TYPE)』的输出,例如:
a :利用默认的字符来输出;
c :使用 ASCII 字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用 size bytes ;
f[size] :利用浮点数(floating)来输出数据,每个数占用 size bytes ;
o[size] :利用八进制(octal)来输出数据,每个整数占用 size bytes ;
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用 size bytes ;

### source

source FileName

作用:在当前bash环境下读取并执行FileName中的命令。

注:该命令通常用命令".”来替代。

使用范例:

1、source filename

2、. filename(中间有空格) 

dos2unix windows文件转Linux文件

Linux 换行符 /n

windows 换行符 /r/n

unixtodos Linux文件转windows文件

sed 流编辑器

awk 切

解压缩

gzip 生成gz压缩包

gzip 文件;

压缩后的文件将不存在,只存在gz压缩包。

gunzip 解压gz包

gunzip 文件;

解压后的gz压缩包将不存在,只存在文件。

zip 生成压缩包

zip 【选择项】压缩包命名 文件;

-r 压缩整个目录

unzip 解压包

unzip 【选择项】解压后存放目录 压缩包文件;

-d 解压后存放的目录

tar 解压缩tar.gz包

tar 【选项】 操作后文件 操作前文件

打包:tar -zcvf 打包后tar.gz包名称 文件1 文件2 文件n;

解压:tar -zxvf tar.gz包名称 -C 解压后文件 ;(目录必须存在,否则将报错)

选项含义
-c创建tar包
-x解开tar包
-t查看 tar包 里的文件
特别注意,c/x/t 仅能存在一个!
-z打包的同时压缩
-j是否需要用 bzip2 压缩/解压缩
-v显示打包的过程
-f指定压缩后tar包名
-p保留原文件的原始属性
-P打包文件时使用绝对路径

jar 包

jar -xvf 文件名 -d 指定解压到的目录 解压

jar -xvf 文件名 -C 存放目录 打包

##### bzip2 bz2包

##### bunzip2

##### bzcat

##### bzcmp

bzdiff

bzgrep



#### Z包

##### compress

##### uncompress

##### znew

将Z包重新压缩为gz包

#### zip包

##### zip

##### unzip

##### zipinfo

##### zipsplit

arj包

arj

unarj


#### war包

系统命令

init 切换到指定运行级别

系统运行级别

级别用途
0关机
1单用户(找回丢失密码)
2多用户无网络标识
3多用户有网络标识
4保留
5图形界面
6重启

修改运行级别:

方式一:修改/etc/inittab 运行级别的配置文件。找到id:xxx initdefault的一行,修改xxx为对应的运行级别。

方式二:init 【012356】;

问题:如果忘记root登录密码,如何找回。

答案:进入单用户模式,然后修改root密码。

原因:因为单用户模式下,root不需要密码就可以登录。只能在系统机器上进行操作,无法shell远程连接。

在这里插入图片描述

问题:设置Linux系统开机后默认的模式(命令行或图形界面)。

答案:修改/etc/inittab文件中id:5:initdefault的数字。

问题:Linux系统开机流程

答案:开机->BIOS->/boot->init进程1->运行级别->运行级别对于的服务。

sync 将内存中的数据写入磁盘

reboot 重启

备注:重启前首先运行sync将内存中的数据写入磁盘

shutdown 关机

shutdown -h now 立即关机

shutdown -h 10 10分钟后关闭系统

shutdown -r now 重启系统

备注:关机前首先运行sync将内存中的数据写入磁盘

etc 重启服务

/etc/init.d/xxx restart/start/stop;重启/启动/暂停 xxx服务

ls -l /etc/init.d/; 查看系统服务

setup 查看系统服务

安装setuptool
yum -y install setuptool

系统服务管理
yum -y install ntsysv

setup中配套的防火墙设置也得装上去
yum -y install system-config-securitylevel-tui

安装setup中配套的网络设置
yum -y install system-config-network-tui

最后安装一下时区同步。
yum -y install system-config-date

service 对系统服务进行管理

service 【服务的名称】 【控制命令】
service mysqld restart;mysql重启

service iptables status;查看防火墙状态

控制命令:启动(start)、停止(stop)、重启(restart)、查看状态(status)

service 操作某个服务的状态会立马生效,但是系统重启后,会回退到默认状态。

chkconfig 管理不同运行级别下的服务

chkconfig 【选项】

chkconfig --list;显示服务的不同运行级别下自启动选项
chkconfig --level 5 iptables off;将防火墙在运行级别为5的时关闭
chkconfig iptables on;将防火墙在所有级别时开启
选项含义
–list 【服务名称】显示服务的不同运行级别下自启动选项
–add 【服务名称】添加一个系统服务
–del 【服务名称】删除一个系统服务
–level 【运行级别】 【服务名称】 【启动选项】设置服务的不同运行级别下自启动选项
启动选项:on,off,reset

systemctl 对系统服务进行管理

在CentOS7后,不在使用service,而是使用systemctl。

crontab 定时任务

crontab 【选项】

选项含义
-e修改 crontab 文件,当不存在时会自动创建
–l显示 crontab 文件
-r删除 crontab 文件
-i提示

service crontab restart 重启任务调度器

如果显示crond: unrecognized service则yum -y install vixie-cron

clear 清屏

logout 退出登录

last 显示登录的用户列表

last 
#用户名   登录终端			登录IP		       登录时间
root     pts/0        192.168.1.2      Thu May 28 12:53   still logged in   
root     pts/0        192.168.1.2      Thu May 28 11:43 - 12:52  (01:09)    
root     pts/0        192.168.1.2      Thu May 28 07:31 - 11:43  (04:11)    
root     pts/5        192.168.1.2      Thu May 28 03:59 - 03:59  (00:00)    
root     pts/4        192.168.1.2      Thu May 28 03:58 - 07:30  (03:31)    
root     pts/3        192.168.1.2      Wed May 27 07:57 - 07:30  (23:32)    
root     pts/3        192.168.1.2      Wed May 27 07:30 - 07:57  (00:26)    
root     pts/2        192.168.1.2      Wed May 27 06:51 - 07:30 (1+00:38)   
root     pts/1        192.168.1.2      Wed May 27 06:17 - 07:30 (1+01:13)   
root     pts/0        192.168.1.2      Wed May 27 06:08 - 07:30 (1+01:22)   
root     tty1                          Wed May 27 05:52   still logged in   
reboot   system boot  2.6.32-431.el6.x Wed May 27 05:52 - 13:52 (1+08:00)   
root     tty1                          Wed May 27 05:34 - down   (00:18)    
reboot   system boot  2.6.32-431.el6.x Wed May 27 05:33 - 05:52  (00:18)

#注:通过查看用户登录信息,可以及早的发现系统非正常登录信息,如reboot非正常重启等,以加强系统安全性

lastlog 显示最后一次登录的用户列表

### getconf 系统的配置信息 



### uptime 系统运行时间,用户数,平均负载

### 查看系统用户及密码

在linux系统中,用户名被存放在了/etc/passwd这个文件中;密码存放在/etc/shadow中

cat  /etc/passwd 查看系统中的所有用户名

cat /etc/shadow | grep 用户 查看用户密码

### **authconfig** 算法

authconfig --test | grep hashing 查看系统使用了什么加密方式

source 执行脚本

source FileName

作用:在当前bash环境下读取并执行FileName中的命令。

注:该命令通常用命令".”来替代。

使用范例:

1、source filename

2、. filename(中间有空格)

sh 执行脚本

. 执行脚本

进程命令

| 管道

进程间单向通信的机制

ps 查看进程

ps 【选项】;

ps -aux;显示系统所有进程
输出格式:
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19232  1496 ?        Ss   04:33   0:01 /sbin/init

ps -ef;以全格式显示所有进程,包括父进程。
输出格式:
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 04:33 ?        00:00:01 /sbin/init

ps -aux|grep xxx;查询xxx的进程信息
输出格式含义
USER用户名
PID进程ID
PPID父进程ID。0代表无父进程
CCPU执行优先级。
数值越大,表示进程是CPU密集型计算,执行优先级会降低。
数值越小,表示进程是IO密集型计算,执行优先级会提高。
STIME启动时间
CMD启动进程时使用的命令和参数
%CPU占用CPU
%MEM占用内存
VSZ占用虚拟内存大小KB
RSS占用物理内存大小KB
TTY使用终端名称
STAT进程状态(D 不可中断。R 运行。S 睡眠。s会话的先导进程。T 停止。Z 僵死)
START启动时间
TIME占用CPU总时间(执行的时间)
COMMAND启动进程时使用的命令和参数
选项含义
a当前终端的所有进程
u显示所有用户的所有进程
x显示没有终端的进程
r仅显示正在运行的进程
e显示所有进程
f

pstree 显示进程树

pstree
#输出格式示例:
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─6*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd─┬─sshd───bash
     │      └─sshd───bash───pstree
     └─udevd───2*[udevd]
选项含义
p显示进程ID
u显示进程所属用户
n
#根据进程号获取所有子进程的PID
pstree -pn <pid>

jobs 显示任务列表

nohup 不挂断进程

将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端

watch 显示命令周期性执行的信息

lsof 列出当前系统打开的文件描述符工具

查询感兴趣的描述符是被哪些进程使用

参数描述
-i显示sokcet文件描述符
-c显示指定的命令打开的所有文件描述符
-t仅显示打开了目标文件描述符的进程pid
#列出所有的网络链接
lsof -i

#列出所有udp的网络链接
lsof -i udp

#列出谁在使用某个端口。端口的使用线程信息
lsof -i:3306

#列出谁在使用特定的tcp端口
lsof -i tcp:80

#根据文件描述范围列出文件信息
lsof -d 2-3

kill 通过进程ID终止进程

kill 【选项】进程ID;通过进程ID终止进程
选项含义
l显示系统支持的信号
a当处理当前进程时,不限制命令名和进程号的对应关系
s指定向进程发送的信号
p指定kill 命令只打印相关进程的进程号,而不发送任何信号
u指定用户
9强制终止
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + )
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)

killall 通过进程名称终止进程

kill 【选项】进程名称;通过进程名称终止进程

选项含义
l
a
s
p
u

top 动态监控(显示)进程

top 【选项】;

显示格式:
top - 16:48:45 up 8 min,  2 users,  load average: 0.00, 0.01, 0.00
top - 当前时间 up 运行时间,  当前系统登录用户数 users,  负载均衡: a, b, c
平均负载=(a+b+c)/3,如果大于0.7则系统有点跑不动了

Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Tasks:  总任务数 total,允许任务数 running,睡眠任务数 sleeping,停止任务数 stopped,僵死进程数 zombie

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s):  用户占比us,系统占比sy,  0.0%ni,空闲占比id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:   1004412k total,   158860k used,   845552k free,    22572k buffers
Mem:   总内存 total,   使用内存 used,   可用内存 free,    22572k buffers

Swap:  2031608k total,        0k used,  2031608k free,    38324k cached
Swap:  总虚拟内存 total,        0k used,  可用虚拟内存 free,    38324k cached
选项含义
-d指定每隔几秒刷新屏幕。默认3秒刷新一次,可用空格键立即刷新。
-i不显示任何闲置或者僵死的进程
-p指定进程ID来监控此进程的状态
交互参数含义
U输入用户名,筛选出该用户下所有的进程。
K输入进程ID,终止进程。
P按CPU占有率大小排序
M按内存大小排序
N按进程ID大小排序

网络管理

netstat 查询网络状态

netstat 【选项】;

#查询本机所有网络接口
netstat -an
#输出
#协议  接受数据包队列 发送数据包队列 本地地址 远程地址 状态 线程ID 名称
Proto Recv-Q Send-Q Local Address  Foreign Address  State   PID/Program name         
tcp    0     64     192.168.1.25:22 192.168.1.2:50359 ESTABLISHED 1183/sshd  

#列出本机路由
netstat -rn

#列出所有连接
netstat -a

#只列出TCP或者UDP
netstat -at
netstat -au

#列出监听中的连接端口
netstat -tnl

#获取进程名、进程号以及用户 ID
nestat  -nlpt

#打印统计信息
netstat -s

#持续输出
netstat -ct

#打印active状态的连接
netstat -atnp | grep ESTA

#查看服务是否运行(npt)
netstat -aple | grep ntp
选项含义
-a查看所有端口
-t仅显示TCP连接
-u仅显示UDP连接
-l查看监听端口
-n使用IP地址表示主机
-p显示socket所属的进程的PID和名字
-i显示网卡接口数据流量
-r显示路由信息。路由表是Linux主机与外界通信所必须的,如果路由表错误,将导致Linux主机无法与外界进行通信。
-c每隔1s输出一次
-o显示socket定时器的信息

nslookup 手动解析域名

nslookup 域名;查询域名对应的IP地址。

Non-authoritative answer代表非此域名服务器给出的域名解析信息。

nslookup 进入交互式查询。

server	指定解析域名的服务器地址。

set 关键字=值	设置查询域名的属性值。 type=MX域名的邮件转发器。type=PRT查询IP地址所代表的域名

arp 操纵本机的arp缓冲区

ipconfig Windows查询网卡接口

ipconfig 【选项】

选项含义
/all所有信息。包括掩码,DNS服务器等。

ifconfig Linux查看与配置网卡

#查看网卡信息
ifconfig 
#输出
#eth0,eth1,eth.. 本地真实网卡
eth0      Link encap:Ethernet  HWaddr 00:0C:29:EA:32:2C  
		  #网络类型:以太网 MAC地址
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
		  #ip地址 广播地址 子网掩码
          inet6 addr: fe80::20c:29ff:feea:322c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:362772 errors:0 dropped:0 overruns:0 frame:0
		  #接受包数量 出错数量 丢失数量
          TX packets:195415 errors:0 dropped:0 overruns:0 carrier:0
		  #发送包数量 出错数量 丢失数量
          collisions:0 txqueuelen:1000 
          RX bytes:444841815 (424.2 MiB)  TX bytes:28566316 (27.2 MiB)
#lo 主机的回环地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1688 (1.6 KiB)  TX bytes:1688 (1.6 KiB)

#配置网卡
ifconfig 【网络接口】【ip地址】【配置选项】
#配置网络接口eth0的ip地址为192.168.1.111,并指定广播地址与子网掩码,注意:此时能够成功ping此IP,但是不能ping域名,还需要route配置路由。
ifconfig eth0 192.168.1.111 broadcast 192.168.0.255 netmask 255.255.255.0
#激活网卡
ifconfig eth0 192.168.1.111 up


#注:如果把电脑看成一台手机,那网卡就是SIM卡,IP就是电话号码
配置选项含义
up激活网卡
down关闭网卡
mtu设置网卡的最大传输单元
dstaddr设置点对点连接的远程IP
broadcast设置网卡的广播地址
netmask设置网卡的子网掩码
add给指定网卡配置IPv6地址
del删除指定网卡的IPv6地址
irq指定网卡的中端号
io_addr设置IO地址
media设置物理端口或媒体类型
hw设置网卡的MAC物理地址
multicast设置网卡的多播标志

route 路由


选项含义

traceroute 报文到主机所经过的路由

traceroute 【选项】【IP或主机名】

#注:默认使用ICMP报文进行路由追踪,默认报文大小40字节,最多经过30个路由器,对每个路由节点都测试3次,返回这3次的时间值来表示到达改路由节点的速度,如果测试超时,则用*代替。
选项含义

nmap

nmap <扫描类型><扫描参数>

想查看TCP或者UDP端口使用情况,使用 netstat -anp
如果有些进程看不见,如只显示”-”,可以尝试
sudo netstat -anp
如果想看某个端口的信息,使用lsof命令,如:
sudo lsof -i :631

-bash-3.00# netstat -tln

 netstat -tln 命令是用来查看linux的端口使用情况

/etc/init.d/vsftp start 是用来启动ftp端口~!

看文件/etc/services

netstat

查看已经连接的服务端口(ESTABLISHED)

netstat -a

查看所有的服务端口(LISTEN,ESTABLISHED)

sudo netstat -ap

查看所有 的服务端口并显示对应的服务程序名

nmap <扫描类型><扫描参数>

例如:

nmap localhost

nmap -p 1024-65535 localhost

nmap -PT 192.168.1.127-245

 当我们使用 netstat -apn 查看网络连接的时候,会发现很多类似下面的内容:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 52 218.104.81.152:7710 211.100.39.250:29488 ESTABLISHED 6111/1

 显示这台服务器开放了7710端口,那么 这个端口属于哪个程序呢?我们可以使用 lsof -i :7710 命令来查询:

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

sshd 1990 root 3u IPv4 4836 TCP *:7710 (LISTEN)

 这样,我们就知道了7710端口是属于sshd程序的。

ping 测试主机网络连通性

ping 【选项】域名或IP地址

#向192.168.2.111发送4个ICMP包
ping -c 4 192.168.2.111	
#输出:
4 packets transmitted, 4 received, 0% packet loss, time 3026ms
#4 发出的数据包数目, 4 返回的数据包数目, 0% 丢包率, 耗时 3026ms
rtt min/avg/max/mdev = 0.403/3.012/10.699/4.438 ms
#rtt往返时延

#以最快的速度,最大的包进行ping,可用于测试目标主机的承压能力
ping -f -s 65507 10.0.0.52
#此用法非常危险,65535(包头+内容)*100个包每秒=6.25MB,每秒发送6.25MB的数据,相当于50Mbps的带宽,完全可能导致目标主机拒绝服务。请勿用于非法用途,造成不良后果自负。

注:如ping不通,可能对方不在线,或者对方开着防火墙!
选项含义
-c n指定ICMP报文发送次数为n,如果不指定此参数,将会一直发送包。
-s count指定ICMP数据包大小为count。windows最大值为65500,linux最大值为65507。
-n count发送 count 指定的 ECHO 数据包数。默认值为 4。(一般用来计算丢包率)
-l length发送 length 大小的 ECHO 数据包。默认为 32 字节;最大值是65500。
-f源IP没有收到应答报文或超时时间还未到时,就立即发送下一个请求报文
-i ttl请求报文发送间隔时间。ttl 生存时间
-R显示报文经过的路由器信息
-t一直Ping 直到中止操作(测试网络稳定性)
-a将地址解析为计算机名
-v tostos服务类型
-r count在"记录路由"字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。
-j computer-listcomputer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机可以被中间网关分隔(路由稀疏源)IP 允许的最大数量为 9。
-k computer-listcomputer-list 利用 computer-list 指定的计算机列表路由数据包。连续计算机不能被中间网关分隔(路由严格源)IP 允许的最大数量为 9。
-w timeout指定超时间隔,单位为毫秒。
destination-list指定要 ping 的远程计算机。

telnet 远程登录

telnet IP;远程登录。

telnet IP port号;检测某个端口是否在监听且可以访问。

tcpping

route 显示系统路由表

iptables 防火墙

-L 显示包过滤防火墙的规则设置

nmcli 网卡的查看与配置

nmcli[ OPTIONS ] OBJECT { COMMAND | help }
查看网卡UUID
nmcli con show
查看网卡mac地址
nmcli dev show

nc 监听端口

nc -lk 端口:监听端口

nc–>“瑞士军刀”。不知大家在渗透过程中,拿了shell有没有使用nc搞点事儿。它用来快速构建网络链接。常用来调试客户端程序。

参数描述
-i设置数据包传送的时间间隔
-l以服务器方式运行。默认为客户端运行
-k重复接受并处理某个端口上的所有链接
-p以客户端运行时强制其使用指定端口
-C将CR和LF两个字符作为结束符
-u使用udp协议。默认tcp协议
-Xnc客户端余代理服务器通信时默认为socks5协议。
-z扫描目标机器某个范围服务是否开启

小贱上案例

执行任务执行命令
扫描机器A端口号在30-40的服务nc -z A 30-40
连接服务器A 端口号为5000nc -C A 5000
传送文件MachineA:nc -v -n ip portE:a.exe

资源命令

vmstat

vmstat能够实时输出系统的进程信息,内存使用,cpu使用等资源的使用情况

参数描述
-f显示系统自启动以来执行的fork次数
-s显示内存相关统计信息
-d显示磁盘相关统计信息
-p显示指定磁盘分区统计信息
count采样次数。

看一下vmstat都有哪些输出字段。

在这里插入图片描述在这里插入图片描述

字段名描述
procsr表示等待运行的而进程数目。b表示处于不可中断睡眠状态的进程数目
memoryswpd:使用的虚拟内存量。free:空闲内存量。buff:用作缓冲区的内存量。cache:用作缓存的内存量。
swapsi:从磁盘换入的内存量(/s)。so:交换到磁盘的内存量(/s)。
iobi:从块设备接收的块(blocks/s)。bo:发送到块设备的块(blocks/s)。
systemin:每秒中断的次数,包括时钟。cs:每秒上下文切换的次数。

这里注意哈,如果查看磁盘的更加详细信息,有另外iostat所得到的信心就更加详细哟

mpstat

能够实时监测多处理器系统中各个cpu的使用情况。这个命令的执行需要安装sysstat,在centos中执行yum install systat就好了。

在这里插入图片描述在这里插入图片描述

然后我们看看各个字段什么意思。

字段描述
cpu表示当前条信息属于哪个cpu的数据
%usr进程运行在用户空间所占cpu运行时间的比例
%nicenice值为负的进程运行在用户空间的时间占cpu总运行时间的比例
%iowaitcpu等待磁盘操作的时间占cpu总运行时间的比例
%irqcpu用于处理硬件中断时间占cpu总运行时间的比例
%softcpu用于处理软件中断的时间占cpu用运行时间的比例
%steal一对虚拟cpu。当超级管理员在处理某个虚拟cpu时,另一个等待它处理完才能运行。这段等待时间表示为steal时间占总运行时间的比例
%guest运行虚拟cpu时间占cpu总运行时间的比例
%idle系统空闲时间占cpu总运行时间的比例

free 内存使用情况


选项含义

df 磁盘空间及使用情况

df 【选项】
选项含义
-h查看磁盘空间及使用情况

du 目录的磁盘使用情况

du 【选项】

du -ach --max-depth=1 /opt #查询/opt目录磁盘占用情况,深度为1

du -h --max-depth=1 |grep 'G' |sort   #查看上G目录并排序

du -sh --max-depth=1  #查看当前目录下所有一级子目录文件夹大小

du -h --max-depth=1 |sort    #查看当前目录下所有一级子目录文件夹大小 并排序
选项含义
-h目录的查看磁盘空间及使用情况
-s指定目录
-a含文件
–max-depth子目录深度
-c列出明细的同时,增加汇总值

分区命令

分区方式主分区最大支持容量
mbr四个
系统只能安装在主分区,扩展分区要占一个主分区。
2TB,但拥有最好的兼容性。
gtp无限个18EB(18 * 1024 * 1024 TB)

Windows的磁盘分区:

在这里插入图片描述

Linux的磁盘分区:

第一:Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux 中每个分区都是用来组成整个文件系统的一部分。
第二:Linux 采用了一种叫载入(挂载)的处理方法,它的整个文件系统中包含了一整套的文件和目录, 且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。

磁盘----------(mount挂载)------------->Linux文件系统

Linux文件系统----------(umount卸载)------------->磁盘

Linux磁盘物理结构驱动标识符
IDE硬盘并口针式hdx~
x代表盘号。a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘
~代表分区。主分区[1,4];逻辑分区[5,+)
SCSI硬盘串口sdx~
x代表盘号。a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘
~代表分区。主分区[1,4];逻辑分区[5,+)

lsblk 查看分区挂载

lsblk 【选项】

lsblk -f;#查看所有分区挂载
#输出:
sda     
├─sda1 ext4 54410f88-22dd-479e-a806-f0391648e604  /boot
└─sda2 swap dBaTHb-D8Ie-f4rc-uWfX-EsLY-Cou1-tzYJ3S [SWAP]
└─sda3 ext4 5ea5220f-4cb5-48bc-8031-f9310b2f0444   /
#解读: 
sd代表Linux磁盘是SCSI硬盘
a代表基本盘
sda1,sda2,sda3代表3个分区
ext4,swap代表分区类型
/boot,/,[SWAP]代表挂载目录

fdisk 创建和维护分区


选项含义
内部指令含义
m内部指令帮助
n新增分区
d删除分区
w写入并退出
p分区类型为主分区
q不保存退出

mount 挂载文件

mount 【选项】 设备文件名 挂载点
#注:挂载点目录必须存在且为空
选项含义
-t 文件系统文件系统

umount 卸载文件

umount 【选项】 设备文件名
选项含义

mkfs 格式化

swapon 查看所有交换分区

swapon -s 查看所有交换分区

选项含义

硬盘分区挂载案例

案例:给Linux系统增加一块硬盘,并挂载到 /home/newdisk。步骤如下

1)虚拟机添加硬盘,并重启Linux系统。

2)分区	
fdisk /dev/sdb 
m获取帮助
n新增分区
p分区类型为主分区
w写入分区并退出

3)格式化
mkfs -t ext4 /dev/sdb1

4)临时挂载	
mkdir /home/newdisk 创建目录
mount /dev/sdb1 /home/newdisk 临时挂载

5)设置为永久挂载(当重启系统,仍然可以挂载到/home/newdisk)
编辑/etc/fstab,新增一行。
vim /etc/fstab 
/dev/sdb1	/home/newdisk	ext4	defaults	0 0

mount -a 自动挂载,修改立即生效

sudo

pv 物理卷

pv…用途
create创建
remove删除
display显示
scan激活
change改变

创建:pv–>vg–>lv

删除:lv–>vg–>pv

vg 卷组

lv 逻辑卷

软件安装

https://www.cnblogs.com/LiuChunfu/p/8052890.html

RPM 软件包管理器

RPM需要下载软件包后安装,并且无法解决软件包的依赖关系。

rpm 【选项】【软件包】

rpm -ivh 已经存在的rpm包;安装rpm包

rpm -e mysql;删除mysql安装包

rpm -q mysql;查询mysql包是否安装
rpm -qa | grep mysql;查询所安装的所有mysql安装包
rpm -qi mysql;查询mysql安装包信息
rpm -ql mysql;查询mysql包的安装文件及安装路径
rpm -qf 文件全路径;查询文件属于哪个安装包

选项含义
-i安装rpm软件包
-e卸载rpm软件包。
如果其他包依赖于将要删除的包,卸载时会报错,如果确定要强制删除,则加上–nodeps参数。
-U更新rpm软件包
-q查询rpm软件包
-a
-v提示
-h进度条

YUM 软件包管理器

能够从指定服务器上自动下载rpm包并安装(rpm需要下载后安装),可以自动处理依赖性关系,并且一次性安装所有依赖的软件包。

使用yum的前提是必须能连外网。

yum 【选项】【软件包】

yum list mysql;查看mysql安装包

yum install mysql;下载并安装mysql


选项含义
list查看所有的安装包
install下载并安装

wget 从指定URL下载文件

wget 【选项】【URL】
URL支持HTTP,HTTPS,FTP。
下载wget:yum -y install wget
选项含义
-P 目录指定下载保存的目录
-R 文件类型指定忽略下载的文件类型

make 软件源码编译

make 【-f】【指定编译目标】
-f 指定Makefile文件,通常情况下,Makefile都保存在软件的源码目录下
make指令本身不执行代码编译工作,它是根据Makefile文件调用gcc指令完成代码的编译工作
步骤
./configure 配置
make 编译
make install 安装

gcc


选项含义

centos升级gcc到4.8.1(支持c ++ 11)步骤

下载gcc最新版

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.1/gcc-4.8.1.tar.gz

然后解压到文件夹

tar -xvzf gcc-4.8.1.tar.gz

进入解压缩之后的目录

cd gcc-4.8.1

然后执行下面的运行

./contrib/download_prerequisites

再返回上一层,建立build_gcc_4.8.1目录,这个目录和gcc-4.8.1平行

cd ..
mkdir build_gcc_4.8.1

进入刚建立的目录,并执行编译过程

cd build_gcc_4.8.1
../gcc-4.8.1/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib  
make -j23
make install

OK,在build_gcc_4.8.1中将gcc已经安装完成

确定新安装的GCC的路径,在安装时记下最后mv时的路径即可,例如:重置安在了/usr/local/bin

ls /usr/local/bin | grep gcc

执行

/usr/sbin/update-alternatives --install  /usr/bin/gcc gcc /usr/local/bin/x86_64-unknown-linux-gnu-gcc-4.8.1 40

gcc --version      #查看版本

/usr/sbin/update-alternatives --install /usr/bin/g++ g++ /usr/local/bin/g++ 40

g++ --version     #查看版本

时间日期

date 显示修改时间

date;显示时间

date -s 时间;修改时间。

cal 日历

抓包及回放包

tcpdump数据包捕获

tcpdump [参数] [过滤]
参数含义
-a将网络地址和广播地址转变成名字
-A以ASCII格式打印出所有分组,并将链路层的头最小化。
-b在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
-c抓取指定数量的数据包
-C在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。
-d将匹配信息包的代码以人们能够理解的汇编格式给出。
-dd将匹配信息包的代码以C语言程序段的格式给出。
-ddd将匹配信息包的代码以十进制的形式给出。
-D打印出系统中所有可以用tcpdump截包的网络接口。
-e显示以太网帧头部信息
-E用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
-f将外部的Internet地址以数字的形式打印出来。
-F从指定的文件中读取表达式,忽略命令行中给出的表达式。
-i捕获特定网口数据包。如果为-i any表示抓取所有经过网卡数据包
-l使标准输出变为缓冲行形式,可以把数据导出到文件。
-L列出网络接口的已知数据链路。
-m从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
-M如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
-n使用IP地址表示主机。使用数字表示端口
-nn不进行端口名称的转换。
-N不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
-O不运行分组分组匹配(packet-matching)代码优化程序。
-P不将网络接口设置成混杂模式。
-q快速输出。只输出较少的协议信息。
-r读取包(这些包一般通过-w选项产生)。
-S将tcp的序列号以绝对值形式输出,而不是相对值。-S 0 抓到完整的数据包
-s设置抓包时的抓包长度。-s 0抓取数据包时默认抓取长度为68字节。
-T将监听到的包直接解释为指定的类型的报文,常见的类型有rpc和snmp
-t不打印时间戳
-tt在每一行中输出非格式化的时间戳。
-ttt输出本行和前面一行之间的时间差。
-tttt在每一行中输出由date处理的默认格式的时间戳。
-u输出未解码的NFS句柄。
-v输出诸如ip数据包中的TTL更加详细的信息
-vv输出详细的报文信息。
-x按照十六进制显示数据包内容
-X不仅仅输出-x结果还输出十六进制对应的ASCII字符
-w将输出结果定向到某个文件,一般为pcap后缀

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。Linux下抓包工具有Tcpdump。

我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的dst port ! 22 : 不抓取目标端口是22的数据包
src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24

协议过滤执行命令
tcpdump -i eth0
捕获特定个数(1000)的包tcpdump -c 1000 -i eth0
将捕获的包保存到文件tcpdump -w a.pcap -i eth0
读取pcap格式的包tcpdump -r a.pcap
增加捕获包的时间戳tcpdump -n -ttt -i eth0
指定捕获包的协议类型tcpdump -i eth0 arp
捕获指定端口tcpdump -i eth0 post 22
捕获特定目标ip+port的包tcpdump -i eth0 dst address and port 22
捕获DNS请求和响应tcpdump -i eth0 -s0 port 53
匹配Http请求头tcpdump -s 0 -v -n -l | egrep -i “POST /|GET /|Host:”

二:过滤

**协议过滤:**缺省值是监听所有协议的信息包。

  1. fddi
  2. ip
  3. arp
  4. rarp
  5. tcp
  6. udp

类型过滤:

  1. host(缺省类型): 指明一台主机,如host 210.27.48.2
  2. net: 指明一个网络地址,如net 202.0.0.0
  3. port: 指明端口号,如port 23

方向过滤:

  1. src src 210.27.48.2, IP包源地址是210.27.48.2
  2. dst dst net 202.0.0.0, 目标网络地址是202.0.0.0
  3. dst or src(缺省值)
  4. dst and src

逻辑运算:

  1. 非运算:not, !
  2. 与运算:and, &&
  3. 或运算:or, ||

其他过滤:gateway(网关), broadcast, less, greater

三:高级过滤

从包头过滤信息

proto[x:y]          : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
proto[x:y] & z = 0  : proto[x:y]和z的与操作为0
proto[x:y] & z !=0  : proto[x:y]和z的与操作不为0
proto[x:y] & z = z  : proto[x:y]和z的与操作为z
proto[x:y] = z      : proto[x:y]等于z

四:输出信息

A,数据链路层头信息
使用命令: #tcpdump --e host ice
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)

分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0>表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60是数据包的长度, h219.33357 > ice.telnet表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

B,ARP包的TCPDUMP输出信息

使用命令:#tcpdump arp

得到的输出结果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包,who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。0:90:27:58:af:1a是主机ICE的MAC地址。

C,TCP包的输出信息

用TCPDUMP捕获的TCP包的一般输出信息是:

src > dst: flags data-seqno ack window urgent options
src> dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R(RST) “.” (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号,window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

D,UDP包的输出信息

用TCPDUMP捕获的UDP包的一般输出信息是:

route.port1 > ice.port2: udp lenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth

  1. 辅助工具

(1) 想查看TCP或者UDP端口使用情况,使用 netstat -anp
如果有些进程看不见,如只显示”-”,可以尝试
sudo netstat -anp
如果想看某个端口的信息,使用lsof命令,如:
sudo lsof -i :631

-bash-3.00# netstat -tln

 netstat -tln 命令是用来查看linux的端口使用情况

/etc/init.d/vsftp start 是用来启动ftp端口~!

看文件/etc/services

netstat

查看已经连接的服务端口(ESTABLISHED)

netstat -a

查看所有的服务端口(LISTEN,ESTABLISHED)

sudo netstat -ap

查看所有 的服务端口并显示对应的服务程序名

nmap <扫描类型><扫描参数>

例如:

nmap localhost

nmap -p 1024-65535 localhost

nmap -PT 192.168.1.127-245

 当我们使用 netstat -apn 查看网络连接的时候,会发现很多类似下面的内容:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 52 218.104.81.152:7710 211.100.39.250:29488 ESTABLISHED 6111/1

 显示这台服务器开放了7710端口,那么 这个端口属于哪个程序呢?我们可以使用 lsof -i :7710 命令来查询:

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

sshd 1990 root 3u IPv4 4836 TCP *:7710 (LISTEN)

 这样,我们就知道了7710端口是属于sshd程序的。

(2) 运行tcpdump命令出现错误信息排除

tcpdump: no suitable device found
tcpdump: no devices found /dev/bpf4: A file or directory in the path name does not exist.
解决方案 2种原因:
1.权限不够,一般不经过处理,只用root用户能使用tcpdump
2.缺省只能同时使用4个tcpdump,如用完,则报此类错。需要停掉多余的tcpdump

(a) 截获网络中某台主机所有收到的和发出的所有的数据包:
# tcpdump host 192.168.13.209

(b) 截获主机192.168.13.210和主机172.22.64.39或192.168.13.209的通信:
# tcpdump host 192.168.13.210 and ( 172.22.64.39 or 192.168.13.209 )

(c) 截获主机192.168.13.210除了和主机172.22.64.39之外所有主机通信的数据包:
# tcpdump -n host 192.168.13.210 and ! 172.22.64.39

(d) 截获主机192.168.13.210发送的所有数据:
# tcpdump -i eth0 src host 192.168.13.210 (注意数据流向)

(e) 截获主机192.168.13.210接收的所有数据:
# tcpdump -i eth0 dst host 192.168.13.210

(f) 截获主机192.168.13.210所有在TCP 80端口的数据包:
# tcpdump -i eth0 host 192.168.13.210 and tcp port 80

(g) 截获HTTP主机192.168.13.210在80端口接收到的数据包:
# tcpdump -vvvnns 1500 -i eth0 host 192.168.13.210 and dst port 80 -w /tmp/tcpdump_80_recv

(h) 截获HTTP主机192.168.13.209在80端口响应主机192.168.13.210的数据包:
# tcpdump -vvvnns 1500 -i eth0 host 192.168.13.209 and 192.168.13.210 and src port 80 -w /tmp/tcpdump_80_sent

	A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:

	#tcpdump host 210.27.48.1

  B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中使用括号时,一定要添加'')

  #tcpdump host 210.27.48.1 and  (210.27.48.2 or 210.27.48.3 )

  C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

  #tcpdump tcp port 23 host 210.27.48.1

  E 对本机的udp 123 端口进行监视 123 为ntp的服务端口

		#tcpdump udp port 123

  F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据:

  #tcpdump -i eth0 src host hostname

  G 下面的命令可以监视所有送到主机hostname的数据包:

  #tcpdump -i eth0 dst host hostname

  H 我们还可以监视通过指定网关的数据包:

  #tcpdump -i eth0 gateway Gatewayname

  I 如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:

  #tcpdump -i eth0 host hostname and port 80

  J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:

  #tcpdump host 210.27.48.1 and  (210.27.48.2 or 210.27.48.3 )

  L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:

  #tcpdump ip host 210.27.48.1 and ! 210.27.48.2

  M 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:

  #tcpdump tcp port 23 host 210.27.48.1



tcpreplay回放包

Tcpreplay是一种pcap包的重放工具, 它可以将tcpdump和Ethereal/Wireshark等工具捕捉到的网络流量包进行编辑修改和重放. 重写Layer 2、3、4层数据包,并将流量重新发送至目标网络, 这样通过重放网络流量包从而实现复现问题情景以定位bug

tcpreplay本身包含了几个辅助工具(tcpprep、tcprewrite、tcpreplay和tcpbridge等等)

tcpreplay:以任意速度将pcap文件重播到网络上

tcprewrite:编辑pcap文件并创建一个新的pcap文件

tcpreplay-edit:编辑pcap文件并重放到网络上

tcpprep:创建tcpreplay / tcprewrite使用的客户端/服务器定义缓存文件

tcpbridge:使用tcprewrite的功能桥接两个网段

tcpliveplay:以服务器识别的方式重放TCP pcap文件

tcpcapinfo:raw pcap文件解码器和调试器

tcpprep - 简单的说就是划分哪些包是client的, 哪些是server的, 一会发包的时候client的包从一个网卡发, server的包可能从另一个网卡发。即区分pcap数据包的流向,即区分出客户端和服务器。
tcprewrite - 简单的说就是修改2层, 3层, 4层报文头部。即改写pcap数据包的2-4层的头部信息,即MAC地址、IP地址和PORT等。
tcpreplay - 真正发包, 可以选择主、从网卡, 发包速度等。即回放pcap文件中的数据包。
tcpreplay-edit-更写pcap数据并回放,将tcprewrite和tcpreplat一条命令实现。
tcpbridge - bridge two network segments with the power of tcprewrite。

软件安装

Libpcap安装(在安装tcpreplay之前安装,否则./configure的时候你会得到提示说libpcap库没有安装)

1、 下载

http://www.tcpdump.org

2、 解压

tar zxvf libpcap-1.3.0.tar.gz

3、 配置

cd libpcap-1.3.0

./configure

4、编译

make

make install

tcpreplay安装

1、 下载

http://tcpreplay.synfin.net/trac/wiki/Download

2、 解压

tar zxvf tcpreplay-3.4.4.tar.gz

3、 配置

cd tcpreplay-3.4.4

./autogen.sh

./configure

4、编译

make

make test

make install

使用

a. 将回放的包,放入系统(192.168.2.251)中,建一个tcpreplay的文夹,存放所有的与此相关的文件;使用端口eth1回放流量:tcpreplay -i eth1 sip.pcap

b. 可以用工具:Wireshark打开加放的包。查看包的个数,及分类;

c. 当包回放完毕后,可以通过流量监控系统中的:流记录查看,查看到回放的包数;然后与Wiresharkk 中查看到的,做一个对比;

d. tcpreplay –h 命令进行查看,附录部分也给出了部分常用的,可以参考。

e. tcpreplay发包:-l参数是说循环多少次,注意这个次数是对一个trace而言的,-p参数是说每秒发多少个包,-i是说从那个网卡发

tcpreplay -l 5 -p 10 -i eth0 testout.pcap

每秒发送10个,循环5次,假设源trace有50个数据包,那么整个发完应该是一共发送了250个数据包,大概25秒发完

参数

1)以不同的速度回放
1)以尽可能大的速度回放
tcpreplay --topspeed --intf1=eth0 sample.pcap
2)以10Mbps速率回放
tcpreplay --mbps=10.0 --intf1=eth0 sample.pcap
3)以原速度的7.3倍速率回放
tcpreplay --multiplier=7.3 --intf1=eth0 sample.pcap
4)以原速度的0.5倍速率回放
tcpreplay --multiplier=0.5 --intf1=eth0 sample.pcap
5)以每秒回放25个包的速率回放
tcpreplay --pps=25 --intf1=eth0 sample.pcap
6)以一次一个包的速率发送数据包(debug时很有用)
tcpreplay --oneatatime --verbose --intf1=eth0 sample.pcap
2)循环播放数据包
1)重放10次
tcpreplay --loop10 --intf1=eth0 sample.pcap
简写:tcpreplay -l 10 -i eth0 sample.pcap
2)无限循环重放,直到Ctrl+C结束
tcpreplay --loop=0 --intf1=eth0 sample.pcap
简写:tcpreplay -l 0 -i eth0 sample.pcap
3)两个网口之间重放数据包
1)可以利用tcpprep将数据包通信双方区分为客户端和服务器端,这样在eth0和eth1之间通信就相当于是客户端和服务器。
tcpreplay --cachefile=sample.prep --intf1=eth0 --intf2=eth1 sample.pcap
说明:cachefile为由tcpprep生成,会在下面的tcpgrep部分介绍具体用法
2)如果已经将数据包分成两个文件,那么tcpreplay就可以用如下的命令在两个网口之间进行数据的重放。
tcpreplay --dualfile --intf1=eth0 --intf2=eth1 side-a.pcap side-b.pcap

  1. 想要截获所有210.27.48.1 的主机收到的和发出的所有的分组:
    #tcpdump host 210.27.48.1
    (2) 想要截获主机210.27.48.1 和主机210.27.48.2或210.27.48.3的通信,使用命令(注意:括号前的反斜杠是必须的):
    #tcpdump host 210.27.48.1 and 210.27.48.2 or 210.27.48.3
    (3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
    #tcpdump ip host 210.27.48.1 and ! 210.27.48.2
    (4) 如果想要获取主机192.168.228.246接收或发出的ssh包,并且不转换主机名使用如下命令:
    #tcpdump -nn -n src host 192.168.228.246 and port 22 and tcp
    (5) 获取主机192.168.228.246接收或发出的ssh包,并把mac地址也一同显示:

tcpdump -e src host 192.168.228.246 and port 22 and tcp -n -nn

(6) 过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头:
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24
(7) 过滤源主机物理地址为XXX的报头:
tcpdump ether src 00:50:04:BA:9B and dst……
(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)。
(8) 过滤源主机192.168.0.1和目的端口不是telnet的报头,并导入到tes.t.txt文件中:
Tcpdump src host 192.168.0.1 and dst port not telnet -l > test.txt
ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
tcpdump采用命令行方式,它的命令格式为:
tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae]
[-qX] [-r 文件] [所欲捕获的数据内容]
参数:
-nn,直接以 IP 及 Port Number 显示,而非主机名与服务名称。
-i,后面接要「监听」的网络接口,例如 eth0, lo, ppp0 等等的接口。
-w,如果你要将监听所得的数据包数据储存下来,用这个参数就对了。后面接文件名。
-c,监听的数据包数,如果没有这个参数, tcpdump 会持续不断的监听,
直到用户输入 [ctrl]-c 为止。
-A,数据包的内容以 ASCII 显示,通常用来捉取 WWW 的网页数据包资料。
-e,使用资料连接层 (OSI 第二层) 的 MAC 数据包数据来显示。
-q,仅列出较为简短的数据包信息,每一行的内容比较精简。
-X,可以列出十六进制 (hex) 以及 ASCII 的数据包内容,对于监听数据包内容很有用。
-r,从后面接的文件将数据包数据读出来。那个「文件」是已经存在的文件,
并且这个「文件」是由 -w 所制作出来的。
所欲捕获的数据内容:我们可以专门针对某些通信协议或者是 IP 来源进行数据包捕获。
那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有。
‘host foo’, ‘host 127.0.0.1’ :针对单台主机来进行数据包捕获。
‘net 192.168’ :针对某个网段来进行数据包的捕获。
‘src host 127.0.0.1’ ‘dst net 192.168’:同时加上来源(src)或目标(dst)限制。
‘tcp port 21’:还可以针对通信协议检测,如tcp、udp、arp、ether 等。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运算是 ‘not ’ ‘! ‘, 与运算是’and’,’&&’;或运算 是’o
r’ ,‘||’;
附录:tcpreplay参数说明
此部分也可以直接参看tcpreplay –h ,此处只列出本人认为实用性比较强的。
-i, --intf1=str 服务器/初始数据输出口
-I, --intf2=str 客户端/第二个数据流输出口
-L, --limit=num 限制发包数目
-l, --loop=num 定义trace循环次数
-x, --multiplier=str 修改发包速度,str为原速度的倍数
-M, --mbps=str 以给定的Mbps速度发包
-t, --topspeed 尽快的速度发包
-o, --oneatatime 一次发送一个包
-p, --pps-multi=num 每秒发送的数据包数
Tcprewrite 和 tcpprep
这两个用得少,Tcprewrite主要是用于修改端口、IP等;
Tcpprep 主要是用于将pacp包转换成cach包,现在回放不用转,直接用pacp包可以回放;

跳板机

RDO

可视化软件

VNC

Xmanager

Java调试命令

jmap

Shell脚本编程

Shell是一个命令解释器,他为用户提供一个向Linux内核发送请求的程序。

格式

脚本以#!/bin/bash 开头

启动脚本方式

方式特点
路径启动/a/b/c/xx.sh
./xx.sh
注:脚本需要有可执行权限。即X权限。
sh启动sh xx.sh
注:脚本可以没有可执行权限。

注释

注释形式
单行#
多行:<<! 内容 !

变量

Linux变量环境变量,系统变量和用户自定义变量。

环境变量

环境变量特点
$HOME用户home目录的路径
$PWD用户密码路径
$SHELLshell路径
$USER
$PATH命令搜索路径
$EDITOR默认行编辑器
$LOGNAME用户登录名
$IFS设置shell分隔符,默认是空格,制表符,换行符。
$HISTFILE历史文件
$PS1主命令提示符
$PS2二级命令提示符
命令执行过程中要求输入数据时使用
$PS3select命令提示符
$PS4调试命令提示符

系统变量

查看当前shell中所有变量:set

变量特点
$n$0代表命令自身
$1~ 9 代表第一到第九个参数 < b r / > 9代表第一到第九个参数<br /> 9代表第一到第九个参数<br/>{n}十以上的参数用{}包起来
$*命令行中所有参数,把所有参数看成一个整体。
$@命令行中所有参数,把每个参数区别对待。
$#命令行中所有参数的个数
$$当前进程号PID
$!上一个进程号PID
$?前一个命令或函数的返回码。
0表示成功,非0表示失败

获取命令行的参数信息。

./xxx.sh 3 6 9
$0 代表xxx.sh脚本
$1 代表3
$2 代表6
$3 代表9
$* 代表"3 6 9"
$@ 代表"3" "6" "9"
$# 代表所有参数的个数,即3个

用户自定义变量

变量特点
$输出,引用变量
unset清除变量。但是不能清除静态变量
readonly静态只读变量
export环境变量
全局环境变量
local本地变量
1)定义并设置环境变量
export 环境变量名=2)让修改后的配置信息立即生效
source 配置文件

变量命名规则

1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
2)变量名称一般习惯为大写

变量赋值

1)直接赋值
变量名='值'

2)将命令的返回值赋给变量
变量名="命令"

3)将命令的返回值赋给变量
变量名=$(命令)

注:

1)等号两侧不能有空格

2)当值中有空格时,需要引号包起来。

3)单引号原型输出,双引号命令执行

read 读取控制台输入

read 【选项】
选项用途
-p指定控制台输入时提示符
-t指定读取时等待时间,过时不候。

echo 输出

基本重定向内联重定向
输入命令 < 文件命令 <<文件
输出命令 > 文件
覆盖
命令 >> 文件
追加

算数运算

方式一:$((运算式))
注:这个运算符只能是基本的符号运算式(+,-,*,/...),不能是英文运算式(-gt,-ge,-eq)

方式二:$[运算式]

方式三:expr
expr m+n	加
expr m-n	减
expr m*n	乘
expr m/n	除
expr m%n	取余

#!/bin/bash
A=5
B=6
C=$((($A + 5) * $B))
D=$[($A + 5) * $B]
E=`expr $A + 5`
E=`expr $E * $B`
echo "$C"
echo "$D"
echo "$E"
注:推荐使用第二种方式

流程控制

条件判断式

数值

n1 XXX n2含义
-eq等于
-ge大于等于
-gt大于
-le小于等于
-lt小于
-ne不等于

字符串

str1 XXX str2含义
=等于
>=大于等于
>大于
<=小于等于
<小于
-n长度是否非0
-z长度是否为0

注:

1)> < 得进行转义,否则shell会把它当成重定向符号,而把字符串值当做文件名进行重定向操作。

2)> < 与sort命令结构可能不同,sort认为小写字母大于大写字母,> < 则认为小写字母小于大写字母

文件权限

文件权限含义
-r 文件有读的权限
-w 文件有写的权限
-x 文件有执行的权限

文件类型

文件权限含义
-f 文件文件存在并且是一个常规的文件
-e 文件文件存在
-d 文件文件存在并是一个目录
-s 文件是否存在且为空

文件时间

file1 XXX file2含义
-nt
-ot

if

if [ 条件判断式 ] ;then
	程序
elif [ 条件判断式 ] ;then
	程序
fi

if [ 条件判断式 ] ;then
	程序
else
	程序

注: [ 条件判断式 ]中必须有空格

case

case $变量名 in
"值 1")
	如果变量的值等于值 1,则执行程序 1
;;
"值 2")
	如果变量的值等于值 2,则执行程序 2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

for

方式一:
for 变量 in 值1 值2 值3…
do
程序
done

方式二:
for 变量 in "$*"
do
程序
done

方式三:
for 变量 in "$@"
do
程序
done

方式四:
for (( 初始值;循环控制条件;变量变化))
do
程序
done

注:

1)break跳出此次循环

2)continue跳出所有循环

while

while [ 条件判断式 ]
do
程序
done
注: [ 条件判断式 ]中必须有空格

注:

1)break跳出此次循环

2)continue跳出所有循环

自定义函数

function 函数名(){
    代码; 
    【return 返回值;}

调用方式:函数名 【参数值】

示例:计算输入的两个参数之和
#!/bin/bash
function getSum(){
        SUM=$[ $n1+$n2 ]
        echo "和是$SUM"
}
read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2

getSum $n1 $n2

注:如果将某段代码封装成函数,如果不调用此函数,就相当于把这段代码注释。

最后

以上就是迅速冰淇淋为你收集整理的Linux环境搭建根目录命令Shell脚本编程的全部内容,希望文章能够帮你解决Linux环境搭建根目录命令Shell脚本编程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部