Skip to content

一、基本介绍

1.1 目录介绍

详情参考linux目录结构

/表示根目录
~表示/root
bin存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。
sbin存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。
etc存放系统管理和配置文件
home除了 root 以为所有用户默认在 home 下新建一个以用户名做为文件夹名称的文件夹
用户 xxx 对/home/xxx 具有完全操作权限.
root用户 root 单独文件夹,超级用户目录
usr用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。 /usr/x11r6 存放x window的目录 /usr/bin 众多的应用程序 /usr/sbin 超级用户的一些管理程序 /usr/doc linux文档 /usr/include linux下开发和编译应用程序所需要的头文件 /usr/lib 常用的动态链接库和软件包的配置文件 /usr/man 帮助文档 /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里 /usr/local/bin 本地增加的命令 /usr/local/lib 本地增加的库
dev存放设备文件
lib存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
mnt系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。
boot存放用于系统引导时使用的各种文件
temp用于存放各种临时文件
var用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。
/opt额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
/proc虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里

1.2 常用命令

1. 目录命令

shell
#切换到app目录
cd app 
#切换到上一层目录
cd ..  
#切换到系统根目录
cd /   
#切换到用户主目录
cd ~   
#切换到上一个所在目录
cd -   

pwd #打印工作目录,当前所有文件夹全路径

2. 列出文件列表

shell
#ls(list)是一个非常有用的命令,用来显示当前目录下的内容。配合参数的使用,能以不同的方式显示目录内容。     
#格式:ls[参数] [路径或文件名]
#在linux中以 . 开头的文件都是隐藏的文件

ls
#显示所有文件或目录(包含隐藏的文件)
ls -a  
# 缩写成ll


<NolebasePageProperties />




ls -l  
#  -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
#友好显示文件大小
ll -h

3. 创建目录和移除目录:mkdir rmdir

shell
mkdir(make directory)#命令可用来创建子目录。
mkdir app    #在当前目录下创建app目录 
# -v 显示命令执行过程详细信息
mkdir –p app2/test  #级联创建aap2以及test目

rmdir(remove directory)#命令可用来删除“空”的子目录: 
rmdir app    #删除app目录

4. 文件操作新建、添加、查看、删除

shell
#创建空文件.
touch  [参数选项] 文件名 # 如果文件不存在就创建文件  如果存在就修改时间属性
# a 改变档案的读取时间记录。 
# m 改变档案的修改时间记录。 
# c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
# d 设定时间与日期,可以使用各种不同的格式。
# t 设定档案的时间记录,格式与 date 指令相同。 
# --help 列出指令格式。 
#  --version 列出版本讯息。

#  向文件中添加一些内容.
echo ‘内容’ >> 文件名     

#cat 用于显示文件的内容。 格式:cat[参数]<文件名>
#  -n 或 --number:由 1 开始对所有输出的行数编号。
# 显示所有内容
cat yum.conf 

#more 一般用于要显示的内容会超过一个画面长度的情况。按空格键显示下一个画面。回车显示下一行内容。按 q 键退出查看。
# Enter  向下n行(自定义) 默认1行
# 空格/ctrl+F  向下滚动一屏
# B/ctrl+B 返回上一屏
# q 退出
more yum.conf

#less 用法和more类似,不同的是less可以通过PgUp、PgDn键来控制。
# -m 显示类似more命令的百分比
# -n 显示每行的行号
# 空格或pagedown 前进一页
# b 或 page up 后退一页
# d 前进半页
# u 后退半页
# 回车或方向下  前进一行
# y或方向上  后退一行
# /字符串  向下查找
# ?字符串 向上搜索
# v 进入vim编辑器
# 方向左右 水平滚动条
# q 退出
# ctrl + F - 向前移动一屏
# ctrl + B - 向后移动一屏
# ctrl + D - 向前移动半屏
# ctrl + U - 向后移动半屏
# j - 向前移动一行
# k - 向后移动一行
# G - 移动到最后一行
# g - 移动到第一行
# q / ZZ - 退出 less 命令
less yum.conf

#head [-n] 文件名 查看文件前 n 行,默认前 10 行

#tail命令是在实际使用过程中使用非常多的一个命令,它的功能是:用于显示文件后几行的内容。
#用法:
# -数字:显示文件的最后几行
# -n行数   显示行数
# -f 循环读取
# & 后台运行
# -c:显示最后指定的字节数
tail -10 /etc/passwd  # 查看后10行数据
tail -f catalina.log  #动态查看日志(*****)

#ctrl+c 结束查看

#find 目录 参数   示例:查找/root下的与test相关的目录(文件) 
# find [参数选项] <指定目录> <指定条件> <指定内容> 在指定目录下查找文件
# -name filename 查找名为filename的文件
# -ctime -n或+n 按时间来查找文件,-n指n天以内,+n指n天以前
find /root -name ‘test*

#rm  删除文件用法:rm [选项]... 文件...
# -f或--force 强制删除文件或目录
# -i 删除前逐一询问确认
# -r或-R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理
rm a.txt  # 删除a.txt文件  删除需要用户确认,y/n 
rm -f a.txt  #不询问,直接删除 rm 删除目录
rm -r a  # 递归删除 不询问递归删除(慎用)
rm -rf  a #不询问递归删除
rm -rf *  # 删除所有文件
#rm -rf /*  #自杀

#cp(copy)命令可以将文件从一处复制到另一处。一般在使用cp命令时将一个文件复制成另一个文件或复制到某目录时,需要指定源文件名与目标文件名或目录。
# -r或--recursice 递归处理,将指定目录下的文件与子目录一并处理 
# -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。
# -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
# -f:覆盖已经存在的目标文件而不给出提示
# -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
# -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
# -r/R:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
# -l:不复制文件,只是生成链接文件。
cp a.txt b.txt  #将a.txt复制为b.txt文件
cp a.txt ../  # 将a.txt文件复制到上一层目录中 

#mv 移动或者重命名
# -f或--force 若目标文件与现有文件或目录重复 直接覆盖。
# -i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
mv a.txt ../  #将a.txt文件移动到上一层目录中
mv a.txt b.txt  #将a.txt文件重命名为b.txt

# find 查找文件或目录
# -name 指定字符串作为寻找文件或目录的样式
find [目录][参数]

#tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成xxx.tar.gz(或称为xxx.tgz)的文件。  
# tar本身不具有压缩功能。他是调用压缩功能实现的 。
#常用参数: 
#-c:创建一个新tar文件
#-v:显示运行过程的信息 
#-f:指定文件名 
#-z:调用gzip压缩命令进行压缩 
#-t:查看压缩文件的内容
#-x:解开tar文件

#打包:zcvf
tar –cvf xxx.tar ./*
#打包并且压缩:
tar –zcvf xxx.tar.gz ./* 

#解压 zxvf
tar –xvf xxx.tar
tar -xvf xxx.tar.gz -C /usr/aaa

# gzip
# gzip[参数选项][文件] 压缩文件
# 不加任何参数表示压缩文件
# -d 解压缩
# -v 显示指令执行过程
gunzip[参数][文件] #解压文件
# -v 显示指令执行过程

# zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。
zip [必要参数][选择参数][文件] # 压缩
# -q 不显示指令执行过程。
# -r 递归处理,将指定目录下的所有文件和子目录一并处理。

unzip [必要参数][选择参数][文件] # 解压
# -l 显示压缩文件内所包含的文件。
# -d<目录> 指定文件解压缩后所要存储的目录。

# 使用新的压缩算法,压缩后的文件比原来的要小,但是花费时间变长。
# 若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
bzip2 [参数选项] 文件 #压缩

bunzip2 [参数选项] 文件 # 解压
# -v 解压缩文件时,显示详细的信息。


#【grep】命令  查找符合条件的字符串。用法: grep [选项]... PATTERN [FILE]... 示例:
# -n:把包含关键字的行展示出来
# -i :把包含关键字的行展示出来,搜索时,忽略大小写。
# -v : 把不包含关键字的行展示出来
grep lang anaconda-ks.cfg  #在文件中查找lang
grep lang anaconda-ks.cfg –color #高亮显示

awk [参数选项] ‘语法’ 文件
# -F 使用指定字符分割
# $+数字  获取第几段内容
# $0 获取当前行的内容
# OFS 向外输出时段分割字符串
awk
BEGIN{初始化操作}
{每行都执行}
END{结束时操作}
文件名

ln -s 目标文件路径 快捷方式路径

5. 文件编辑

vi编辑
shell
#打开或新建文件,并将光标置于第一行首
vi filename 
#打开文件,并将光标置于第n行首
vi +n filename 
# 打开文件,并将光标置于最后一行首
vi + filename 
# 打开文件,并将光标置于第一个与pattern匹配的串处
vi +/pattern filename
# 在上次正用vi编辑时发生系统崩溃,恢复filename
vi -r filename 
#  打开多个文件,依次编辑
vi filename....filename

### vi下键操作

## 移动光标类命令      
# h :光标左移一个字符      
# l :光标右移一个字符       
# space:光标右移一个字符       
# Backspace:光标左移一个字符       
# k或Ctrl+p:光标上移一行       
# j或Ctrl+n :光标下移一行       
# Enter :光标下移一行       
# w或W :光标右移一个字至字首       
# b或B :光标左移一个字至字首      
# e或E :光标右移一个字j至字尾       
# ) :光标移至句尾       
# ( :光标移至句首       
# }:光标移至段落开头      
# {:光标移至段落结尾      
# nG:光标移至第n行首      
# n+:光标下移n行       
# n-:光标上移n行       
# n$:光标移至第n行尾      
# H :光标移至屏幕顶行       
# M :光标移至屏幕中间行       
# L :光标移至屏幕最后行       
# 0:(注意是数字零)光标移至当前行首       
# $:光标移至当前行尾              

## 屏幕翻滚类命令       
# Ctrl+u:向文件首翻半屏       
# Ctrl+d:向文件尾翻半屏       
# Ctrl+f:向文件尾翻一屏       
# Ctrl+b;向文件首翻一屏       
# nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。              

## 插入文本类命令       
# i :在光标前       
# I :在当前行首       
# a:光标后       
# A:在当前行尾       
# o:在当前行之下新开一行      
# O:在当前行之上新开一行      
# r:替换当前字符       
# R:替换当前字符及其后的字符,直至按ESC键       
# s:从当前光标位置处开始,以输入的文本替代指定数目的字符       
# S:删除指定数目的行,并以所输入文本代替之       
# ncw或nCW:修改指定数目的字       
# nCC:修改指定数目的行     
# gg: 到文本的第一行
# G: 到文本的最后一行

## 删除命令       
# ndw或ndW:删除光标处开始及其后的n-1个字       
# do:删至行首       
# d$:删至行尾       
# dd: 删除一行
# ndd:删除当前行及其后n-1行      
# x或X:删除一个字符,x删除光标后的,而X删除光标前的       
# Ctrl+u:删除输入方式下所输入的文本              

## 搜索及替换命令 :       
# /pattern:从光标开始处向文件尾搜索pattern      
# ?pattern:从光标开始处向文件首搜索pattern       
# n:在同一方向重复上一次搜索命令       
# N:在反方向上重复上一次搜索命令      
# :s/p1/p2/g:将当前行中所有p1均用p2替代       
# :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代       
# :g/p1/s//p2/g:将文件中所有p1均用p2替换              

## 复制
# 「yw」:将光标所在之处到字尾的字符复制到缓冲区中
# 「#yw」:复制#个字到缓冲区
# 「yy」:复制光标所在行到缓冲区。
# 「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。
# 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。 

## 替换
# 「r」:替换光标所在处的字符。
# 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

## 恢复上一次操作
# 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可以执行多次回复。

## 更改
# 「cw」:更改光标所在处的字到字尾处 
# 「c#w」:例如,「c3w」表示更改3个字 

## 选项设置       
# all:列出所有选项设置情况       
# term:设置终端类型      
# ignorance:在搜索中忽略大小写       
# list:显示制表位(Ctrl+I)和行尾标志($)       
# number:显示行号       
# report:显示由面向行的命令修改过的数目       
# terse:显示简短的警告信息       
# warn:在转到别的文件时若没保存当前文件则显示NO write信息       
# nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符       
# nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始       
# mesg:允许vi显示其他用户用write写到自己终端上的信息         
# 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号


## 最后行方式命令       
# :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下       
# :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下       
# :n1,n2 d :将n1行到n2行之间的内容删除      
# :w :保存当前文件       
# :e filename:打开文件filename进行编辑       
# :x:保存当前文件并退出       
# :q:退出vi       
# :q!:不保存文件并退出vi       
# :!command:执行shell命令command       
# :n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入      
# :r!command:将命令command的输出结果放到当前行      。
vim编辑
shell
#在Linux下一般使用vi编辑器来编辑文件。 vi既可以查看文件也可以编辑文件。 三种模式:命令行、插入、底行模式。
#切换到命令行模式:按Esc键;
#切换到插入模式:按 i 、o、a键;
#i 在当前位置生前插入
#I 在当前行首插入
#a 在当前位置后插入
#A 在当前行尾插入
#o 在当前行之后插入一行
#O 在当前行之前插入一行
#切换到底行模式:按 :(冒号); 更多详细用法,查询文档《Vim命令合集.docx》和《vi使用方法详细介绍.docx》

##打开文件:
vim file
vim 文件名 +行数
# 同时打开多个文件
vim file1 file2 file3 ...
# 在vim窗口中打开一个新文件
:open file
# 在新窗口中打开文件
:split file
# 切换到下一个文件
:bn
# 切换到上一个文件
:bp
# 查看当前打开的文件列表,当前正在编辑的文件会用[]括起来。
:args
# 打开远程文件,比如ftp或者share folder
:e ftp://192.168.10.76/abc.txt

# % 括号匹配
## 插入命令
# i 在当前位置生前插入
# I 在当前行首插入
# a 在当前位置后插入
# A 在当前行尾插入
# o 在当前行之后插入一行
# O 在当前行之前插入一行

## 查找替换命令
# 注意:vim中有一些特殊字符在查找时需要转义  .*[]^%/?~$
# /text  查找text,按n健查找下一个,按N健查找前一个。
# ?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。
# :set ignorecase  忽略大小写的查找
# :set noignorecase  不忽略大小写的查找
# 查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。
# :set hlsearch  高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。
# :set nohlsearch  关闭高亮搜索显示
# :nohlsearch  关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
# :set incsearch  逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
# :set wrapscan  重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
# ra 将当前字符替换为a,当期字符即光标所在字符。
# s/old/new/ 用old替换new,替换当前行的第一个匹配
# s/old/new/g 用old替换new,替换当前行的所有匹配
# %s/old/new/ 用old替换new,替换所有行的第一个匹配
# %s/old/new/g 用old替换new,替换整个文件的所有匹配
# :10,20 s/^/  /g 在第10行知第20行每行前面加四个空格,用于缩进。
# ddp 交换光标所在行和其下紧邻的一行。

## 移动光标命令
# h 左移一个字符
# l 右移一个字符,这个命令很少用,一般用w代替。
# k 上移一个字符
# j 下移一个字符
# 以上四个命令可以配合数字使用,比如20j就是向下移动20行,5h就是向左移动5个字符,在Vim中,很多命令都可以配合数字使用,比如删除10个字符10x,在当前位置后插入3个!,3a!<Esc>,这里的Esc是必须的,否则命令不生效。
# w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。
# b 向后移动一个单词 2b 向后移动2个单词
# e,同w,只不过是光标停在单词尾部
# ge,同b,光标停在单词尾部。
# ^ 移动到本行第一个非空白字符上。
# 0(数字0)移动到本行第一个字符上,
# <HOME>移动到本行第一个字符。同0健。
# $ 移动到行尾 3$移动到下面3行的行尾
# gg 移动到文件头。 = [[
# G(shift + g) 移动到文件尾。 = ]]
# f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。
# F 同f,反向查找。
# 跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。
# Ctrl + e 向下滚动一行
# Ctrl + y 向上滚动一行
# Ctrl + d 向下滚动半屏
# Ctrl + u 向上滚动半屏
# Ctrl + f 向下滚动一屏
# Ctrl + b 向上滚动一屏

## 撤销重做
# u 撤销(Undo)
# U 撤销对整行的操作
# Ctrl + r 重做(Redo),即撤销的撤销。

## 删除命令
# x 删除当前字符
# 3x 删除当前光标开始向后三个字符
# X 删除当前字符的前一个字符。X=dh
# dl 删除当前字符, dl=x
# dh 删除前一个字符
# dd 删除当前行
# dj 删除上一行
# dk 删除下一行
# 10d 删除当前行开始的10行。
# D 删除当前字符至行尾。D=d$
# d$ 删除当前字符之后的所有字符(本行)
# kdgg 删除当前行之前所有行(不包括当前行)
# jdG(jd shift + g)  删除当前行之后所有行(不包括当前行)
# :1,10d 删除1-10行
# :11,$d 删除11行及以后所有的行
# :1,$d 删除所有行
# J(shift + j)  删除两行之间的空行,实际上是合并两行。

## 拷贝和粘贴
# yy 拷贝当前行
# nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
# p 在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。
# shift+p 在当前行前粘贴
# :1,10 co 20 将1-10行插入到第20行之后。
# :1, co  将整个文件复制一份并添加到文件尾部。
# 正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
# ddp交换当前行和其下一行
# xp交换当前字符和其后一个字符

## 剪切命令
# 正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
# ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
# :1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
# :1, 10 m 20 将第1-10行移动到第20行之后。

#退出:
esc :q
#修改文件:输入i进入插入模式
#保存并退出:
esc :wq
ZZ
#不保存退出:
esc :q!
#  放弃所有修改,并打开原来文件。
:e!

## 窗口命令
# :split或new 打开一个新窗口,光标停在顶层的窗口上
# :split file或:new file 用新窗口打开文件
# split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。
# Ctrl+ww 移动到下一个窗口
# Ctrl+wj 移动到下方的窗口
# Ctrl+wk 移动到上方的窗口
#关闭窗口
# :close 最后一个窗口不能使用此命令,可以防止意外退出vim。
# :q 如果是最后一个被关闭的窗口,那么将退出vim。
# ZZ 保存并退出。
# :only 关闭所有窗口,只保留当前窗口

## 录制宏
# 按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。

## 执行shell命令
# :!command
# :!ls 列出当前目录下文件
# :!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
# :!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。
# :suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。

## 注释命令
# perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#
# 3,5 s/^/#/g 注释第3-5行
# 3,5 s/^#//g 解除3-5行的注释
# 1,$ s/^/#/g 注释整个文档。
# :%s/^/#/g 注释整个文档,此法更快。

## 帮助命令
# :help or F1 显示整个帮助
# :help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
# :help 'number' Vim选项的帮助用单引号括起
# :help <Esc>特殊键的帮助用<>扩起
# :help -t Vim启动参数的帮助用-
# :help i_<Esc>插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
# 帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回

## 其他非编辑命令
# . 重复前一次命令
# :set ruler?  查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看
# :scriptnames  查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。
# :set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。
# :syntax 列出已经定义的语法项
# :syntax clear 清除已定义的语法规则
# :syntax case match 大小写敏感,int和Int将视为不同的语法元素
# :syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案

6. 重定向输出

shell
#> 重定向输出,覆盖原有内容; >> 重定向输出,又追加功能; 示例:
cat /etc/passwd > a.txt  #将输出定向到a.txt中
cat /etc/passwd >> a.txt #输出并且追加

ifconfig > ifconfig.txt

7. 管道|和grep

shell
#管道是Linux命令中重要的一个概念,其作用是将一个命令的输出用作另一个命令的输入。 示例
ls --help | more  #分页查询帮助信息
ps –ef | grep java  #查询名称中包含java的进程

ifconfig | more
cat index.html | more
ps –ef | grep aio


#grep用于过滤/搜索特定的字符,可使用正则表达式,与多种命令配置使用
#格式:grep [option]pattern[file]
# -i或--ignore-case 忽略字符大小写差别。
# 查看文件中含有demo字符的内容
grep -i demo /root/file
# 在cat命令结果基础上进行过滤
cat /root/file | grep -i demo

8. &&命令执行控制

shell
#命令之间使用 && 连接,实现逻辑与的功能。  
#只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。  
#只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。

mkdir test && cd test

9. 网络通讯命令

shell
ifconfig  #显示或设置网络设备。
ifconfig eth0 192.168.12.22 # 修改ip地址 如果想要永久生效修改 /etc/sysconfig/network-scripts/ifcfg-eth0文件
DEVICE=eth0 #网卡名称
TYPE=Ethernet#网卡类型
BOOTPROTO=static #获取ip的方式(static/dhcp/bootp/none)
HWADDR=00:0C:29:B5:B2:69 #MAC地址
IPADDR=12.168.177.129 #IP地址
NETMASK=255.255.255.0 #子网掩码
NETWORK=192.168.177.0 #网络地址
BROADCAST=192.168.0.255 #广播地址
ONBOOT=yes#是否开机启动网卡

ifconfig  #显示网络设备
ifconfig eth0 up #启用eth0网卡
ifconfig eth0 down  #停用eth0网卡 ping   探测网络是否通畅。
ping 192.168.0.1 netstat #查看网络端口。
netstat -an | grep 3306 #查询3306端口占用情况
ifconfig ens37 192.168.23.199 #配置ip地址
ifconfig ens37 192.168.23.133 netmask 255.255.255.0 #配置ip地址和子网掩码

netstat [参数选项] # 显示网络状态
# -a 显示所有连线中的Socket
# -i 显示网卡列表

10. 系统管理命令

shell
# -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号;
# -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
# -u:显示GMT; 
# --help:在线帮助;
# --version:显示版本信息
date  #显示当前系统时间
date -s “2014-01-01 10:10:10“  #设置系统时间 df 显示磁盘信息
df –h  #友好显示大小 free 显示内存状态
free –m #以mb单位显示内存组昂头 top 显示,管理执行中的程序
# 校正服务器时间、时区
timedatectl
timedatectl status #显示系统的当前时间和日期
timedatectl list-timezones #查看所有可用的时区
timedatectl set-timezone "Asia/Shanghai“ # 设置本地时区
timedatectl set-ntp false # 禁用时间同步
timedatectl set-time “2019-03-11 20:45:00“ # 设置时间
timedatectl set-ntp true # 启用时间同步

clear #清屏幕 
ps #正在运行的某个进程的状态
# -A:进程信息信息(部分)
# -u : 显示指定用户信息
# -e 显示所有程序
# -f 显示uid,ppip,c与stime
ps –ef  #查看所有进程
ps –ef | grep ssh #查找某一进程 kill 杀掉某一进程
kill [-s <信息名称或编号> ] [程序] # 中断执行中的程序
# -l<信息编号> : 若不加信息编号选项,则-l参数会列出全部的信息名称
# 直接加程序的PID或者PGID,也可以是工作编号
# -l 信息名称
kill 2868  #杀掉2868编号的进程
kill -9 2868  #强制杀死进程

du #显示目录或文件的大小。
du –h #显示当前目录的大小
who #显示目前登入系统的用户信息。 
hostname #查看当前主机名
hostname xxx #修改主机名 重启后无效 永久生效,可以修改/etc/sysconfig/network文件
#修改:
vi /etc/sysconfig/network 
uname #显示系统信息。
uname -a #显示本机详细信息。 依次为:内核名称(类别),主机名,内核版本号,内核版本,内核编译日期,硬件名,处理器类型,硬件平台类型,操作系统名称

# 重启
reboot [-n] [-w] [-d] [-f] [-i]
# -n : 在重开机前不做将记忆体资料写回硬盘的动作
# -w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
# -d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d) 
# -f : 强迫重开机,不呼叫 shutdown 这个指令
# -i : 在重开机之前先把所有网络相关的装置先停止
# 关机
halt
# 关机
shutdown [-t seconds] [-rkhncfF] time [message]
#-t seconds : 设定在几秒钟之后进行关机程序。
# -k : 并不会真的关机,只是将警告讯息传送给所有使用者。
# -r : 关机后重新开机。
# -h : 关机后停机。
# -n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
# -c : 取消目前已经进行中的关机动作。
# -f : 关机时,不做 fcsk 动作(检查 Linux 档系统)。 
# -F : 关机时,强迫进行 fsck 动作。
# time : 设定关机的时间。
# - message : 传送给所有使用者的警告讯息

# 显示当前登录系统的用户
who - [husfV] [user] 
# -H: 显示标题信息
# -u:显示闲置时间,如果一份之后有操作,则显示点,如果超过24小时无操作,则显示old字符串
# -q:只显示登入系统的账号名称和总人数
# -s:次参数将忽略不予处理,仅负责解决who指令其版本的兼容性问题
# -w:显示用户的信息状态栏
# --help:在线帮助
# --version:显示版本信息

11. 网络服务管理命令

sh
service network status 查看指定服务的状态
service network stop 停止指定服务
service network start 启动指定服务
service network restart 重启指定服务

# 关闭防火墙
systemctl stop firewalld.service 
# 重启防火墙
firewall-cmd --reload
# 查看防火墙的状态
firewall-cmd --state 
# 禁止firewall开机启动
systemctl disable firewalld.service
# 开放9876端口
firewall-cmd --remove-port=9876/tcp --permanent

12. 磁盘管理命令

sh
lsblk [参数选项] #列出硬盘的使用情况
# -f 显示系统信息

df [参数选项] #显示目前在Linux系统上,硬盘的使用情况
# --total 显示所有的信息
# -h, 换算成KB,MB,GB等形式进行展示(方便阅读)

mount [参数选项] 目录 #用于挂载Linux系统外的设备
# 目录事先存在,可以用mkdir命令新建目录;
# 挂载点目录不可被其他进程使用到;
# 挂载点下原有文件将被隐藏。

13.yum命令

sh
# 列出所有可更新的软件清单命令:
yum check-update
# 更新所有软件命令:
yum update
# 仅安装指定的软件命令:
yum install <package_name>
# 仅更新指定的软件命令:
yum update <package_name>
# 列出所有可安裝的软件清单命令:
yum list
# 删除软件包命令:
yum remove <package_name>
# 查找软件包 命令:
yum search <keyword>
# 清除缓存命令: 
yum clean packages # 清除缓存目录下的软件包
yum clean headers # 清除缓存目录下的 headers 
yum clean oldheaders # 清除缓存目录下旧的 headers 
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) # 清除缓存目录下的软件包及旧的headers

yum install -y wget # 安装下载工具wget
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  # 下载阿里云的Centos-7.repo文件
yum clean all # 清理之前的缓存,并重新加载yum
yum makecache # 建立一个缓存文件
yum search tomcat # 查找软件,验证阿里云的yum源是否可以正常使用

1.3 用户和组管理

1. 用户的管理

shell
useradd #添加一个用户
useradd test #添加test用户
useradd test -d /home/t1  #指定用户home目录 
passwd  #设置、修改密码
passwd test  #为test用户设置密码
logname [--help][--version] #显示登录账号的信息
#切换登录:
ssh -l test -p 22 192.168.19.128
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER] [ARG]
# -f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
# -m -p 或 --preserve-environment 执行 su 时不改变环境变数
# -c command 或 --command=command  切换用户执行命令,执行完毕之后再变回原来的使用者
# -s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
# --help 显示说明文件
# --version 显示版本资讯
# - -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
# USER 要变更的用户帐号
# ARG 传入新的 shell 参数

su #– 用户名
userdel #删除一个用户
userdel test #删除test用户(不会删除home目录)
userdel –r test  #删除用户以及home目录

usermod # 修改用户

id [-g][--help][--version][用户名称] #查看当前用户的详细信息(用户id,群组id,所属组)
# -g或--group 显示用户所属群组的ID。 
# -G或--groups 显示用户所属附加群组的ID
# -n或--name 显示用户,所属群组或附加群组的名称。
# -r或--real 显示实际ID。 
# -u或--user 显示用户ID。 
# -help 显示帮助。
# -version 显示版本信息。

sudo [参数选项] # 提高普通用户的操作权限
# –V 显示版本编号
# –h 会显示版本编号和指令的使用方式说明
# –l 显示出自己的权限
# –v 超出N分钟没有使用,要求再次输入密码(默认5分钟)
# –k 下一次执行 sudo 时问密码
# –s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
# –H 将环境变数中的 HOME 指定为要变更身份的使用者HOME目录
# sudo command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令

2. 组管理

shell
#当在创建一个新用户user时,若没有指定他所属于的组,就建立一个和该用户同名的私有组 
#创建用户时也可以指定所在组 
groupadd  #创建组
groupadd public  #创建一个名为public的组
useradd u1 –g public  #创建用户指定组 groupdel 删除组,如果该组有用户成员,必须先删除用户才能删除组。
groupdel public

groupmod # 修改用户组

groups 用户名 # 查询用户所属组

# 管理用户组内成员
# -a:添加用户到组;
# -d:从组删除用户;
# -A:指定管理员;
# -M:指定组成员和-A的用途差不多;
# -r:删除密码;
# -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
gpasswd # (可选项)组名

3. id,su命令

shell
#【id命令】功能:查看一个用户的UID和GID  用法:id [选项]... [用户名] 直接使用id  直接使用id 用户名

#【su命令】 功能:切换用户。  用法:su [选项]... [-] [用户 [参数]... ] 
su u1  #切换到u1用户
su - u1 #切换到u1用户,并且将环境也切换到u1用户的环境(推荐使用)

#【账户文件】
/etc/passwd # 用户文件 
/etc/shadow # 密码文件 
/etc/group # 组信息文件
#【用户文件】
root:x:0:0:root:/root:/bin/bash 
#账号名称:		在系统中是唯一的 
#用户密码:		此字段存放加密口令 
#用户标识码(User ID):  系统内部用它来标示用户 
#组标识码(Group ID):   系统内部用它来标识用户属性 
#用户相关信息:		例如用户全名等 
#用户目录:		用户登录系统后所进入的目录 
#用户环境:		用户工作的环境
#【密码文件】
#shadow文件中每条记录用冒号间隔的9个字段组成. 
#用户名:用户登录到系统时使用的名字,而且是惟一的 
#口令:  存放加密的口令 
#最后一次修改时间:  标识从某一时刻起到用户最后一次修改时间 
#最大时间间隔:  口令保持有效的最大天数,即多少天后必须修改口令 
#最小时间间隔:	再次修改口令之间的最小天数 
#警告时间:从系统开始警告到口令正式失效的天数 
#不活动时间:	口令过期少天后,该账号被禁用 
#失效时间:指示口令失效的绝对天数(从1970年1月1日开始计算) 
#标志:未使用 
#【组文件】
root:x:0: 
#组名:用户所属组 
#组口令:一般不用 
#GID:组ID 
#用户列表:属于该组的所有用户

1.4 权限管理

通过ll查看可查看文件详细信息

第一位代表文件的类型:

  • d:代表目录
  • -:代表文件
  • l:代表链接(可以认为是window中的快捷方式)

后面的9位分为3组,每3位置一组,分别代表属主的权限,与当前用户同组的 用户的权限,其他用户的权限

r:代表权限是可读,r也可以用数字4表示

w:代表权限是可写,w也可以用数字2表示

x:代表权限是可执行,x也可以用数字1表示

属主(user)属组(group)其他用户
rwx
421

权限范围表示

u:User,文件目录拥有者

g:Group,文件或目录所属群组

o:Other,出文件或目录所有者所属群组之外,其他用户

a:All,全部用户

符号

+添加权限

-取消权限

shell
#chmod    修改文件/目录的权限的命令
#  -c : 若该档案权限确实已经更改,才显示其更改动作
# -f : 若该档案权限无法被更改也不要显示错误讯息
# -v : 显示权限变更的详细资料
# -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) 
# --help : 显示辅助说明
# --version : 显示版本
#示例:修改/test下的aaa.txt的权限为属主有全部权限,属主所在的组有读写权限,其他用户只有读的权限
chmod u=rwx,g=rw,o=r aaa.txt
#上述示例还可以使用数字表示:
chmod 764 aaa.txt

# 取消用户读写执行xxx目录的权限
chmod u-rwx xxx

chown #变更文件或目录改文件所属用户和组
# -R 处理指定目录以及其子目录下的所有文件
chown u1:public a.txt	#:变更当前的目录或文件的所属用户和组
chown -R u1:public dir	#:变更目录中的所有的子目录及文件的所属用户和组

# chgrp [选项参数][所属群组][文件或目录...]
# chgrp [选项参数][--reference=<参考文件或目录>][--version][文件或目录...]  更改属组
#  -c或--changes 效果类似"-v"参数,但仅回报更改的部分。
# -f或--quiet或--silent 不显示错误信息。
# -h或--no-dereference 只对符号连接的文件作修改,而不更动其他任何相关文件。
# -R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
# -v或--verbose 显示指令执行过程。
# --help 在线帮助。
# --reference=<参考文件或目录> 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
# --version 显示版本信息。

1.5 Linux文件类型

普通文件: 包括文本文件、数据文件、可执行的二进制程序文件等。(-) 
目录文件: Linux系统把目录看成是一种特殊的文件,利用它构成文件系统的树型结构。 (d)  
设备文件: Linux系统把每一个设备都看成是一个文件
符号链接(l)
* 进入etc可以查看,相当于快捷方式 
字符设备文件(c) 
块设备文件(s) 
套接字(s) 
命名管道(p)

1.6 rpm 命令

二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

常用命令组合

shell
-ivh #:安装显示安装进度--install--verbose--hash
-Uvh #:升级软件包--Update;
-qpl #: 列出RPM软件包内的文件信息[Query Package list];
-qpi #:列出RPM软件包的描述信息[Query Package install package(s)];
-qf #:查找指定文件属于哪个RPM软件包[Query File];
-Va #:校验所有的 RPM软件包,查找丢失的文件[View Lost];
-e #:删除包
rpm -q samba #//查询程序是否安装
rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm #//按路径安装并显示进度
rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm    #//指定安装目录
rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm    #//用来检查依赖关系;并不是真正的安装;
rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm #//新版本降级为旧版本
rpm -qa | grep httpd      #[搜索指定rpm包是否安装]--all搜索*httpd*
rpm -ql httpd         #[搜索rpm包]--list所有文件安装目录
rpm -qpi Linux-1.4-6.i368.rpm #[查看rpm包]--query--package--install package信息
rpm -qpf Linux-1.4-6.i368.rpm #[查看rpm包]--file
rpm -qpR file.rpm       #[查看包]依赖关系
rpm2cpio file.rpm |cpio -div    #[抽出文件]
rpm -ivh file.rpm  #[安装新的rpm]--install--verbose--hash
rpm -ivh [url]http://mirrors.kernel.org/fedora/core/4/i386/os/Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm[/url] 
rpm -Uvh file.rpm    #[升级一个rpm]--upgrade
rpm -e file.rpm      #[删除一个rpm包]--erase
#常用参数:
#Install/Upgrade/Erase options:
#-i, --install                     install package(s)
#-v, --verbose                     provide more detailed output
#-h, --hash                        print hash marks as package installs (good with -v)
#-e, --erase                       erase (uninstall) package
#-U, --upgrade=<packagefile>+      upgrade package(s)
#--replacepkge                    无论软件包是否已被安装,都强行安装软件包
#--test                            安装测试,并不实际安装
#--nodeps                          忽略软件包的依赖关系强行安装
#--force                           忽略软件包及文件的冲突
#Query options (with -q or --query):
#-a, --all                         query/verify all packages
#-p, --package                     query/verify a package file
#-l, --list                        list files in package
#-d, --docfiles                    list all documentation files
#-f, --file                        query/verify package(s) owning file


#.src.rpm结尾的文件,这些文件是由软件的源代码包装而成的,用户要安装这类RPM软件包,必须使用命令:
rpm --recompile vim-4.6-4.src.rpm  #这个命令会把源代码解包并编译、安装它,如果用户使用命令:

rpm --rebuild vim-4.6-4.src.rpm  #在安装完成后,还会把编译生成的可执行文件重新包装成i386.rpm 的RPM软件包。

rpm -ivh --aid samba*.rpm #(一定要安装rpmdb后才可以用这种方式安装排除依赖关系)

1.7 TOP命令

sh
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] # 实时显示process的动态
# -d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s 
# -q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
# -c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
# -S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
# s : 安全模式,将交谈式指令取消, 避免潜在的危机
# -i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
# -n : 更新的次数,完成后将会退出 top
# -b : 批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

top

第一行是任务队列信息

同 uptime  命令的执行结果:
[root@localhost ~]# uptime
 13:22:30 up 8 min,  4 users,  load average: 0.14, 0.38, 0.25
12:38:33当前时间
up 50days系统运行时间,格式为时:分
1 user当前登录用户数
load average: 0.06, 0.60, 0.48系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息

Tasks: 29 total进程总数
1 running正在运行的进程数
28 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数
Cpu(s): 0.3% us用户空间占用CPU百分比
1.0% sy内核空间占用CPU百分比
0.0% ni用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id空闲CPU百分比
0.0% wa等待输入输出的CPU时间百分比
0.0% hi
0.0% si

第四五行为内存信息

Mem: 191272k total物理内存总量
173656k used使用的物理内存总量
17616k free空闲内存总量
22052k buffers用作内核缓存的内存量
Swap: 192772k total交换区总量
0k used使用的交换区总量
192772k free空闲交换区总量
123988k cached缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖, 该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

进程信息区

列名含义
PID进程id
PPID父进程id
RUSERReal user name
UID进程所有者的用户id
USER进程所有者的用户名
GROUP进程所有者的组名
TTY启动进程的终端名。不是从终端启动的进程则显示为 ?
PR优先级
NInice值。负值表示高优先级,正值表示低优先级
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

用快捷键更改显示内容

shell
h或者?  #: 显示帮助画面,给出一些简短的命令总结说明。
k  #:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i #:忽略闲置和僵死进程。这是一个开关式命令。
q #:  退出程序。
r # :  重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S #:切换到累计模式。
s  #:  改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F  #:从当前显示中添加或者删除项目。
o或者O   #:改变显示项目的顺序。
l #: 切换显示平均负载和启动时间信息。即显示影藏第一行
m #: 切换显示内存信息。即显示影藏内存行
t #: 切换显示进程和CPU状态信息。即显示影藏CPU行
c #:  切换显示命令名称和完整命令行。 显示完整的命令。 这个功能很有用。
M #: 根据驻留内存大小进行排序。
P #:根据CPU使用百分比大小进行排序。
T #: 根据时间/累计时间进行排序。
W #:  将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
z #:改变显示的颜色

1.8 shell脚本

注释

sh
#!/bin/bash   单行注释

:<<! 这是多行注释
		这是多行注释
!

变量

sh
# 普通变量  
# 数字不加引号,其他默认加双引号
变量名=变量值 变量值必须是一个整体,中间没有特殊字符
变量名='变量值' 单引号中的的内容,原样赋值
变量名="变量值"  如果双引号里面有其他变量,会把变量的结果进行拼接, 然后赋值

# 命令变量  执行`或者$()范围内的命令 将命令执行后的结果,赋值给变量
变量名=`命令`
变量名=$(命令)  

# 变量使用
$变量名
"$变量名"
${变量名}
"${变量名}"  # 标准写法

# 数组定义
数组名=(值1 值2 ... 值n)
# 数组赋值 从0开始
数组名[索引]=值
# 获取元素
${数组名[下标]}
# 获取长度
${#数组名[*]}
${#数组名[@]}

运算符

sh
# 算数运算符
# 原生的bash不支持简单的数学运算。可以通过其他命令实现.expr
# 表达式和运算符之间要有空格
# 完整的表达式要被反引号包含。 `expr 2 + 2`
+ 加 -减 *乘 /除 %取余 =赋值 ++/-- 自增/自减

# 字符串运算符
= 检测两个字符串是否相等,相等返回 true
= 检测两个字符串是否不相等,不相等返回 true
-z 检测字符串长度是否为0, 为0返回 true
-n 检测字符串长度是否不为0, 不为0返回 true
$ 检测字符串是否为空, 不为空返回 true

#关系运算符
-eq 检测两个数是否相等,相等返回 true
-ne 检测两个数是否不相等, 不相等返回 true
-gt 检测左边的数是否大于右边的,如果是,则返回 true
-lt 检测左边的数是否小于右边的,如果是,则返回 true
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true
-le 检测左边的数是否小于等于右边的,如果是,则返回 true

# 布尔运算符
 取反运算
-o 或运算,有一个表达式为 true 则返回 true
-a 与运算,两个表达式都为 true 才返回 true

# 逻辑运算符
&& 逻辑的 AND
|| 逻辑的 OR

逻辑

sh
# if判断
If [ 条件1 ]
then
语句体
elif [条件2 ]
语句体
else
语句体
fi

# switch
casein
模式1)
语句体1
;;
模式2)
语句体2
;;
esac

# for循环
for 变量 in 范围
do
循环体
done

# while循环
while 条件
do
循环体
done

# 函数
函数名(){
函数体
}

# 有返回值示例
czbk(){
echo “接收到参数$1和$2
return $(($1+$2))
}
czbk 10 20
echo $?