admin管理员组

文章数量:1530842

文件管理
touch命令
用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件(新建文件)。
语法
touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][–help][–version][文件或目录…]
参数说明:
a 改变档案的读取时间记录。
m 改变档案的修改时间记录。
c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
f 不使用,是为了与其他 unix 系统的相容性而保留。
r 使用参考档的时间记录,与 --file 的效果一样。
d 设定时间与日期,可以使用各种不同的格式。
t 设定档案的时间记录,格式与 date 指令相同。
–no-create 不会建立新档案。
–help 列出指令格式。
–version 列出版本讯息。

使用指令"touch"修改文件的时间属性为当前系统时间,输入如下命令:
ls -l 可以显示档案的时间记录。

使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file",输入如下命令:
touch file #创建一个名为“file”的新的空白文件

touch stu_102999_{1…5}_finished.txt #批量创建文件

rm stu_102999_{1…5}_finished.txt #批量删除该创建的目录
或者rm -f stu*

locate命令
locate(locate) 命令用来查找文件或目录。
Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。一般情况我们只需要输入 locate your_file_name 即可查找指定文件。
locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息,Linux系统自动创建这个数据库,并且每天自动更新一次;因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。整个locate工作其实是由四部分组成的:

/usr/bin/updatedb 主要用来更新数据库,通过crontab自动完成的
/usr/bin/locate 查询文件位置
/etc/updatedb.conf updatedb的配置文件
/var/lib/mlocate/mlocate.db 存放文件信息的文件

locate [-d ][–help][–version][范本样式…]
-d或–database= 配置locate指令使用的数据库。locate指令预设的数据库位于/var/lib/slocate目录里,文档名为slocate.db,您可使用 这个参数另行指定。
–help  在线帮助。
–version  显示版本信息。

updatedb的配置文件/etc/updatedb.conf

第一行PRUNE_BIND_MOUNTS="yes"的意思是:是否进行限制搜索。
第二行是排除检索的文件系统类型,即列出的文件系统类型不进行检索。
第三行表示对哪些后缀的文件排除检索,也就是列在这里面的后缀的文件跳过不进行检索。不同后缀之间用空格隔开。
第四行是排除检索的路径,即列出的路径下的文件和子文件夹均跳过不进行检索。updatedb之后使用locate仍然找不到想要文件,可以检查挂载的目录是否被忽略了

#locate
-i //查找文件的时候不区分大小写 ,比如:locate –i passwd
-n //只显示查找结果的前N行,比如:locate -n 5 passwd

locate test.txt

find命令
Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find path -option [ -print ] [ -exec -ok command ] {} ;
参数说明 :
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。

-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-pid n : process id 是 n 的文件
-size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。

你可以使用 ( ) 将运算式分隔,并使用下列运算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2

查找目录下的所有文件中是否含有某个字符串
find .|xargs grep -ri “IBM”

查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
find .|xargs grep -ri “IBM” -l

find [PATH] [option] [action]
find [指定查找目录] [查找规则] [查找完后执行的action]

这里要注意的是目录之间要用空格分开

与时间有关的参数:

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件;
-mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;
-mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;
-newer file : 列出比file还要新的文件名

与用户或用户组名有关的参数:

-user name : 列出文件所有者为name的文件
-group name : 列出文件所属用户组为name的文件
-uid n : 列出文件所有者为用户ID为n的文件
-gid n : 列出文件所属用户组为用户组ID为n的文件

与文件权限及名称有关的参数:

-name filename :找出文件名为filename的文件
-size [±]SIZE :找出比SIZE还要大(+)或小(-)的文件
-tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列, FIFO管道文件
f: 一般文件
l: 符号连结,连接文件
s: socket

-perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;
-perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示
-perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示

常用样例:
find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte

find /home/ljianhui -user ljianhui # 在目录/home/ljianhui中找出所有者为ljianhui的文件

查找文件名为test.txt的文件所在的路径
find / -name test.txt 2>/dev/null

(find -name test.txt 2>/dev/null同locate test.txt)

在当前目录下查找temp2文件夹的路径
find -name temp2 2>/dev/null

find /etc -name test.txt:表示在etc目录中查询test.txt这个文件。

这里再说明一下“/”这个函数符号的含 义:
如果输入“find /”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件;
而如果输入“find /etc”就是只在etc目录下查找文件。

find template -name ggprs_iot_cngo.dcd: 在当前目录的template目录下查找ggprs_iot_cngo.dcd文件的位置

find ./ -name “test” | xargs ls -lrt #在每个目录下找出你需要的文件

?表示 通配任意的单个字符
*表示 通配任意的字符
[] 表示 通配括号里面的任意一个字符

1、根据文件名搜索
列出当前目录及子目录下所有文件和文件夹:find

在当前目录下查找以.py结尾的文件名:find . -name “.py"
在当前目录下查找以.py结尾的文件名 ,但忽略大小写:find . -iname "
.PY”

当前目录及子目录下查找所有以.py和.sh结尾的文件:
find . -name “.py" -o -name ".sh”

找出当前目录下不是以.sh结尾的文件
find . ! -name “*.sh”

2、根据文件类型进行搜索
(d 目录 c 字符设备 b 块设备 f 普通文件 l 符号连接 s 套接字 p Fifo )
find . -type d

find . -type f | wc -l:查询出在一个文件夹下有多少个文件

3、根据时间搜索
在当前目录下查找今天之内有改动的文件
find ./test -mtime 0
搜索最近七天内被访问过的所有文件
find . -type f -atime –7

搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7

搜索超过七天内被访问过的所有文件
find . -type f -atime +7

搜索访问时间超过10分钟的所有文件
find . -type f -amin +10

找出比file.log修改时间更长的所有文件
find . -type f -newer file.log

查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

find /var/log -type f -mtime +7 -ok rm {} ;

find删除指定时间之前的文件:
find 后面紧跟的是要查找的目录,. 表示当前目录
-type f:指定查找对象为文件
-name *.log:指定查找对象名称以.log结尾
-mtime +180: 查找180天以前的老文件
-exec rm {} ; :执行删除命令,这句长得很奇怪,后面有个 {} ; 是必须的,也可以执行其他指令,比如ls, rm -i之类的;
find . -type f -name *.log -mtime +180 -exec rm {} ;
下面指令显示查找到文件的详细信息
find . -type f -mtime -180 -exec ls -l {} ; | more #后面用管道,实现分页显示

查看2016-11-03日的数据
find . -newermt ‘2016-11-03’ ! -newermt ‘2016-11-04’ -exec ls -l {} ;
find . -type f -newermt ‘2018-12-27 09:00:00’ ! -newermt ‘2018-12-27 14:00:00’ -exec ls -l {} ;

find . -type f -newermt ‘2019-01-04 14:00:00’ ! -newermt ‘2019-01-07 00:00:00’ -exec grep -H ‘NextCleanTimePayment’ {} ; > qcl34.txt
find . -type f -newermt ‘2019-1-4 14:00:00’ ! -newermt ‘2019-1-7 00:00:00’ -exec grep -H ‘NextCleanTimePayment’ {} ; > qcl3.txt

例如查找2018-08-082018-09-01号之间的文件,使用如下命令即可:
find /log/ -type f -name ‘production.log_2018*’ -newermt ‘2018-08-08 00:00:00’ ! -newermt ‘2018-09-01 00:00:00’;

linux中find查找指定时间段的文件并grep查找内容:
find . -type f -newermt ‘2018-12-27 09:00:00’ ! -newermt ‘2018-12-27 14:00:00’ -exec grep 15270857874 {} ; > tmp.txt
(这样没有显示在哪个文件下)

find . -type f -newermt ‘2018-12-27 14:00:00’ ! -newermt ‘2018-12-27 17:00:00’ -exec grep -H ‘15270857874’ {} ; >qcl3.txt
(加上H才会显示文件名)

查找9点到11点生成的文件,不包括9和11,即查找10点生成的文件
先touch 2个时间段的时间标记
touch -t 08160900 starttime
touch -t 08161100 endtime
然后
find ./20120816bak -type f -newer starttime -a ! -newer endtime -exec ls -l {} ;

find . -perm 0755 # 查找当前目录中文件权限的0755的文件

查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

find . -type f -perm 644 -exec ls -l {} ;

为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:

find / -type f -size 0 -exec ls -l {} ;

与管道连用 | xargs;
-exec是执行的意思,{}是find的搜寻结果,也是前面给ls -l等命令的参数;
; 是命令终结符,用反斜杠转义,不让shell去解释,因为这个分号是给-exec用的;

which命令
Linux which命令用于查找文件。(redhat里面可以用where)
which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

which [文件…]

-n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w  指定输出时栏位的宽度。
-V  显示版本信息。

使用指令"which"查看指令"bash"的绝对路径,输入如下命令:
$ which bash

上面的指令执行后,输出信息如下所示:
/bin/bash #bash可执行程序的绝对路径

whereis命令
Linux whereis命令用于查找文件。
该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。

-b  只查找二进制文件。
-B<目录>  只在设置的目录下查找二进制文件。
-f  不显示文件名前的路径名称。
-m  只查找说明文件。
-M<目录>  只在设置的目录下查找说明文件。
-s  只查找原始代码文件。
-S<目录>  只在设置的目录下查找原始代码文件。
-u  查找不包含指定类型的文件。

使用指令"whereis"查看指令"bash"的位置,输入如下命令:
$ whereis bash

(where好像只有redhat有)

使用指令"whereis"查看指令"bash"的位置,输入如下命令:
$ whereis bash
bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz
注意:以上输出信息从左至右分别为查询的程序名、bash路径、bash的man 手册页路径。

如果用户需要单独查询二进制文件或帮助文件,可使用如下命令:
$ whereis -b bash #显示bash 命令的二进制程序
bash: /bin/bash /etc/bash.bashrc /usr/share/bash # bash命令的二进制程序的地址
$ whereis -m bash #显示bash 命令的帮助文件
bash: /usr/share/man/man1/bash.1.gz #bash命令的帮助文件地址

cp命令
cp命令主要用于复制文件或目录。
cp [options] source dest
或者
cp [options] source… directory

-a :选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-p :除复制文件的内容外,还把修改时间和访问权限也复制到新文件中,与-a相似,常用于备份
-i :若目标文件已经存在时,在覆盖时会先询问操作的进行
-r :递归持续复制,用于目录的复制行为
-u :目标文件与源文件有差异时才会复制
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。(与i相反)
-l:不复制文件,只是生成链接文件。

使用指令"cp"将当前目录"test/“下的所有文件复制到新目录"newtest"下,输入如下命令:cp –r test/ newtest
用户使用该指令复制目录时,必须使用参数”-r"或者"-R"。

常用样例:
cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中
cp test1.dcd test.dcd_20181216 #备份之前的DCD模板
cp -prf mdb1 mdb_20181216 #整个mdb1目录带上时间戳备份
cp test1 …/ #把文件复制到上一层的目录
cp test1 bak/ #把文件复制到同一个文件下的目录

mv命令
mv /dir/file1 /dir2/file1
两个参数,第一个是源文件,第二个是目的地,如果第二个参数文件名不一样,则会重命名。当两个参数不带目录,只有文件名时,那就是重命名了。这是单个文件的重命名。

该命令用于移动文件、目录或更名,move之意,它的常用参数如下:
-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件已经存在,就会询问是否覆盖 (跟f相反)
-u :若目标文件已经存在,且比目标文件新,才会更新
注:该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”。

常用样例:
mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中
mv file1 file2 # 把文件file1重命名为file2
mv dir1 dir2 #目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名;
将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs:
mv info/ logs

再如将/usr/student下的所有文件和目录移到当前目录下,命令行为:
$ mv /usr/student/* .

rm命令
该命令用于删除文件或目录,remove之间,它的常用参数如下:
-f :强制删除,就是force的意思,忽略不存在的文件,不会出现警告消息
-i :互动模式,在删除前会询问用户是否操作
-r :递归删除,最常用于目录删除,它是一个非常危险的参数

常用样例:
rm -i file # 删除文件file,在删除之前会询问是否进行该操作
rm -rf dir # 强制删除目录dir中的所有文件

rmdir +文件夹名:删除文件夹,文件夹为空的情况;
rm + 文件名:删除文件,不能删除文件夹;
rm -r + 文件夹:强制删除文件夹
(删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r",)

参数-r表示递归,删除多个文件时要用到;.表示当前目录;表示任意文件;连起来就是删除当前目录下的所有文件。
rm -r ./
同 rm -r *

Linux 删除除了某个文件之外的所有文件

rename命令
批量重命名
方法1:(早期C语言版本,但是Ubuntu中采用的都是perl版本支持正则表达)
rename arg1 arg2 arg3
3个参数,不同于mv中的2个。
arg1:旧的字符串:
arg2:新的字符串
arg3:匹配要重命名的文件,可以使用3种通配符,*、?、[char],表示任意多个字符,?表示单个字符,[char]匹配char单个自定的精确字符,可以填写任意字符,foo[a]表示只匹配fooa开头的文件名,如果一个文件是foobcc.txt,是不会被匹配的。
比如把所有的表为cdb1_
修改为cdb_
,只需要rename ‘cdb1’ ‘cdb’ *

方法2:
rename [-v] [-n] [-f] perlexpr [filenames]
-v(verbose)打印被成功重命名的文件
-n(no-act)只打印结果在终端中而非实际执行
-f(force)覆盖已经存在的文件
perlexprPerl语言格式的正则表达式
files需要被替换的文件(比如*.c、*.h),如果没给出文件名,将从标准输入读

引号中是perl的正则表达式,用来匹配和替换,s代表substitution,替换的意思
比如将当前目录下所有*.nc文件中Sam3替换成Stm32,命令如下:
rename -n ‘s/Sam3/Stm32/’ *.nc  /确认需要重命名的文件/
rename -v ‘s/Sam3/Stm32/’ *.nc  /执行修改,并列出已重命名的文件/

rename ‘s/.bakKaTeX parse error: Expected 'EOF', got '#' at position 22: …bak #̲去掉文件后缀名(比如去掉.ba…/jelline/’ * #文件末尾加入字符串(比如jelline)

(1).jpg
(2).jpg
要批量改成
test_001.jpg
test_002.jpg
的方法如下:
1、去掉括号:
rename -n ‘s/[()]//g’ *.jpg
解释:
[()]代表匹配[]中的内容
//两个斜杠之间是空代表替换为空的内容,相当于删除
g代表全部匹配,不加g的话默认只会匹配一个括号

2、继续重命名为想要的格式:
rename -n ‘s/^/test_/’ *.jpg
解释:
s-替换
^-在文件名称开头加字符
test_-将名称前面添加上test_

cat命令
cat 命令用于连接文件并打印到标准输出设备上。
查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。
语法格式
cat [-AbeEnstTuv] [–help] [–version] fileName
参数说明:
-n 或 --number:由 1 开始对所有输出的行数编号。
-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。
-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。
-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。
-E 或 --show-ends : 在每行结束处显示 $。
-T 或 --show-tabs: 将 TAB 字符显示为 ^I。
-A, --show-all:等价于 -vET。
-e:等价于"-vE"选项;
-t:等价于"-vT"选项;

实例:
把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里:
cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:
cat -b textfile1 textfile2 >> textfile3

清空 /etc/test.txt 文档内容:
cat /dev/null > /etc/test.txt

cat text | less # 查看text文件中的内容

注:这条命令也可以使用less text来代替

cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:
cat /dev/fd0 > OUTFILE
相反的,如果想把 image file 写到软盘,输入:
cat IMG_FILE > /dev/fd0

  1. OUTFILE 指输出的镜像文件名。
  2. IMG_FILE 指镜像文件。
  3. 若从镜像文件写回 device 时,device 容量需与相当。
  4. 通常用制作开机磁片。

ln命令
为某一个文件在另外一个位置建立一个同步的链接。

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

ln [参数][源文件或目录][目标文件或目录]

Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名,而链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link),硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。

不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

软链接:
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接

硬链接:
1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建

必要参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程

选择参数:
-S "-S<字尾备份字符串> "或 “–suffix=<字尾备份字符串>”
-V “-V<备份方式>“或”–version-control=<备份方式>”
–help 显示帮助信息
–version 显示版本信息

给文件创建软链接,为test.txt文件创建软链接ts,如果test.txt丢失,ts将失效:

给文件创建硬链接,为test.txt文件创建软链接tsy,各项属性相同

文件查看
常用样例:
由第一行开始显示档案内容:cat file
一页一页的显示档案内容:more file
只看头几行:head file
只看尾几行:tail file
tail -n file #显示文件最后n行内容

more指令
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h。
语法
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames…]
参数:

-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数

实例
逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。
more -s testfile

从第 20 行开始显示 testfile 之文档内容。
more +20 testfile

常用操作命令
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more

less指令
less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

语法
less [参数] 文件
参数说明:

-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页

实例
1、查看文件
less log2013.log

2、ps查看进程信息并通过less分页显示
ps -ef |less

3、查看命令历史使用记录并通过less分页显示
history | less

4、浏览多个文件
less log2013.log log2014.log
说明:
输入 :n后,切换到 log2014.log
输入 :p 后,切换到log2013.log

附加备注
1.全屏导航
ctrl + F - 向前移动一屏
ctrl + B - 向后移动一屏
ctrl + D - 向前移动半屏
ctrl + U - 向后移动半屏

2.单行导航
j - 向前移动一行
k - 向后移动一行

3.其它导航
G - 移动到最后一行
g - 移动到第一行
q / ZZ - 退出 less 命令
4.其它有用的命令

v - 使用配置的编辑器编辑当前文件
h - 显示 less 的帮助文档
&pattern - 仅显示匹配模式的行,而不是整个文件

5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
ma - 使用 a 标记文本的当前位置
'a - 导航到标记 a 处

在 less 查看日志文件时,

  1. 可以按大写 F,就会有类似 tail -f 的效果,读取写入文件的最新内容, 按 ctrl+C 停止。
  2. 可以按 v 进入编辑模型, shift+ZZ 保存退出到 less 查看模式。
  3. 可以按 :e 查看下一个文件, 用 :n 和 :p 来回切换。

awk命令
截取文件内容
cat N_ADDVALUE_YYTXL |awk -F “;” ‘{print $14}’
-F “;” 表示以;作为分隔符
$14 表示取分隔符分隔的第十四个内容

1、
awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ‘’ 只能用单引号
每行按空格或TAB分割,输出文本中的1、4项
awk ‘{print $1,$4}’ log.txt
或者
awk ‘{printf “%-8s %-10s\n”,$1,$4}’ log.txt

2、
awk -F #-F相当于内置变量FS, 指定分割字符
awk -F, ‘{print $1,$2}’ log.txt
awk ‘BEGIN{FS=","} {print $1,$2}’ log.txt
awk -F ‘[ ,]’ ‘{print $1,$2,$5}’ log.txt

3、
awk -v # 设置变量
awk -va=1 ‘{print $1,$1+a}’ log.txt
awk -va=1 -vb=s ‘{print $1,$1+a,$1b}’ log.txt

chmod命令
Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。
chmod [-cfvR] [–help] [–version] mode file…
只能文件属主或特权用户才能使用该功能来改变文件存取模式。
mode : 权限设定字串,格式如下 :
[ugoa…][[±=][rwxX]…][,…]
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

  • 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
    r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
    其他参数说明:
    -c : 若该文件权限确实已经更改,才显示其更改动作
    -f : 若该文件权限无法被更改也不要显示错误讯息
    -v : 显示权限变更的详细资料
    -R : recursive,对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更),递归遍历子目录,把修改应到目录下所有文件和子目录
    –help : 显示辅助说明
    –version : 显示版本

一般用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限;每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。

还可设置第四位,它位于三位权限序列的前面,第四位数字取值是4,2,1,代表意思如下:
4,执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户。
2,执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户。
1,设置粘着位。

0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
0644->即用户具有读写权限,组用户和其它用户具有只读权限;

通常,一般赋予目录0755权限,文件0644权限。

ABCD
A- 0, 表示十进制
B-用户
C-组用户
D-其他用户

BCD中的数字意思分别如下
— -> 0 (no excute , no write ,no read)
–x -> 1 excute, (no write, no read)
-w- -> 2 write
-wx -> 3 write, excute
r-- -> 4 read
r-x -> 5 read, excute
rw- -> 6 read, write ,
rwx -> 7 read, write , excute

常用样例:
$ chmod u+x file     给file的属主增加执行权限
$ chmod 751 file     给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
$ chmod u=rwx,g=rx,o=x file 同上例
$ chmod =r file     为所有用户分配读权限
$ chmod 444 file      同上例
$ chmod a-wx,a+r file      同上例
$ chmod -R u+r directory   递归地给directory目录下所有文件和子目录的属主分配读的权限

磁盘管理
Linux磁盘管理常用三个命令为df、du和fdisk。

df:列出文件系统的整体磁盘使用量
du:检查磁盘空间使用量
fdisk:用于磁盘分区

pwd命令
查看当前目录

/表示根目录

cd命令
切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。

常用样例:
cd template/ # 切换到目录template 相对路径
cd ./path # 切换到当前目录下的path目录中,“.”表示当前目录
cd …/path # 切换到上层目录中的path目录中,“…”表示上一层目录
cd /path # 切换到绝对路径;跳到 /usr/bin/ :cd /usr/bi
cd # 切换到用户的HOME目录(也就是刚 login 时所在的目录)
cd ~ #同上,切换到home目录(同cd $HOME)
cd …/… #切换到上上两层
切换目录可按键Tab,列出联想

. 代表当前目录
/ 代表根目录
~ 代表home/xxx ,用户的home目录或者root的/root目录

绝对路径永远都是相对于根文件夹的。它们的标志就是第一个字符永远都是“/”。
相对路径永远都是相对于我们所处的文件夹位置。它们的第一个字符没有“/”。

ls命令
Linux ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
ls [-alrtAFR] [name…]
-l :除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
-A :同 -a ,但不列出 “.” (目前目录) 及 “…” (父目录)
-t : 按时间进行文件的排序
-R :–recursive 连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
-r:–reverse 逆序排列,将文件以相反次序显示(原定依英文字母次序)
-d :仅列出目录本身,而不是列出目录的文件数据
-h :将文件容量以较易读的方式(GB,kB等)列出来
-F : 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/”

注:这些参数也可以组合使用:
ls / #列出根目录()下的所有目录:
ls -l #以长数据串的形式列出当前目录下的数据文件和目录
ls -lR #以长数据串的形式列出当前目录下的所有文件
ls -ltr s* #列出目前工作目录下所有名称是 s 开头的文件,越新的排越后面
ls -AF #列出目前工作目录下所有文件及目录;目录于名称后加 “/”, 可执行档于名称后加 “*”

查看当前目录下的文件数量(不包含子目录中的文件)
ls -l|grep “^-”| wc -l

查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录

ls -lR|grep “^-”| wc -l

查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R

ls -l|grep “^d”| wc -l

查询当前路径下的指定前缀名的目录下的所有文件数量

例如:统计所有以“20161124”开头的目录下的全部文件数量

ls -lR 20161124*/|grep “^-”| wc -l

对每个命令参数做一下说明备注:
ls -l
该命令表示以长列表输出指定目录下的信息(未指定则表示当前目录),R代表子目录中的“文件”,这个“文件”指的是目录、链接、设备文件等的总称
grep "d"表示目录,"-"表示文件
wc -l
表示统计输出信息的行数,因为经过前面的过滤已经只剩下普通文件,一个目录或文件对应一行,所以统计的信息的行数也就是目录或文件的个数。

mkdir命令
创建目录
mkdir [-p] dirName

参数说明:
-p 确保目录名称存在,不存在的就创建一个parent。
mkdir -p hh1/hh2/hh3 能够递归创建目录

创建文件夹

rmdir命令
删除空的目录
rmdir [-p] dirName
-p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。

rmdir -p hh1/hh2/hh3 能够递归删除目录

du命令
Linux du命令用于显示目录或文件的大小。du会显示指定的目录或文件所占用的磁盘空间。常用参数:
  -a或-all 为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。
  -b或-bytes 显示目录或文件大小时,以byte为单位。
  -c或–total 除了显示目录或文件的大小外,同时也显示所有目录或文件的总和。
  -D或–dereference-args 显示指定符号连接的源文件大小。
  -h或–human-readable 以K,M,G为单位,提高信息的可读性。
  -k或–kilobytes 以1024 bytes为单位。
  -m或–megabytes 以1MB为单位。
  -s或–summarize 仅显示总计,即当前目录的大小。
-S或–separate-dirs 显示每个目录的大小时,并不含其子目录的大小。

du -h * 同 du -sh *
常用样例:
du -sh * |grep G #查看哪些文件大于1G存储空间

用ls和du显示的文件大小为何有差别
du == disk usage (磁盘使用量,占用的磁盘空间)
ls == apparent sizes(文件长度,file数据结构中定义的文件长度字段)
一个文件占用的磁盘空间和一个文件的大小是两码事情。占用空间取决于文件系统的块(block)的大小,Linux一般默认是4k(4096) ,因此,一个大小为1个字节的文件,最小也要占用4k,如果你创建文件系统的时候制定块大小是16K,那么即便一个文件只有1个字节,占用空间也是16K。
通常情况下,ls 显示的文件大小比du显示的磁盘占用空间小,比如文件系统的block是4K,一个13K的文件占用的空间是 13k/4k = 3.25 个block,一个block只能被一个文件占用,因此实际占用空间就是4个block,就是16K。
经常发现rm删除某个文件后,存储并没有被释放
rm日志文件,但日志文件一直被服务A的进程打开了, rm 后空间并没有释放。rm 其实是删除该文件名到文件真正保存到磁盘位置的链接, 此时该文件句柄还被服务A打开, 因此对应的数据并没有被回收, 其实可以理解为 GC 里面的引用计数, rm 只是减少了引用计数, 并没有真正的进行释放内存, 当引用计数为0的时候, OS 内核才会释放空间, 供其他进程使用。所以当A进程停止(文件句柄的引用计数会变为0)或者重启后, 占用的存储空间才被释放。 (lsof | grep deleted:查找所有被删除的但是文件句柄没有释放的文件和相应的进程,然后再kill掉进程或者重启进程即可)。

df命令
检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
-a, --all 包含所有的具有 0 Blocks 的文件系统
–block-size={SIZE} 使用 {SIZE} 大小的 Blocks
-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的…)
-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
-i, --inodes 列出 inode 资讯,不列出已使用 block
-k, --kilobytes 就像是 --block-size=1024
-l, --local 限制列出的文件结构
-m, --megabytes 就像 --block-size=1048576
–no-sync 取得资讯前不 sync (预设值)
-P, --portability 使用 POSIX 输出格式
–sync 在取得资讯前 sync
-t, --type=TYPE 限制列出文件系统的 TYPE
-T, --print-type 显示文件系统的形式
-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
-v (忽略)
–help 显示这个帮手并且离开
–version 输出版本资讯并且离开

第一列指定文件系统的名称;
第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存;
用和可用列正在使用中,分别指定的内存量;
使用列指定使用的内存的百分比;
最后一栏"安装在"指定的文件系统的挂载点。

常用样例:
df -lh

-h可以看到输出显示的数字形式的’G’(千兆字节),“M”(兆字节)和"K"(千字节)。
请注意,第二列的名称也发生了变化,为了使显示可读的"大小"。

df file 也可以显示磁盘使用的文件系统信息:

df -lh –total //显示所有信息,输出的末尾,包含一个额外的行,显示总的每一列。

du(disk usage)是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。

df(disk free)通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉已经删除的文件, df记录的是通过文件系统获取到的文件的大小,df比du强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。当文件系统也确定删除了该文件后,这时候du与df就一致了。

du和df不一致情况原因:
常见的df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统 目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。

实际上即使你/home什么都没有,df命令依然会显示占用了一部分空间的,文件系统的元数据占了部分空间。

df和du统计的数据是不同的:
打个比方,文件是需要放到文件柜里的,就算只有一个文件,也要占用一个文件柜。文件柜占用的空间比文件要大。
df就是统计使用了多少个文件柜。
du则统计实际有多少个文件。
这样下来,df算的就大,du就小。
简单地说,df命令是根据该卷的inode使用情况进行统计的,而du则是累加所有文件的字节数。一个文件就算只有1字节,也要占用一个inode。

文档编辑
vim命令

xshell突然不能输入,一般是按到了ctrl+S导致关闭流输入,
解决办法:ctrl+q退出即可。

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。

第一步:vi filename //(filename) 可以是以前就有的名字,也可以是以前没有,当前相当于创建了新的文件,进入后处于命令模式;
第二步:输入 i 进入插入编辑模式,如果按a是追加编辑模式。
第三步:输入文字,编辑完成后,键盘敲 esc键,又变成命令模式
第四步:命令中的冒号也要一起输入
(1)如果要保存并退出输入:wq
(2)不保存退出输入:q!

命令模式一般用于浏览定位跳转
输入模式就是正常编辑
末行模式用于保存退出,设置编码、主题配色、查找替换正则等等

命令–>输入:
i: 在当前光标所在字符的前面,转为输入模式;
a: 在当前光标所在字符的后面,转为输入模式;
o: 在当前光标所在行的下方,新建一行,并转为输入模式;
I:在当前光标所在行的行首,转换为输入模式
A:在当前光标所在行的行尾,转换为输入模式
O:在当前光标所在行的上方,新建一行,并转为输入模式;
新增 (append)
a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。
A:从光标所在列最後面的地方开始新增资料。

插入 (insert)
i:从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。
I :从光标所在列的第一个非空白字元前面开始插入资料。

开始 (open)
o :在光标所在列下新增一列并进入输入模式。
O: 在光标所在列上方新增一列并进入输入模式。
输入–>命令:
ESC
命令–>末行:
:
末行–>编辑:
ESC, ESC
注:输入模式和末行模式之间不能直接切换

常用样例:
退出保存
1、末行模式关闭文件
:q 退出
:wq 保存并退出(也可以用两个大写的ZZ)
:q! 不保存并退出,强制退出(快捷键CTRL+Z也可以强制退出;)
:w 保存
:w! 强行保存
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。

查找
/word n 查找下一个,N 查找上一个
?word n 查找上一个,N 查找下一个

/word\c 大小写不敏感查找
?word\C 大小写敏感查找

:/word 输入冒号和斜杠,再输入要查找的字符串,回车,可高亮显示所有该字段;

查找并统计

  1. 使用vim统计
    用vim打开目标文件,在命令模式下,输入下列指令即可
    :%s/string/&/gn
    :%s/string//gn

或者

  1. 使用grep:
    grep -o objStr filename|wc -l

查找并替换
😒(substitute) 命令用来查找和替换字符串, 语法如下:
:{作用范围}s/{目标}/{替换}/{替换标志}

在末行模式下使用s命令
:n1,n2s/word1/word2/g

解析:
在n1和n2行之间寻找word1字符串,并全部替换成word2;

作用范围分为当前行、全文等等:
1, : 表 示 全 文 , :表示全文, :,表示最后一行
%:表示全文
.号表示当前行,即光标所在行

示例:
全文,将第一行到最后一行( ) 出 现 的 a a a 全 部 替 换 为 b b b : : 1 , )出现的aaa全部替换为bbb: :1, )aaabbb::1,s/aaa/bbb/g (g表示global)
:1,$s/aaa/bbb/gc(c会提示确认替换,confirm)
:%s/aaa/bbb/g

当前行,将第一行到当前行(.)第一次出现的aaa替换为bbb
:1,.s/aaa/bbb

5-12行:
:5,12s/aaa/bbb/g

当前行.与接下来两行+2:
:.,+2s/aaa/bbb/g

😒/p1/p2/g: 将当前行中所有p1均用p2替代
:g/p1/s//p2/g: 将文件中所有p1均用p2替换

光标移动
在vi的时候,如果想看下一页,就直接按住 ↓ 这个箭头一直翻,现在觉得有些麻烦,
可用下上,下翻页的快捷方式:

h 光标向左移动
j 光标向下移动
k 光标向上移动
l 光标向右移动
(下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键)
ctrl+f 向下翻一页 front
ctrl+b向上翻一页 back
ctrl+d向下翻半页 down
ctrl+u向上翻半页 up
nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

大写G末尾,小写gg开头

0或HOME到开头,$或END到末尾;要在:模式下,不然只是到该行的行首或者行尾

n n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行,gg相当于1G(可配合 :set nu);
n n 为数字。光标向下移动 n 行(常用)

撤销
u 撤销上一步操作
ctrl+r  恢复上一步操作
. 小数点代表重复前一个动作
J 将光标所在行与下一行的数据结合成同一行

高级话题
1、显示或取消显示行号
:set nu
:set nonu
nu = number
2、显示忽略或区分字符大小写
:set ic
:set noic
(ic = ignorecase)

在查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找。例如:
/foo\c
将会查找所有的"foo",“FOO”,"Foo"等字符串。

删除/剪切
x 在一行字当中,向后删除一个字符 (相当于 [del] 按键);
X 在一行字当中,为向前删除一个字符(相当于 [backspace] 亦即是退格键)
nx n 为数字,连续向后删除 n 个字符;连续删除 10 个字符, 10x;
dw 删除单词
ndw或ndW: 删除光标处开始及其后的n-1个字
dd 删除整行,也是剪切
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d0 删除游标所在处,到该行的最前面一个字符
d$ 删除游标所在处,到该行的最后一个字符

全部删除
方法1: 按ggdG
方法2: 按dG
方法3: :%d
方法4:先用G 转到文件尾,然后使用下面命令:
:1, .d
在vi中," . "表示当前行,“1,.”表示从第一行到当前行,“d ” 表示删除。
如果只是想删除某一行,那么把光标指到该行,然后输入dd 即可。

复制
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
全选复制
全选(高亮显示):按esc后,然后ggvG或者ggVG
全部复制:按esc后,然后ggyG (之后按p可以粘贴, 粘贴(paste/put) 是 p)

解析:
gg:是让光标移到首行
v : 是进入Visual(可视)模式 ,块模式
G :光标移到最后一行
10G:光标转到第10行

选中内容以后就可以其他的操作了,比如:
d 删除选中内容
y 复制选中内容到0号寄存器 , 也就是系统的剪贴板

多行的复制->粘贴
1.进入你的文件,(处于命令模式,而不是编辑模式)
2.将你的光标移到要复制的开头(用方向键)
3,按下v切换到可视模式了,按方向键,直到选中你想要的内容
4.按y,复制完成。
5.切换到想要粘贴的位置,按p,完成

复制,黏贴
(1) 选定文本块,使用v进入可视模式;移动光标键选定内容
(2) 复制选定块到缓冲区,用y;复制整行,用yy
(3) 剪切选定块到缓冲区,用d;剪切整行用dd
(4) 粘贴缓冲区中的内容,用p

趣解:
移到单词尾(end) 是 e;向后(backward)移则是 b;下一个(next) 则是 n。删除(delete) 是 d,插入(insert) 是 i,粘贴(paste/put) 是 p。
(其实 vim 用的是 unix 的惯用语 put,意思是往里放。Windows 用的术语是 paste,好在都是 p 开头)
而复制(copy) 和 修改(change) 都是 c 开头,这就要有点取舍。vim 是用 c 表示 change 的。用 y 表示 yank(拉)来做为复制。拉这个动作正好粘贴用的那个 put (有点推的意思)相反,所以就这么拿来用了。
其实还有不少这样单词重了的情况,vim 都巧妙的换了个术语把这种情况避开了,比如 diff 里的 get(获得),后来 vim 用的是 obtain(也是获得)。

批量添加注释

方法一 :块选择模式
批量注释:
1、Ctrl + v 进入块选择模式;
2、按键移动光标选中你要注释的行;
3、按大写的 I 进入行首插入模式输入注释符号如 // 或 #
4、输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。

取消注释:
1、Ctrl + v 进入块选择模式;
2、按键选中你要删除的行首的注释符号,注意 // 要选中两个;
3、选好之后按 d 即可删除注释,ESC 保存退出。

方法二: 替换命令
批量注释:
1、使用下面命令在指定的行首添加注释。
使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。
:n1,n2s/^/注释符号/g

取消注释:
使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)。
:n1,n2s/^注释符号//g

例子:
1、在 10 - 20 行添加 // 注释
:10,20s#^#//#g
2、在 10 - 20 行删除 // 注释
:10,20s#^//##g

1、在 10 - 20 行添加 # 注释
:10,20s/^/#/g
2、在 10 - 20 行删除 # 注释
:10,20s/#//g

vi打开大文件
vi编辑器打开大文件报错0602-101 Out of memory saving lines for undo
vi文件报错 ex:0602-101 内存不足 正在为 undo 保存行
vi -y 9999999 filename
(其中-y number为指定vi编辑窗口的行号,9999999>1,048,560(默认行数))

wc命令
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
命令参数:
-c 统计字节数bytes。
-l 统计行数lines。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数words。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。

在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:
wc file

行数 单词数 字节数 文件名

wc file1 file2 file3 //同时统计多个文件的信息

wc -l * //统计行数(常用)

grep命令
grep命令用于查找文件里符合条件的字符串。该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为
grep [-acinv] [–color=auto] ‘查找字符串’ filename
它的常用参数如下:
-a :将binary文件以text文件的方式查找数据
-c :计算找到‘查找字符串’的次数
-i :忽略大小写的区别,即把大小写视为相同
-v :反向选择,即显示出没有‘查找字符串’内容的那一行
-r: 是递归查找
-n:是显示行号
-R:查找所有文件
-o :只输出匹配的选项,包含子目录
-L:列出文件内容不符合指定的范本样式的文件名称

-l : 列出文件内容符合指定的范本样式的文件名称。(使用 -l 选项可以只显示文件名)
-H:在每一个匹配行之前加上文件名一起输出(针对于查找单个文件),当查找多个文件时默认就会输出文件名
-h:禁止输出上的文件名的前缀。无论查找几个文件都不会在匹配内容前输出文件名

find . -type f -newermt ‘2018-12-27 14:00:00’ ! -newermt ‘2018-12-27 17:00:00’ -exec grep -l 15270857874 {} ;

(查找某个时间段并包含某个字段的文件,打印出文件名)
另外还有一些有意思的命令行参数:
< 和 > 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep ‘<man’ * 匹配‘manic’和‘man’,但不是‘Batman’,
grep ‘<man>’ 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。

常用样例:
1、在当前目录下找出所有包含“Abm”字符串的文件
grep -nr “Abm” * (*表示当前目录所有文件,也可以是某个文件名)

2、在当前目录中,查找后缀有 file 字样的文件内容包含 test 字符串的文件,并把查找出来的内容写到一个newfile文件里
grep test *file > newfile

3、把ls -l的输出中包含字母file(不区分大小写)的内容输出

4、反向查找,显示当前目录文件和文件夹 不包含 test和lost+found
ls -l | grep -vi test | grep -v lost+found

5、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
grep -r update /etc/acpi

6、另外,对比

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

1、或操作
grep -E ‘123|abc’ filename // 找出文件(filename)中包含123或者包含abc的行
egrep ‘123|abc’ filename // 用egrep同样可以实现
awk ‘/123|abc/’ filename // awk 的实现方式

2、与操作
grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行。

3、其他操作
grep -i pattern files //不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files //只列出匹配的文件名,
grep -L pattern files //列出不匹配的文件名,
grep -w pattern files //只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files //匹配的上下文分别显示[number]行

按照时间段搜索:
grep -E ‘2018-11-02/23:5[1-6]’ filename

find+grep查找文件,并显示文件名:
find . -name “.c" -exec grep array {} -H ;
同时可以加-i,表示忽略大小写:
find . -name "
.c” -exec grep -i array {} -H ;

sed命令
sed命令是利用script来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
sed命令行格式为: sed [-nefri] ‘command’ 输入文本

常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。

常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
例如 1,20s/old/new/g 就是啦!

常用样例:
截取文件的1000到2000行
sed -n ‘1000,2000p’ rat-gsm-sort

linux查看某个时间段的日志
sed -n ‘/起始时间/,/结束时间/p’ 日志文件
sed -n ‘/2018-12-27 11:17:20/,/2018-12-27 16:17:36/p’ test.log

grep 查询指定时间段内的日志
grep 查询的内容 sed -n ‘/开始时间/,/结束时间/’ 文件名

grep 字段 sed -n ‘/2018-09-06 16:00:00/,/2018-09-06 17:00:00/p’ 2018-09-06.log

sed -n ‘/2017:15:25:00/,/2013:17:30:00/p’ access.log >25-30.log
grep “2017:15:2[5-9]” access.log >25-30.log
标红的地方是需要根据日志的时间来修改的

sed -n ‘/2010-11-17 09:25:55/,/2010-11-17 09:25:55/p’ logfile
sed -n ‘/2010-11-17 09:[0-9][0-9]:[0-9][0-9]/,/2010-11-17 16:[0-9][0-9]:[0-9][0-9]/p’ logfile

col命令
col命令用于过滤控制字符。
在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">“和”>>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。
col [-bfx][-l<缓冲区列数>]
-b 过滤掉所有的控制字符,包括RLF和HRLF。
-f 滤除RLF字符,但允许将HRLF字符呈现出来。
-x 以多个空格字符来表示跳格字符。
-l<缓冲区列数> 预设的内存缓冲区有128列,您可以自行指定缓冲区的大小。

在Linux下使用vi来查看一些Windows下创建的文本文件时,有时会发现在每一行尾部有^M字符,是因为在Windows下换行使用CRLF两个字符来表示,其中CR为回车(ASCII=0x0D),LF为换行(ASCII=0x0A),而在Linux下使用LF一个字符来表示。
windows文件转为linux 去掉^M
:%! col -bx
(-b:不输出回车符,即删除回车符。比如由DOS或windows下的文本以一个回车和换行结束每一行;而unix和linux则仅以换行作为结束,unix称之为“新行字符”。将DOS文本拿到unix下,利用vi显示会有M(M即ctrl+M,表示回车)。通过-b选项可以去掉。
-x:将tab变为等效的space。如果是tab,在vi中显示^I)

在Windows上编写linux脚本后放在linux上一般无法直接执行。应为windows是用/r/n表示换行,而linux使用/n表示换行。所以在win上编写的shell脚本需要用dos2unix命令转换。
安装dos2unix
sudo apt install dos2unix -y

将filename.sh脚本转换linux格式脚本
dos2unix filename.sh

文件传输
ftp命令
ftp交互式文件传输程式
FTP是ARPANet的标准文件传输协议,该网络就是现今Internet的前身。
ftp [-dignv][主机名称或IP地址]
参数:
-d 详细显示指令执行过程,便于排错或分析程序执行的情形。
-i 关闭互动模式,不询问任何问题。
-g 关闭本地主机文件名称支持特殊字符的扩充特性。
-n 不使用自动登陆。
-v 显示指令执行过程。

常用样例:
ftp 10.10.12.146
然后输入用户名密码即可

例如使用ftp命令匿名登录ftp.kernel服务器,该服务是Linux 内核的官方服务器,可以使用如下命令:
ftp ftp.kernel #发起链接请求

cd dir 切换远程主机目录
lcd dir切换本机目录
put file 上传单个文件
mput *.txt 上传多个文件
get file 下载单个文件
mget *.txt 下载多个文件

sftp命令
sftp user@ip
sftp 是一个交互式文件传输程式。它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性
我们平时习惯了使用ftp来上传下载文件,尤其是很多Linux环境下,我们一般都会通过第三方的SSH工具连接到Linux,但是当我们需要传输文件到Linux服务器当中,很多人习惯用ftp来传输,其实Linux默认是不提供ftp的,需要你额外安装FTP服务器。而且ftp服务器端会占用一定的VPS服务器资源。其实更建议使用sftp代替ftp。
主要因为:
一、可以不用额外安装任何服务器端程序。
二、会更省系统资源。
三、SFTP使用加密传输认证信息和传输数据,相对来说会更安全。
四、也不需要单独配置,对新手来说比较简单(开启SSH默认就开启了SFTP)。

常用样例:
sftp xxx.xxx.xxx.xxx 登录root用户
sftp zygf@xxx.xxx.xxx.xxx 进行登录zygf用户然后输入密码

cd dir 切换远程主机目录
lcd dir切换本机目录
put file 上传单个文件
mput *.txt 上传多个文件
get file 下载单个文件
mget *.txt 下载多个文件

ls 查看当前目录下文件
help 查看sftp支持哪些命令
quit / bye / exit 退出sftp
pwd是看远端服务器的目录, 即sftp服务器默认的当前目录。 lpwd是看linux本地目录。
ls是看sftp服务器下当前目录下的东东, lls是看linux当前目录下的东东。
!command 这个是指在linux上执行command这个命令, 比如!ls是列举linux当前目录下的东东, !rm a.txt是删除linux当前目录下的a.txt文件。
这个命令非常非常有用, 因为在sftp> 后输入命令, 默认值针对sftp服务器的, 所以执行rm a.txt删除的是sftp服务器上的a.txt文件, 而非本地的linux上的a.txt文件。

sftp命令行登录过程
① sftp xxx.xxx.xxx.xxx 登录(默认root用户),若指定用户 sftp zygf@xxx.xxx.xxx.xxx 进行登录(zygf为用户名)
② 登录成功后,会提示输入 密码
③ 然后,可进入目录, ls 查看目录下内容
④ cd 切换目录,get 获取文件, put 上传文件
⑤ quit / bye / exit 退出sftp!

rz和sz命令
rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具。优点就是不用再开一个sftp工具登录上去上传下载文件。
所以要在Xshell连接属性中的设置上传协议为Zmodem和接受的文件路径等。

sz中的s意为send(发送),告诉客户端,我(服务器)要发送文件 send to cilent,就等同于客户端在下载。
rz中的r意为received(接收),告诉客户端,我(服务器)要接收文件 received by cilent,就等同于客户端在上传。
不论是send还是received,动作都是在服务器上发起的。

sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器
安装命令:
yum install lrzsz
或者sudo apt-get install lrzsz
或者sudo apt install lrzsz

从服务端发送文件到客户端:
sz filename

从客户端上传文件到服务端:
rz

sz用法:发送出去

下载一个文件:

sz filename

下载多个文件:

sz filename1 filename2

下载dir目录下的所有文件,不包含dir下的文件夹:

sz dir/*

rz用法:接收回来

直接键入rz命令即可

rz

直接拖动文件到 xshell, 或者 SecureCRT 窗口即可

输入rz回车后,会出现文件选择对话框,选择需要上传文件,一次可以指定多个文件,上传到服务器的路径为当前执行rz命令的目录。

在弹出的框中选择文件,上传文件的用户和组是当前登录的用户
SecureCRT设置默认路径:
Options -> Session Options -> Terminal -> Xmodem/Zmodem ->Directories

性能检测命令
在linux中查看系统资源占用的六个命令:top、free、uptime、 vmstat 、 iostat、sar;

uptime命令
uptime显示系统已经运行了多长时间,它依次显示下列信息:当前时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

load average是队列平均长度,在队列中等待执行的进程数量
该值越低,说明进程更有可能立即被CPU处理,相反越高,说明进程更有可能阻塞
该命令可以检查服务器负载是否高。

一般来说,当load avarage ❤️ 系统良好,大于5 则有严重的性能问题。注意,这个值还应当除以CPU数目。
如果load avarage=8 ,CPU=3,8/3=2.666,2.66这个值表示系统状态良好
大于5也不一定是严重性能问题,有可能是的确主机提供的服务超过了他能够提供的能力,需要扩容了。要具体看看。

top命令
top命令用于实时显示 process 的动态。使用权限:所有使用者。
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]

top命令参数解释:
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名程
n更新的次数,完成后将会退出 top
b 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内

显示进程信息

top

显示完整命令

top -c

以批处理模式显示程序信息

top -b

以累积模式显示程序信息

top -S

设置信息更新次数
top -n 2 //表示更新两次后终止更新显示

设置信息更新时间

top -d 3 //表示更新周期为3秒

显示指定的进程信息

top -p 139 //显示进程号为139的进程信息,CPU、内存占用率等

显示更新十次后退出
top -n 10

使用者将不能利用交谈式指令来对行程下命令
top -s

将更新显示二次的结果输入到名称为 top.log 的档案里
top -n 2 -b < top.log

显示CPU实际使用情况

第一行就是uptime命令的内容

第二行:进程信息
Tasks: 71 total 进程总数
2 running 正在运行的进程数
69 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数

第三行:CPU信息
Cpu(s): 4.8%us 用户空间占用CPU百分比
6.9%sy 内核空间占用CPU百分比
0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比
87.2%id 空闲CPU百分比
0.0%wa 等待输入输出的CPU时间百分比
1.1% hi
0.0% si

第四行:物理内存信息
Mem: 255102k total 物理内存总量
253572k used 使用的物理内存总量
1548k free 空闲内存总量
13576k buffers 用作内核缓存的内存量

第五行:交换区信息
Swap: 522104k total 交换区总量
9892k used 使用的交换区总量
512212k free 空闲交换区总量
34120k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

进程信息区:
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
PID 进程id
PPID 父进程id
RUSER Real user name
UID 进程所有者的用户id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
PR 优先级
NI nice值,负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
VIRT:进程使用的虚拟内存的总量,单位kb, VIRT=SWAP+RES
RES: 进程使用的未被换出的物理内存的大小,单位kb,亦称常驻内存,RES=CODE+DATA
SHR:共享内存大小,单位kb,即该进程和其他进程共享内存的数量
%MEM:进程使用的物理内存百分比
TIME+:进程使用的cpu时间总计,单位1/100s
COMMAND:命令名称/行
%CPU 上次更新到现在的CPU时间占用百分比
SWAP:进程使用的虚拟内存中,未被换出的大小(kb)
CODE:可执行代码占用的物理内存的大小
DATA: 可执行代码以外的部分(数据段+栈)占用的物理内存大小(kb)
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
STAT:进程的状态:D=不可中断的睡眠状态;R= 运行;S=睡眠;T=跟踪/停止;Z=僵尸进程;
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志,参考 sched.h
SIZE:进程占用的内存数量(代码+数据+堆栈)
RSS;进程使用的物理内存数量
Badness=oom_score(bandness)
Adj=oom_adjustment
输入完top命令后,可继续按下f键,选择需要添加的显示列
通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

如何结束进程
输入字母k(小写),然后再输入想要kill的PID
当然你也可直接运行命令,kill PID
可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。

free命令
free命令用于显示内存状态。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
free [-bkmotV][-s <间隔秒数>]

-b,-k,-m和-g分别按照bytes, kilobytes, megabytes, gigabytes显示结果。
-o  不显示缓冲区调节列。
-c {count}显示free输出的次数
-s<间隔秒数>  持续观察内存使用状况。
-l 区别显示low和high内存
-t  显示内存总和列。
-V  显示版本信息。
free //显示内存使用信息

free -t //以总和的形式查询内存的使用信息

free -s 10 //每10s 执行一次命令, 周期性查询内存使用信息

free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。

netstat命令
用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
利用netstat指令可让你得知整个Linux系统的网络情况。

常见参数
-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-i 或–interfaces 显示网络界面信息表单。
-l 仅列出有在 Listen (监听) 的服務状态
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
常用样例:
netstat –a //列出所有端口
netstat –at //列出所有 tcp 端口
netstat –au //列出所有 udp 端口
netstat -st 或 netstat –su //显示 TCP 或 UDP 端口的统计信息
netstat -nat |grep -i ‘26010’ //查看端口的连接
netstat -apu //显示UDP端口号的使用情况
netstat -i //显示网卡列表

ubuntu上mysql端口3306无法远程连接

使用netstat -an|grep 3306,输出:

说明3306只绑定了127.0.0.1
修改Mysql配置文件(注意路径,跟之前网上的很多版本位置都不一样), 将bind-address = 127.0.0.1注释掉 ;
vi /etc/mysql/mysql.conf.d/mysqldf

然后重启sql
/etc/init.d/mysql restart

在普通用户下使用命令mysql -uroot -p连接数据库,由于没有设置密码,所以在需要输入密码的时候,直接按了Enter键,从而导致了错误:ERROR 1698 (28000): Access denied for user ‘root’@‘localhost’
解决办法:在连接mysql数据库的时候,使用命令sudo mysql -uroot -p连接数据库,由于没有设置密码,所以在需要输入密码的时候,直接按Enter键。

注:
启动mysql:
方式一:sudo /etc/init.d/mysql start
方式二:sudo service mysql start

停止mysql:
方式一:sudo /etc/init.d/mysql stop
方式二:sudo service mysql stop

重启mysql:
方式一:sudo /etc/init.d/mysql restart
方式二:sudo service mysql restart

虚拟机NAT模式下 Host ‘192.168.x.1’ is not allowed to connect to this MySQL server 问题解决

连接的是192.168.39.138 :报的错误却是我NAT模式下,网卡的地址;其实很简单,在NAT模式下,在NAT的网络内,我们本机的IP地址 就是192.168.109.1;
为当前主机在NAT模式的ip添加权限,而不是本机的实际IP:
mysql> GRANT ALL PRIVILEGES ON . TO ‘root’@‘192.168.109.1’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

flush privileges;

iostat命令
iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

语法
iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -z ] [ device […] | ALL ] [ -p [ device [,…] | ALL ] ] [ interval [ count ] ]

入门使用
iostat -d -k 9
参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;9表示,数据显示每隔9秒刷新一次。
输出如下

输出信息的意义:
tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。“一次传输"意思是"一次I/O请求”。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
上面的例子中,我们可以看到磁盘sda以及它的各个分区的统计数据,当时统计的磁盘总TPS,下面是各个分区的TPS。(因为是瞬间值,所以总TPS并不严格等于各个分区TPS的总和)

指定监控的设备名称为sda,该命令的输出结果和上面命令完全相同。
iostat -d sda 9
默认监控所有的硬盘设备,现在指定只监控sda。

iostat还有一个比较常用的选项-x,该选项将用于显示和io相关的扩展数据。
iostat -d -x -k 1 10

输出信息的含义
rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);
wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
rsec/s:每秒读取的扇区数;
wsec/:每秒写入的扇区数。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均请求扇区的大小
avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了; 这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。
%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

Iostat -c还可以用来获取cpu部分状态值:
iostat -c 1 10

常用样例:
iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await) iostat -c 1 10
iostat -c 1 10 #查看cpu状态
iostat -x hda hdb 2 6 #每隔2秒显示一次hda,hdb两个设备的扩展统计信息,共输出6次.
iostat -p sda 2 6 #每隔2秒显示一次sda及上面所有分区的统计信息,共输出6次.

实例分析
ostat -d -k 1 |grep sda10 上面看到,磁盘每秒传输次数平均约400;每秒磁盘读取约5MB,写入约1MB。

iostat -d -x -k 1

可以看到磁盘的平均响应时间<5ms,磁盘使用率>80。磁盘响应正常,但是已经很繁忙了。

vmstat命令
vmstat(Virtual Memory Statistics 虚拟内存统计) 命令用来显示Linux系统虚拟内存状态,也可以报告关于进程、内存、I/O等系统整体运行状态。
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。
这个命令一个是Linux/Unix都支持,二是相比top,可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:vmstat 2 1;
2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,常用样例: vmstat 2
这表示vmstat每2秒采集数据,一直采集,直到结束程序,这里采集了5次数据就结束了程序。
vmstat –a //显示活跃和非活跃内存,显示增加了inact和active列,

vmstat -s 查看内存使用的详细信息
vmstat -d 查看磁盘的读/写
vmstat -p /dev/sda1 查看/dev/sda1磁盘的读/写

参数含义:
Procs(进程):
r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
b 等待IO的进程数量。
Memory(内存):
swpd 虚拟内存已使用的大小,如果大于0,表示机器物理内存不足了,如果不是程序内存泄露的原因,那么该升级内存了或者把耗内存的任务迁移到其他机器。
free 空闲物理内存的大小
buff 用作缓冲的内存大小。
cache用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
Swap:
si 每秒从交换区写到内存的大小,由磁盘调入内存。
so 每秒写入交换区的内存大小,由内存调入磁盘。
(内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。因为linux总是先把内存用光)

IO :
bi 每秒读取的块数
bo 每秒写入的块数
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
system(系统):
in 每秒中断数,包括时钟中断。
cs 每秒上下文切换数。
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
CPU(以百分比表示):
us 用户进程执行时间百分比(user time) us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
sy: 内核系统进程执行时间百分比(system time) sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
wa IO等待时间百分比 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
id 空闲时间百分比

sar命令
sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等;
-A:所有报告的总和
-b:显示I/O和传递速率的统计信息
-B:显示换页状态
-d:输出每一块磁盘的使用信息
-e:设置显示报告的结束时间
-f:从制定的文件读取报告
-i:设置状态信息刷新的间隔时间
-P:报告每个CPU的状态
-R:显示内存状态
–u:输出cpu使用情况和统计信息
–v:显示索引节点、文件和其他内核表的状态
-w:显示交换分区的状态
-x:显示给定进程的装
-r:报告内存利用率的统计信息
sar -u #统计CPU的使用情况,每间隔1秒钟统计一次总共统计三次:#sar -u 1 3

其它实用命令

ps命令
提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具
该命令用于显示当前时间点的进程 (process) 的状态。它的常用参数如下:
-A 显示所有进程(等价于-e)(utility)
-a 显示一个终端的所有进程,除了会话引线,不与terminal有关的所有进程
-x 显示没有控制终端的进程,同时显示各个命令的具体路径,一般与a参数一起使用。dx不可合用。(utility)
-u uid or username 选择有效的用户id或者是用户名,有效用户的相关进程
-l 长格式(有F,wchan,C ,PID等字段)
-N 忽略选择。
-d 显示所有进程,但省略所有的会话引线(utility)
-p pid 进程使用cpu的时间
-g gid or groupname 显示组的所有进程。
U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
-j 作业格式
-o 用户自定义格式。
v 以虚拟存储器格式显示
s 以信号格式显示
-m 显示所有的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
h 不显示第一行

其实我们只要记住ps一般使用的命令参数搭配即可,它们并不多,如下:
ps aux # 查看系统所有的进程数据
ps ax # 查看不与terminal有关的所有进程
ps -lA # 查看系统所有的进程数据
ps axjf # 查看连同一部分进程树状态

常用样例:
ps -u root //显示root进程用户信息

ps -ef //显示所有命令,连带命令行

ps -ef | grep odac //查看目前系统odac的进程

ps aux | sort -nk +4 | tail //显示内存占用前十的进程

ps -aux --sort -rss | head //列出进程拿物理内存占用排序

ps aux //查看占用内存和CPU,第六列( RSS)列即进程使用的物理内存。

ps aux --sort rss //内存增序
ps aux --sort -rss //内存减序
ps auxw --sort=%cpu // cpu增序
ps auxw --sort=-%cpu // cpu减序
ps -aux --sort -pcpu | less //CPU降序
ps -aux --sort -pmem | less //内存降序
ps -aux --sort -pcpu,+pmem | head -n 10 //管道显示前10个结果

最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。
ps aux | grep program_filter_word,ps -ef |grep tomcat

ps -ef | grep java | grep -v grep 显示出所有的java进程,去处掉当前的grep进程

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

Head标头说明
USER 用户名,进程拥有者
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process id)
SID 会话ID(Session id)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
TTY 与进程关联的终端(tty),终端的次要装置号码 (minor device number of tty)
START 进程启动时间和日期
TIME 进程使用的总cpu时间
COMMAND 正在执行的命令行命令
NI 优先级(Nice)
PRI 进程优先级编号(Priority)
WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
FLAGS 与进程相关的数字标识
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。
S 睡眠 Sleeping 静止状态,休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。不存在但暂时无法消除。
D 不可中断的静止 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
P 等待交换页
W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。
X 死掉的进程
< 高优先级进程 高优先序的进程
N 低优先级进程 低优先序的进程
L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)

  • 位于后台的进程组

killall命令
killall命令用于杀死指定名字的进程(kill processes by name)
杀掉所有java进程: killall -9 java
killall命令,可以直接使用进程的名字而不是进程标识号: killall -9 NAME

kill命令
kill命令用于删除执行中的程序或工作。
kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。
kill用法:
kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 … 或 kill -l [信号声明]

它的基本语法如下:
kill -signal PID
signal的常用参数如下:
注:最前面的数字为信号的代号,使用时可以用代号代替相应的信号。
1:SIGHUP,启动被终止的进程
2:SIGINT,相当于输入ctrl+c,中断一个程序的进行
9:SIGKILL,强制中断一个进程的进行
15:SIGTERM,以正常的结束进程方式来终止进程
17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行

常用样例:
kill 3623杀掉进程
kill -9 3623 强制杀掉进程

杀死指定用户所有进程
#kill -9 $(ps -ef | grep hnlinux) //方法一 过滤出hnlinux用户进程
#kill -u hnlinux //方法二

tar命令
tar命令用于备份文件。tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
基本格式:tar [Options] file_archive  
//注意tar的第一参数必须为命令选项,即不能直接接待处理文件
常用参数如下:
-c :新建打包文件,压缩
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,解压
-t :查看打包文件的内容含有哪些文件名
(注意-c,-t,-x不能同时出现在同一条命令中 )

-z :通过gzip的支持进行压缩/解压缩 ,一般使用.tar.gz后缀
(tar打包的同时使用gzip压缩,加 -z 参数;tar解包就是将命令中的-c换成-x即可)
-j :通过bzip2的支持进行压缩/解压缩 ,一般使用.tar.bz2后缀
(不加-z或-j则为单纯的打包操作)

-f filename :filename为要处理的文件,指定tar指令使用的文件,若没有压缩操作,则以.tar作为后缀
-C dir :指定压缩/解压缩的目录dir
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来

常用样例:
tar -cvf filename.tar //打包
tar -zcvf filename.tar.gz file1 file2 file3 //打包并压缩(文件)
tar -zcvf filename.tar.gz dir //打包并压缩, 对目录打包并压缩
tar -ztvf filename.tar.gz //查询压缩包内容:
tar -zxvf filename.tar.gz -C dir //解压

tar -zcvf test.tar.gz ./test/ #对test目录下的所有进行打包并压缩

tar -ztvf test.tar.gz //查看

tar -zxvf test.tar.gz -C jieta //解压,jieta是当前目录下的一个文件夹

tar -zcvf dabao.tar.gz test.sh yunsuan.sh printf.sh //多个文件打包压缩

1、.tar 用 tar -xvf 解压
2、
.gz 用 gzip -d或者gunzip 解压
3、.tar.gz和.tgz 用 tar -xzf 解压
4、.bz2 用 bzip2 -d或者用bunzip2 解压
5、
.tar.bz2用tar -xjf 解压
6、.Z 用 uncompress 解压
7、
.tar.Z 用tar -xZf 解压
8、.rar 用 unrar e解压
9、
.zip 用 unzip 解压

crontab命令
inux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

而linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存;
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

crontab [ -u user ] file或crontab [ -u user ] { -l | -r | -e }
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数说明:
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表

crontab –l //查看当前主机存在的定时任务
crontab –e //编辑当前主机的定时任务

gxbillcs%crontab -l (//注释掉定时任务,在最前面加#)

时程表的格式如下:f1 f2 f3 f4 f5 program
crontab命令格式含义:分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6) 命令段

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定时程表。

下面看看看几个具体的例子:
0 * * * * /bin/ls //每月每天每小时的第 0 分钟执行一次 /bin/ls
0 6-12/3 * 12 * /usr/bin/backup //在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
0 17 * * 1-5 mail -s “hi” alex@domain.name < /tmp/maildata //周一到周五每天下午 5:00 寄一封信给 alex@domain.name
20 0-23/2 * * * echo “haha” //每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”
0 /2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * /sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "
.xxx" -mtime +4 -exec rm {} ; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令
(注意:当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可)

date命令
date命令可以用来显示或设定系统的日期与时间;
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数。

按照自己的格式输出时间:
date ‘+当前日期:%Y%m%d%n当前时间:%H:%M:%S’

-d datestr : 显示 datestr 中所设定的时间 (非系统时间)
–help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
–version : 显示版本编号

date -s 2019/01/03 //更改系统日期

lsof命令
可以列出被进程所打开的文件的信息。被打开的文件可以是
1.普通的文件,2.目录 3.网络文件系统的文件,4.字符设备文件 5.(函数)共享库 6.管道,命名管道 7.符号链接 8.底层的socket字流,网络socket,unix域名socket 9.在linux里面,大部分的东西都是被当做文件的……还有其他很多
列出谁在使用某个端口26100
lsof -i :26100

查看谁正在使用某个文件
lsof /filepath/file

列出某个用户打开的文件信息
lsof -u username
备注: -u 选项,u其实是user的缩写

iconv命令
对于给定文件把它的内容从一种编码转换成另一种编码。
-f encoding :把字符从encoding编码开始转换。
-t encoding :把字符转换到encoding编码。
-l :列出已知的编码字符集合
-o file :指定输出文件
-c :忽略输出的非法字符
-s :禁止警告信息,但不是错误信息
–verbose :显示进度信息
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
*列出当前支持的字符编码
iconv -l

中文乱码 设置字符集
iconv -f utf8 -t gb18030 file1.sh >file2.sh

*将文件file1转码,转后文件输出到fil2中:
iconv -f EUC-JP-MS -t UTF-8 file1 -o file2 //没-o那么会输出到标准输出.

SVN版本控制相关命令
常用样例:
wdiff gp_down.dcd #查看需要更新的模板是否有更新
svn up gp_down.dcd #下载更新带上自己需要更新的模板名,以防止其他模块内容被一起下载下来
svn log gp_down.dcd|more #查看模板的更新日志(最上面一行为最新记录)
svn info gp_down.dcd #查看更新文件的版本号等信息
scp gp_down.dcd gxbillcs@10.10.12.146:./template/decode #将更新的模板部署到146测试环境主机上(scp是基于ssh的cp命令)

回退指定文件到指定版本
svn merge -r 487519:481062 abm_freeres.cpp
487519是最新版本
481062是上次版本

dllver框架动态库检查
环境下检查库是否有问题, 执行这个命令 库有问题都出来 了
常用样例:
100.9_billapp%dllver sh -n libRiskrating_appD.so.2.0.0.511176
Loading:libRiskrating_appD.so.2.0.0.511176 失败!!! 错误消息:
/data/billapp/lib/libRiskrating_appD.so.2.0.0.511176: undefined symbol: _ZN15rating_charging17CHisAccumulateLogC1EPNS_17CAbmOperatorChainE

dllver sh -n libcharging_freeRes_createD.so.2.0.0.709063

tail 命令
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

命令格式:
tail [参数] [文件]

参数:

-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示行数
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束.
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

实例
要显示 notes.log 文件的最后 10 行,请输入以下命令:
tail notes.log

要跟踪名为 notes.log 的文件的增长情况,请输入以下命令:
tail -f notes.log
此命令显示 notes.log 文件的最后 10 行。当将某些行添加至 notes.log 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。

显示文件 notes.log 的内容,从第 20 行至文件末尾:
tail +20 notes.log

显示文件 notes.log 的最后 10 个字符:
tail -c 10 notes.log

ping命令
Linux ping命令用于检测主机。执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
-d 使用Socket的SO_DEBUG功能。
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络界面送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
实例:
ping 10.10.16.146 //ping主机
//需要手动终止Ctrl+C

ping -c 2 10.10.16.146 //指定接收包的次数,收到两次包后,自动退出

ping -c 5 -i 0.6 qq //每隔0.6秒ping一次,一共ping 5次

一个有趣的点:使用host命令来查询主机对应的IP地址的时候偶然发现其实www.baidu是www.a.shifen的别名,这个别名也叫CName。
qcl@vm:~$ host www.baidu
www.baidu is an alias for www.a.shifen.
www.a.shifen has address 220.181.112.244

qcl@vm:~$ host baidu
baidu has address 123.125.115.110
baidu has address 220.181.57.216
baidu mail is handled by 20 mx1.baidu.
baidu mail is handled by 10 mx.maillb.baidu.
baidu mail is handled by 20 jpmx.baidu.
baidu mail is handled by 20 mx50.baidu.
baidu mail is handled by 15 mx.n.shifen.

www.baidu 和baidu 指向的位置不一样;

A记录是用来指定主机名(或域名)对应的IP地址记录。就比如说我www.baidu这样的域名,对应的IP地址为61.135.169.121。

域名绑定A记录就是告诉DNS,当输入域名的时候给你引导向设置在DNS的A记录所对应的服务器。其实也就是说我们在浏览器中如果输入的是域名的话,都会被DNS解析成IP地址。

CName记录允许您将多个名字映射到同一台计算机。 通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为kkkssmm.。 它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名:A和B。WWW服务其实就是万维网服务。

疑问:既然这个别名指向的IP地址是和www.baidu指向的IP地址是一样的,那为什么进不了www.a.shifen这个网站

因为域名指向的IP是一样的,但是后端在解析我们的传输过去的url的时候,进行了配置,比如说进行了重定向操作,我们可以通过开发者工具看到:再去通过www.a.shifen去访问的时候,就会重定向到百度的错误界面。

telnet命令
ping 可以测试到目标机器的连通性。Ping域名还可以得出解析IP。评估网络质量。telnet 用于远程管理连接主机, 执行telnet指令开启终端机阶段作业,并登入远端主机。同时也是测试目标机器的TCP端口是否开放。
telnet IP地址 3389 #是用来测试目标机器的3389端口是否开放,如果连接失败,可能是防火墙屏蔽,也可能是目标机器没有启用相关远程桌面服务(windows),或者修改了默认占用3389端口
telnet 192.168.0.5 //登录IP为 192.168.0.5 的远程主机

退出用quit

ssh命令
ftp服务用的是20、21端口,客户端添加ftp信息的时候输入的是21端口;
ssh服务用的是22端口,应用于远程ssh管理Linux服务器;

SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。
ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序)
ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接;
整个过程是这样的:
(1)远程主机收到用户的登录请求,把自己的公钥发给用户。
(2)用户使用这个公钥,将登录密码加密后,发送回来。
(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
1.SSH是安全的加密协议,用于远程连接Linux服务器
2.SSH的默认端口是22,安全协议版本是SSH2
3.SSH服务器端主要包含2个服务功能SSH连接和SFTP服务器
4.SSH客户端包含ssh连接命令和远程拷贝scp命令等

如何防止SSH登录入侵
1.密钥登录,更改端口
2.牤牛阵法
3.监听本地内网IP(ListenAddress 192.168.25.*)

SSH远程登录
假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
$ ssh user@host 如:ssh pika@192.168.0.111
如果本地用户名与远程用户名一致,登录时可以省略用户名。
$ ssh host
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
$ ssh -p 2222 user@host
上面这条命令表示,ssh直接连接远程主机的2222端口。

1.判断物理链路是否通 ping 192.168.25.130 线路 | 防火墙 | 是否同一个网的
ping 本身是icmp协议

2.判断服务是否正常
telnet 192.168.25.130 22

3.Linux防火墙
service iptables status ==> /etc/init.d/iptables status

4.打开ssh的调测进行观察
ssh -vvv omd@192.168.1.100

ifconfig命令
查看自己的IP地址

scp命令
Linux scp命令用于Linux之间复制文件和目录。
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-P port:注意是大写的P, port是指定数据传输用到的端口号。

1、从本地复制文件到远程
scp local_file remote_username@remote_ip:remote_folder
scp local_file remote_username@remote_ip:remote_file
scp local_file remote_ip:remote_folder
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
应用实例:
scp /home/space/music/1.mp3 root@www.runoob:/home/root /music
scp /home/space/music/1.mp3 root@www.runoob:/home/root/music/001.mp3
scp /home/space/music/1.mp3 www.runoob:/home/root /music
scp /home/space/music/1.mp3 www.runoob:/home/root/music/001.mp3

2、从本地复制目录到远程:
scp -r local_folder remote_username@remote_ip:remote_folder
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
应用实例:
scp -r /home/space/music/ root@www.runoob:/home/root/others/
scp -r /home/space/music/ www.runoob:/home/root/others/
上面命令将本地 music 目录复制到远程 others 目录下。

3、从远程复制到本地
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可;
应用实例:(复制文件、复制目录)
scp root@www.runoob:/home/root/others/music /home/space/music/1.mp3
scp -r www.runoob:/home/root/others/ /home/space/music/
1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:
#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob:/usr/local/sin.sh /home/administrator
2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的。

pstack 和 gdb
XXXX装gdb core

tree命令
树形结构显示目录。
安装tree这个命令工具:sudo apt-get install tree

tree命令行参数:

-a 显示所有文件和目录。
-A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
-C 在文件和目录清单加上色彩,便于区分各种类型。
-d 显示目录名称而非内容。
-D 列出文件或目录的更改时间。
-f 在每个文件或目录之前,显示完整的相对路径名称。
-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|“号。
-g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
-i 不以阶梯状列出文件或目录名称。
-I 不显示符合范本样式的文件或目录名称。
-l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
-n 不在文件和目录清单加上色彩。
-N 直接列出文件和目录名称,包括控制字符。
-p 列出权限标示。
-P 只显示符合范本样式的文件或目录名称。
-q 用”?"号取代控制字符,列出文件和目录名称。
-s 列出文件或目录大小。
-t 用文件和目录的更改时间排序。
-u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
-x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

查看不同级别子目录和文件使用"tree -L 1 "这个命令,只查看当前第一级的目录。和文件使用"tree -L 2 "这个命令,只查看当前第二级的目录和文件使用"tree -L N "这个命令,只查看当前第N级的目录和文件。

find . -maxdepth 1 -type d //只查找一层目录

本文标签: 常用命令Linux