Linux 从入门到熟练

目录

一、文件

【文件权限】

【文件类型】:7种

二、Find|xargs

三、后台执行命令

四、文件名置换

五、shell输入与输出

六、命令执行顺序

七、正则表达式介绍

八、grep 家族

扫描二维码关注公众号,回复: 4282424 查看本文章

九、AWK 介绍

十、sed 用法介绍

【随记】


一、文件

【文件权限】


1) 读,可以显示该文件的内容。
2) 写,可以编辑或删除它。
3) 执行,如果该文件是一个shell脚本或程序。

r w x:文件属主权限这是前面三位
r- x:同组用户权限这是中间三位
r- x:其他用户权限这是最后三位
chmod命令 的符号模式
r w x  : u + o + g   总:a
chmod a-x  myfile rw- rw- rw- 收回所有用户的执行权限
chmod og-w myfile rw- r-- r- - 收回同组用户和其他用户的写权限
chmod g+w  myfile rw- rw- r- - 赋予同组用户写权限
chmod u+x  myfile rwx rw- r- - 赋予文件属主执行权限
chmod go+x myfile rwx rwx r- x 赋予同组用户和其他用户执行权限
chmod命令 的绝对模式
r w x  : 4 + 2 + 1

-R选项:改变目录树下全部文件权限
chmod 644*:设置目录下所有文件的权限

【文件类型】:7种


d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件

【chown】:将一个文件的所有权交给另外一个用户
eg:-rwxrwxrwx 1 appbatop staf 345 Sep 20 14:33 test.txt
chown appadmin test.txt
-->-rwxrwxrwx 1 appadmin staf 345 Sep 20 14:33 test.txt
【chgrp】 : 改变文件所属用户组
eg:-rwxrwxrwx 1 appbatop staf 345 Sep 20 14:33 test.txt
chown system test.txt
-->-rwxrwxrwx 1 appadmin system 345 Sep 20 14:33 test.txt
【ln 使用软链接来保存文件的多个映像】
eg:ln [-s] source_path target_path

二、Find|xargs


Find命令的一般形式为:
find pathname -options [-print -exec -ok]
find命令有很多选项或表达式:
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了-depth选项,那么-prune选项将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/ etc / group s中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc / passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件
-mount 在查找文件时不跨越文件系统m o u n t点。
-follow 如果f i n d命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用c p i o命令,将这些文件备份到磁带设备
eg:[-name]
波浪号~代表了你的$HOME目录。
$ find ~ -name "*.txt" -print
想要在当前目录及子目录中查找所有的'*.txt'文件,可以用:
$ find . -name "*.txt" -print
想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:
$ find . -name "[A-Z]*" -print
想要在/etc目录中查找文件名以host开头的文件,可以用:
$ find /etc -name "host*" -print
想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是*.txt的文件
$ find . -name "[a-z][a-z][0--9][0--9].txt" -print
[-perm]
在当前目录下查找文件权限位为755的文件
$ find . -perm 755 -print
[-mtime]
在系统根目录下查找更改时间在5日以内的文
$ find / -mtime -5 -print
在/ v a r / a d m目录下查找更改时间在3日以前的文件,可以用:
$ find /var/adm -mtime +3 -print
[-size]
为了在当前目录下查找文件长度大于1M字节的文件,可以用:
$ find . -size +1000000c -print
为了在/home /apache目录下查找文件长度恰好为100字节的文件,可以用:
$ find /home/apache -size 100c -print
为了在当前目录下查找长度超过10块的文件(一块等于512字节),可以用:
$ find . -size +10 -print
[-exec]
为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径,可以用:
$ find / -type f -size 333 -exec ls -l {} \;
[xargs]
在当前目录下查找文件权限位为777的文件,包含cappdb
find . -perm 777 -print | xargs grep "cappdb"

三、后台执行命令


名词解释:
cron :系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。
At   :at命令。使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。
&    :使用它在后台运行一个占用时间不长的进程。
Nohup:使用它在后台运行一个命令,即使在用户退出时也不受影响。
【crontab】的格式:
分 时 日 月 星期 要运行的命令
注释:可以用横杠-来表示一个时间范围,例如你希望星期一至星期五运行某个作业,那么可以在星期域使用1-5来表示。还可以在这些域中使用逗号“,”,
例如你希望星期一和星期四运行某个作业,只需要使用1,4来表示。可以用星号*来表示连续的时间段。如果你对某个表示时间的域没有特别的限定,
也应该在该域填入*。该文件的每一个条目必须含有5个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用#来表示。
eg:
45 4 1,10,22 * * /apps/bin/backup.sh
上面的例子表示每月1,10,22日的4 : 4 5运行/apps/bin目录下的backup.sh。

crontab命令的一般形式为:
Crontab [-u user] -e -l -r
其中:
-u 用户名。
-e 编辑c r o n t a b文件。
-l 列出c r o n t a b文件中的内容。
-r 删除c r o n t a b文件。

【用ps命令查看进程】ps -ef | grep 2564
杀死进程: kill 2564
       或  kill -9 2564
       或  nohup command &

四、文件名置换


特殊字符:
* 匹配文件名中的任何字符串,包括空字符串。
? 匹配文件名中的任何单个字符。
[...] 匹配[ ]中所包含的任何字符。
[!...] 匹配[ ]中非感叹号!之后的字符。

五、shell输入与输出


【echo】
\c 不换行。
\f 进纸。
\t 跳格。
\n 换行。

echo "what\t\t are \tyou from"如果是LInux系统,需要加-e
$ echo "\"/dev/rmt0"\"   输出结果为  "/dev/rmt0"


如果想把一个字符串输出到文件中,使用重定向符号>
如果想追加到一个文件的末尾,这意味着不覆盖原有的内容:使用重定向符号>>
【read】
可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只
指定了一个变量,那么r e a d将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
【cat】
cat命令最有用的选项就是:
-v 显示控制字符
cat -v file 显示文件的控制字符(查看是不是DOS格式)
【管道】  命令1 |命令2
who | awk '{print $1"\t"$2}' 只显示用户名和所在的终端。
df -k | awk :F '{print $1}' | grep -v "lvcmsdb"  展示去掉lvcmsdb的文件系统
df -k | awk '{print $1}' | grep -v "lvcmsdb" | sed s'/\/dev\///g'     只展示分区名
$ sort myfile | lp
【tee】
-a表示追加到文件末尾。
【exec】
使用这一命令时任何现有环境都将会被清除,并重新启动一个shell。它的一般形式为:
exec command
【文件重定向】
标准输入
标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件
command > filename 把把标准输出重定向到一个新文件中(重定向符号一定要离开sort命令两个空格,)
command >> filename 把把标准输出重定向到一个文件中(追加)
command 1 > fielname 把把标准输出重定向到一个文件中
command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把把标准错误重定向到一个文件中
command 2 >> filename 把把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入

六、命令执行顺序


【&&】
命令1 && 命令2   只有命令1为真{即返回0},才会执行命令2
【||】
命令1 || 命令2   如果命令1执行失败了,那么就执行命令2


七、正则表达式介绍


                                           基本元字符集及其含义
-----------------------------------------------------------------------------------------------------------------
^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-表示[ ]内字符序列范围,如用[1-5]代替[12345]
\ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有特殊含义。\可以使其失去应有意义
. 只匹配任意单字符
pattern\{n\} 只用来匹配前面pattern出现次数。n为次数
patern\{n,\}m 只含义同上,但次数最少为n
pattern\{n,m\} 只含义同上,但pattern出现次数在n与m之间
-----------------------------------------------------------------------------------------------------------------
1.使用\屏蔽一个特殊字符的含义
\ .
2.使用[]匹配一个范围或集合
假定要匹配任意一个数字,可以使用:[0123456789]简化操作:[0-9]
要匹配任意字母,则使用:     [A-Za-z]
假定要匹配一单词,以s开头,中间有一任意字母,以t结尾,那么操作如下:s[a-z A-Z]t
如要匹配C o m p u t e r或c o m p u t e r两个单词,可做如下操作:[Cc]omputer
3.使用\{\}匹配模式结果出现的次数
匹配字母A出现两次,并以B结尾:A\{2\}B   匹配值为AAB
匹配A至少4次  A\{4,\}B   AAAAB或AAAAAAAB,但不能为AAAB。
如给出出现次数范围,例如A出现2次到4次之间  A \ { 2 , 4 \ } B  则结果为A A B、A A A B、A A A A B,而不是A B或A A A A A B等。

八、grep 家族

常用的grep选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
eg:
如果要在当前目录下所有文件中查找字符串“sort”*.doc,方法如下:
$ grep "sort"*.doc
或在所有文件中查询单词“sort it”
$ grep "sort it" *
使用grep抽取精确匹配的一种更有效方式是在抽取字符串后加\ >
grep -v -n "ROOT\>" grep.sh
有时要查询重复出现次数在一定范围内,比如数字或字母重复出现2到6次,下例匹配数字ROOT重复出现2到6次,并以3结尾
grep 'ROOT\{2,6}3' grep.sh
匹配特殊字符
grep '\"' grep.sh
查询IP地址
grep '[0-9]\{2\}\.[0-0]\{3\}\.' ipfile
查询行尾包含单词device的所有行
grep 'device$' grep.sh
查询目录列表中d开始的目录
grep '^d'
查询不包含目录的所有文件
grep '^[^d]'
使用ps命令.查看进程
ps -ef或ps -ax 

九、AWK 介绍

语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息
【awk '{print $0}' grep.sh】
注释:'{print $0}'打印所有域的数据,$+number表示打印的域
【打印报告头】:如果想将打印信息头放置在BEGIN模式部分,因为打印信息头被界定为一个动作,必须用大括号括起来。在awk查看第一条记录前,信息头被打印
awk 'BEGIN {print "Name    Belt\n-----------------------------------"}{print $1"\t"$2}' grep.sh
输出:
Name                        Belt
-----------------------------------
BATCHDATA         BATCHDATA
SCRIPTROOT      SCRIPTROOT
LIBROOT                  LIBROOT
【打印信息尾】:
awk 'BEGIN {print "Name\n---------------"}{print $1} END {"end-of-report"}' grep.sh
输出结果尾输出:end-of-report
【匹配】:在grep.sh脚本筛选ROOT   使一域号匹配正则表达式,使用符号‘~’后紧跟正则表达式
俩种写法:
awk '{if($1~/ROOT/) print $0}' grep.sh
awk '$0 ~ /ROOT/' grep.sh
【精确匹配】
awk '$2=="02/12" {print $0}' grep.sh
【不匹配】有时要浏览信息并抽取不匹配操作的记录,与~相反的符号是!~,意即不匹配
awk '{if($1!~/ROOT/) print $0}' grep.sh
【判断大小】
awk 'if($6>$7)print $0' grep.sh
awk '{if($6>$7)print $0 "$1 Try to better an the next comp"}' grep.sh
------------------------awk内置变量---------------------------------
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行- F选项
NF 浏览记录的域个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
------------------------------------------------------------------
awk '{print ARGC,NF,NR,ORS,RS,$0}' grep.sh


十、sed 用法介绍

是一个非交互性文本流编辑器

1 使用sed命令行格式为:
sed [选项] sed命令 输入文件。
2 使用sed脚本文件,格式为:
sed [选项] -f sed脚本文件 输入文件
3 要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为:
sed脚本文件 [选项] 输入文件
sed选项如下:
n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条sed命令,此选项无用,但指定它也没有关系。
f 如果正在调用sed脚本文件,使用此选项。此选项通知sed一个脚本文件支持所有的sed命令,例如:sed -f myscript.sed input_file,这里myscript.sed即为支持sed命令的文件


-------------------------使用sed在文件中定位文本的方式-------------------------
x   x为一行号,如1
x,y  表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/  查询包含模式的行。例如/disk/或/[a-z]/
/pattern/pattern/  查询包含两个模式的行。例如/disk/disks/
pattern/,x  在给定行号上查询包含模式的行。如/ribbon/,3
x,/pattern/  通过行号和模式查询匹配行。3 . /vdu/
x,y!  查询不包含指定行号x和y的行。1 , 2 
----------------------------------------------------------------------------------

-----------------------------------sed编辑命令-----------------------------
p 打印匹配行
= 显示文件行号
a\ 在定位行号后附加新文本信息
i\ 在定位行号后插入新文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句如果
-----------------------------------------------------------------------------
【输出文本】
输出文本第二行
sed -n '2p' grep.sh
输出文本第一行至第三行
sed -n '1,3p' grep.sh
第四行查询模式the
sed -n '4,/ROOT/'p grep.sh
输出最后一行
sed -n '$p' grep.sh
匹配元字符$
sed -n '/\$/'p grep.sh
【删除文本】输出删除,文本并没有删除
删除第二行
sed '1,3d' grep.sh
第四行查询模式the
sed -n '4,/ROOT/d' grep.sh
【替换文本】
替换命令用替换模式替换指定模式,格式为:
[ address[,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
替换选项如下:
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。
p 缺省sed将所有被替换行写入标准输出,加p选项将使- n选项无效。- n选项不打印输出结果。
w 文件名使用此选项将输出定向到一个文件
eg:
删除$符号
sed '/\$//' grep
替换所有
sed 's/ROOT/ HELLO/g' grep.sh
替换结果写入一个文件sed.out用w选项,
sed 's/hello/HELLO/w sed.out' grep.sh
修改字符串
sed 's/ROOT/from beijing &/p' grep.sh
输出结果:I han kankanfrom beijing ROOT one
原句:I han kankan ROOT one
【从文件中读文本】
格式为:
address r filename
eg:
sedex.txt内容附加到文件quote.txt的拷贝。在模式匹配行/company/后放置附加文本
sed '//'
【】
【】
【】


【随记】


1.只输出当前时间
tempTime=`date +%T`
2.-ge 第一个数大于等于第二个数
if [ "$hh" -ge "05" ]; then
-eq 数值相等。(equal)
-ne 数值不相等。(unequal)
-gt 第一个数大于第二个数。(greater than)
-lt 第一个数小于第二个数。(less than)
-le 第一个数小于等于第二个数。
3.数据文件进行转码(UTF-8转成GBK)
iconv -f UTF-8 -t GB18030 HYCustomerInfo102.dat > HYCustomerInfo102.dat
3.1查看一个文件的格式:
    a:vi 文件
        b:set fileencoding

4.新建
    mkdir  + 文件名
    touch + xxx.sh
5.删除文件
rm + 文件名
rm -rf + 文件 : 删除目录下所有文件
rm -f + 文件:强制删除
6.查看文件行数
    wc -l 文件
7.查看文件夹下文件个数
    ls -l|grep "^-"|wc -l
    查看文件夹下目录的个数
    ls -l|grep "^d"|wc -l
    查看文件夹下文件个数,包括子目录下的
    ls -lR|grep "^-v"|wc -l
8.du -h    //查看当前目录下文件大小
9.ps -ef |grep ele    //查看ele进程
10.crontab -l (-e)   //定时任务 -l显示 -e修改


--拷贝信息到144服务器
scp orgCopyBatch.sh [email protected]:/home/appncss/baicun
scp -r ./* [email protected]:/cbpt/batch  

---ftp命令把远程计算机的文件传输到本地计算机,需要和用户交互
ftp -niv <<-EOF
open 22.5.96.162
user citicbank citicbank
prompt off
bin
cd /opt/IBM/WebSphere/AppServer/profiles/node01/logs/cbpsServer11
bin
get  SystemOut.log
bin
get  SystemErr.log

bye
EOF
-----------------------
--拷贝信息到144服务器
scp orgCopyBatch.sh [email protected]:/home/appncss/baicun
scp -r ./* [email protected]:/cbpt/batch  

下载 sz
上传 rz -be

--------查看文件 more -------
more 语法:more[参数选项][文件]
参数:
    +num        从第num行开始显示
    -num        定义屏幕大小为num行
    +/pattern    从pattern前两行开始显示
    -c            从顶部清屏然后显示
    -s            把连续的多个空行显示为一行


退出指令:q
显示下一屏:ctrl+f(或空格键)
返回上一屏:ctrl+b
输出当前行号:=
输出文件名和当前的行号::f
调用vi编辑器:v

---------查看文件 less more和less首选less命令--------------
less 语法:less[参数] 文件
参数:
-c        :从顶部(从上到下)刷新屏幕,并显示文件内容
-m        :显示读取文件的百分比
-M        :显示读行号的百分比,行号和总行数
-N        :在每行前输出行号

less -MN 文件

向下移动一行:回车键
向上移动一行:y
向下滚动一屏:空格键 
向上滚动一屏:b
从指定的下一行开始显示:w
跳到第一行:g
跳到最后一行:G
从文件百分之10处开始显示:p 10%
退出:q

 ---------杀进程--------------
 kill   12354
 
杀发邮件进程
kill $(ps -ef |grep gci_are_BusinessHistory.xml |grep -v grep |awk '{print $2}')


 

猜你喜欢

转载自blog.csdn.net/csdn_0911/article/details/84591204