Linux脚本语言学习

第一章Linux学习方式

在Linux中除了大小写之外,需要关注的就是输入法的中文和英文状态,在使用linux的过程中如果不小心在中文状态下输入中文的空格,或者是在网络上拷贝他人的脚本发现运行后出现错误的信息大多数时候都是中文空格造成的。

1.1:linux的基础命令

cd   切换目录的命令 cd ~ 当前用户的家目录 cd - 查看前一个目录


mkdir   命令创建目录命令 rmdir是删除空文件的命令


cp   命令拷贝文件的命令


mv   移动文件的命令


ls   查看当前所在的文件夹


cat 命令显示文件到屏幕


ls -i 命令就是在每个文件的前面加一个索引节点号


ll 就是显示长文件的命令


ls -a 就是查看当前目录的所有的文件包括以点开头的文件


echo 就是将它后面的东西返回


** 命令有转义的意思就是如果你要输出一个\就是用 echo \才会输出


\n换行 \t制表


sed s’/这个是旧的东西 /新的东西 /g’ 替换的命令


tr ’ ’ ‘\n’ 一行变多行 tr ’ ’ ’ ’ 该命令就是多行变一行,该命令起到了有个替换的作用将前面引号中的内容替换为后面引号中的内容


xargs -i 命令一次次的传递


grep 命令搜索命令


rm -rf 删除文件的命令 r 表示整个的目录 f表示不询问


put 命令传递文件的命令


bash -c 就是将传递来的东西执行一下


{} 可以说就是传递来的东西 参数或文件{}里面是不能添加空格的{}传递过来的参数是随机的


seq 是生成数的命令 如seq 5 就是从一到五生成5个数 1 2 3 4 5


seq 5 30 就是依次生成 5 10 15 20 25 35 这几个数


seq 5 -1 3 生成的数依次是5 4 3 从大到小


| 是管道命令就是将上一级命令的执行结果传递到下一级


. 在linux中表示的是当前的路径


空格 还有在linux中命令是用来区分东西的


如:
seq 5 | xargs -i sl 该命令表示的是 在linux中开5次火车
生成 5 数 | 通过管道传递到下一级 xargs -i 就是一次次传递(传递5次) 给sl执行
shuf 生成随机数

linux基本指令之重定向
> 输出重重定向 就是将命令的执行结果重定向到另一个文件 如:echo hello word > 1
就是本来是将hello word返回显示到屏幕上的但是现在不到屏幕了到 1 这个文件(但是不支持文件的追加写入)


>> 附加输出重定向 和输出重定向一样但是它支持追加写入


< 输入重定向 将文件的命令的标准的格式写入该文件


2> 错误输出重定向 将文件的错误执行结果传递到指定文件夹

cat命令解析:


cat 显示文件到屏幕


cat和并文件还可以 cat 1 2 > 3 将1 2 问件合并到 3


cat 建立小型的文件 cat > 文件名 如: cat > 3 建立了一个名为三的文件

reboot 重启命令

pwd命令返回所在路径的命令


mkdir 命令就是创建文件的命令

mkdir -p 表示递归创建文件的命令 如:mkdir /user/local/software**/hadoop/file** 该条命令就是一次性的创建了个的目录 从user 到 file

jps 命令就是查看当前系统有关java的进程

chmod 命令就是赋予相关权限的命令

就是关闭系统的命令 shutdown -h now 立刻关闭系统 shutdown -r now 立刻重启系统 shutdown 10 十分钟后进入单用户维护模式 shutdown now 立刻进入单用户维护模式

vim / vi 命令进入配置文件的命令 在命令行中 : 表示进入命令行模式 w 表是保存 q 表示退出 !表示强制执行


dd命令删除一行的命令

相关有关hadoop的的命令


start-all.sh 就是开启hadoop的相关进程 /或是开启当前系统的所有的进程


stop-all.sh 就是关闭hadoop的相关进程 /或是开启当前系统的所有的进程

linux中的单元格操作awk操作


**awk ’{system("seq "$1);}’**在这个脚本中 awk 只认识 '{}'里面的东西 里面你可以写你想要的东西


linux中的通配符


**$**在awk中表示单元格 在AWK 外表示的是参数
***** 表示任意一个字符 . 表示单个字符 []指定一个符号的取值范围 如[a-c] 等

sed ‘1d’ 表示的是删除第一行 xd表示的是x行

以上就是我现在所回忆的基本的指令现在我们结合具体的实例来使用这些命令通过linux的基本指令简单的结合创造出各种实现功能的命令方便而快捷的实现

1.2:命令参数和空格的使用

chmod +x 1.cmd 

这个命令的作用是给1.cmd文件添加可执行权限,chmod的作用是改变文件的权限,其中chmod是命令,后面两者是命令带的参数,命令和参数之间一定要使用英文的空格进行隔开,其中 +和-表示的都是参数的引出符号,如常见的cd,sed , em , mkdir ,touch等命令都需要使用空格进行隔开xrags除外这是一个比较特殊的命令 xargs命令表示传递参数入数据:也就是上一个命令通过管道命令 | 传递过来的数据.

1.3:命令的简写和参数的引出符号

命令:cat n e b 

这个文件时有错误的缺少参数的引出符号可能导致在运行时linux无法识别导致出现错误

命令:cat -b -n -e file1 这个写法是正确的此外简写的方式为 cat -ben file1

--  在linux中表示的也是参数引出符号的意思如:--verson表示的是查看命令当前版本号

如:java --verson 表示查看当前安装java的版本号

注意Linux在管道传递信息是不能有空格

| --》 用于划分多级脚本命令,也称之为管道

| xargs -i 命令 {} 其中{}中不能有空格存在{}的功能代表的是传递过来的内容是固定的不能做出改变
命令:seq 1 2000 | xargs -i rm -rf {}

seq 1 2000 生成 1-20000 的数 , 是一个多级脚本命令 | 表示将结果给到下一个命令进行处理

xargs -i 接收传递过来的结果, rm -rf {} 对传递过来的结果依次的接收和移除{}表示的就是传递过来的参数或者数据。

命令: rm  -rf * 表示三处目录中的所有文件不询问 

符号 | 与 | xargs -i 相当于是多级脚本命令中的介词用于划分多级脚本命令,每一级脚本命令有且只有一个基础脚本命令,剩下的内容全是该基本脚本命令的参数

1.4:Linux  参数中的操作码和操作对象

echo 命令 该命令的作用是返回echo后面的内容并显示到屏幕上

echo echo 或者 echo Linux Study,表示分别在屏幕上显示echo 字符 和 Linux Study字符

grep 命令:在Linux中起到搜索的作用如:

grep 1 1 

表示在文件1中搜索含有字符串1的行,第一个1表示的是搜索的内容,第二个1表示的是文件的名称。

grep 命令格式为 命令 <grep    要搜索的文字   一个或多个文件名  其他参数>

1.5:字符串操作对象和歧义消除

命令:grep good morming file1,这个命令包含两种解释容易引起歧义,一种解释是在file1文件中搜索good morming,一种解释是在morming 和file1两个文件中搜索good,Linux默认使用第二种方式进行操作:如果想要消除这种歧义应该在要搜索的字符中添加双引号" ".具体的用法如下所示。

命令:grep "good morming" file1

但是并不是所有的命令都需要添加双引号如echo将后面的字符显示在屏幕上

命令:echo echo hi echo grep在屏幕上显示出echo hi echo grep

echo讲解:echo命令的功能是在屏幕上输出信息,而永远不会对任何文件展开操作,所以echo命令后面再多的空格分开字符串也不会被认为是文件,所以是没有歧义的。

1.6:操作码注意事项

有时在参数合并时它们的位置不能交换,比较稳妥的方式是将每个参数单独写出来如下所示

命令:seq 2 | xargs -i -t echo {}
[root@localhost bin]# seq 2 | xargs -i -t echo {}
echo 1 
1
echo 2 
2

这个命令的意思是生成1-2个数,通过管道传递到下一级然后通过echo显示在屏幕上

LS命令的用法

ls -l 查看文件或文件夹的详细信息

ls -t 查看文件修改时间排序

ls -r 将文件反向排序

可以将不同的参数作为一个命令使用

[root@localhost bin]# ls -ltr
lrwxrwxrwx. 1 root root          2 3月   6 09:46 atrm -> at
lrwxrwxrwx. 1 root root          2 3月   6 09:46 atq -> at
lrwxrwxrwx. 1 root root          3 3月   6 09:47 rvim -> vim
lrwxrwxrwx. 1 root root          3 3月   6 09:47 vimdiff -> vim
lrwxrwxrwx. 1 root root          4 3月   6 09:47 sudoedit -> sudo
lrwxrwxrwx. 1 root root          4 3月   6 09:47 csh -> tcsh
lrwxrwxrwx. 1 root root         18 3月   6 09:47 scsi-rescan -> rescan-scsi-bus.sh
lrwxrwxrwx. 1 root root         12 3月   6 09:47 nfs4_editfacl -> nfs4_setfacl
lrwxrwxrwx. 1 root root          4 3月   6 09:47 rnano -> nano
lrwxrwxrwx. 1 root root         10 3月   6 09:47 traceroute6 -> traceroute

命令:find | grep java | xargs -i  ls -ltr {}

[root@localhost bin]# find | grep java | xargs -i  ls -ltr {}
lrwxrwxrwx. 1 root root 22 3月   6 09:43 ./java -> /etc/alternatives/java
lrwxrwxrwx. 1 root root 26 3月   6 09:43 ./alt-java -> /etc/alternatives/alt-java
lrwxrwxrwx. 1 root root 24 3月   6 09:46 ./javaws -> /etc/alternatives/javaws
-rwxr-xr-x. 1 root root 5530 4月   4 2020 ./javaws.itweb

这个命令的意思是通过find命令进行查找 | 通过管道将命令传递到下面一级脚本命令,使用第二级脚本命令grep java 搜索包含java的文件,通过xargs -i 命令将前面命令向下传递,再通过ls 命令对脚本的执行结果按文件,时间,反向排序 通过{}对排序好的命令进行动态接收并显示到屏幕。

Info命令的使用
 

命令:Info grep 表示查看grep命令的文档

命令:man grep 表示的也是参看grep的文档

命令:grep --help表示的也是参看grep的文档

以上三个命令的作用都是查看命令的帮助文档:不同的地方在于三个命令查看文档后展示的结果并不相同使用info grep 命令参看帮助文档出现的是英文格式,man grep查看帮助文档出现的是中文并且可以通过键盘的上线箭头进行翻页,第三个命令grep --help对命令的帮助文档做出了一个简化。

排序命令sort:如此使用sort命令显示生成1-17之间间隔为3的数在没有添加参数-g的情况下是不规则的在添加排序参数-g后生成的数呈现出规则话,从小到大排序

[root@localhost bin]# seq 1 3 17 | sort
1
10
13
16
4
7
[root@localhost bin]# seq 1 3 17 | sort -g
1
4
7
10
13
16

命令:多级脚本命令seq 1 20 生成1-20个数字,通过管道与xargs -i 命令将生成的数传递到下一级命令进行处理,通过mkdir命令通过{}的配合动态生成1-20个文件夹,xargs -i 表示的数数字参数依次传递

[root@localhost bin]# cd ..
[root@localhost /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@localhost /]# mkdir StudyTest
[root@localhost /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  StudyTest  sys  tmp  usr  var
[root@localhost /]# cd StudyTest
[root@localhost StudyTest]# ls
[root@localhost StudyTest]# ll
总用量 0
[root@localhost StudyTest]# seq 1 20 | xargs -i mkdir {}
[root@localhost StudyTest]# ls
1  10  11  12  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9

在linux中tab按键具有补全命令的功能需要命令补全辅助可以适当使用:在使用命令的过程中发现管道命令对输出的结果排列的功能。

[root@localhost bin]# ls *.gz | cat
yelp
yes
ypdomainname
yum
yum-builddep
yum-config-manager
yum-debug-dump
yum-debug-restore
yumdownloader
yum-groups-manager
zcat
zcmp
zdiff
zegrep
zenheiset
zenity
zfgrep
zforce
zgrep
zip
zipcloak
zipgrep
zipinfo
zipnote
zipsplit
zless
zmore
znew
zsoelim

 命令:Seq 1 20 | xargs -i cp Document.txt {}.txt,这个命令的意思是seq 1 20 生成1-20个数

通过管道 | 将1-20个参数传递到第二级的命令,第二级命令xargs -i 表示的是数字参数依次传递

通过cp命令拷贝Document.txt 到{}.txt  ,1 -20个文件夹

[root@localhost StudyTest]# seq 1 20 | xargs -i cp Document.txt {}.txt
[root@localhost StudyTest]# ls
10.txt  11.txt  12.txt  13.txt  14.txt  15.txt  16.txt  17.txt  18.txt  19.txt  1.txt  20.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  Document.txt  file1

删除当前目录下的所有文件:使用rm -rf * 命令

[root@localhost StudyTest]# ls
10.txt  11.txt  12.txt  13.txt  14.txt  15.txt  16.txt  17.txt  18.txt  19.txt  1.txt  20.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt  Document.txt  file1
[root@localhost StudyTest]# rm -rf *
[root@localhost StudyTest]# ls
[root@localhost StudyTest]# 

seq 5 和seq 1 5 两个命令的作用都是一样的

[root@localhost StudyTest]# seq 5
1
2
3
4
5
[root@localhost StudyTest]# seq 1 5
1
2
3
4
5
[root@localhost StudyTest]# 

Sed命令:sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

命令:cat 1.txt | sed 's/^/8888_/g'  | xargs -i mkdir {}

^表示的意思是字符串开始的位置^d表示的是匹配以d开头的字符

命令:cat 1.txt |  sed 's/^/8888_/g' | xargs -i mkdir {}

表示的是添加前缀这个添加的前缀是8888_

 1.1.2.7:正向功能拓展和词频统计:使用这个命令进行统计词频

 tr命令的作用:tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

tr命令的语法:tr 选项 参数

[root@localhost StudyTest]# cat English.txt | tr ' ' '\n' | sed 's/[(),.]//g' | sort | uniq -c | sort -rg
[root@localhost StudyTest]# cat English.txt | tr ' ' '\n' | sed 's/[(),.]//g' | sort | uniq -c | sort -rg
      6 to
      6 the
      6 and
      5 will
      4 we
      4 it
      4 for
      3 surprise
      3 s
      3 party
      3 ll
      3 birthday
      3 be
      3 at
      3 As
      3 all
      3 a
      2 you
      2 which
      2 We
      2 some
      2 sing
      2 him
      2 he
      2 gifts
      2 enjoy
      2 could
      1 Yours
      1 your
      1 Xiaoming’s
      1 Xiaoming
      1 would
      1 What
      1 us
      1 throwing
      1 this
      1 Then
      1 that
      1 Susan
      1 surprised
      1 Students
      1 starts
      1 songs
      1 small
      1 seeing
      1 see
      1 secret
      1 scheduled
      1 re
      1 presented
      1 prepare
      1 pm
      1 play
      1 our
      1 of
      1 nothing
      1 much
      1 more
      1 manage
      1 Looking
      1 light
      1 Li
      1 lasting
      1 know
      1 it
      1 is
      1 in
      1 if
      1 Hua
      1 how
      1 hour
      1 hope
      1 honored
      1 Hi
      1 "Happy
      1 great
      1 gather
      1 games
      1 Friday
      1 forward
      1 following
      1 finish
      1 feel
      1 evening
      1 do
      1 cut
      1 coming
      1 come
      1 classmates
      1 class
      1 Centre
      1 celebrate
      1 candles
      1 cake
      1 Birthday"
      1 birthday
      1 beforehand
      1 attend
      1 as
      1 an
      1 about
      1 9
      1 8
      1 

第二章:Linux中断工具和远程登录

终端工具是操作Linux系统的利器,在linux中使用终端工具几乎感受不到所登录的是本地Linux还是远程linux还是远程windows。

此处不对远程终端工具进行详细的介绍和讲解,用户可以根据自己的使用习惯选择合适的远程终端工具来对linux进行远程操作

2.1:回显命令echo

命令echo:表示在终端工具的屏幕上显示信息,echo hi表示显示字符串hi

echo命令拓展:在linux中显示多行位置可以在echo后面添加-e参数

如 echo -e 后面跟需要显示的东西即可显示多行内容

[root@localhost StudyTest]# echo -e "hello\nhello"
hello
hello
[root@localhost StudyTest]# 

当需要使用echo回显数字时,要讲符号.. 和echo命令连着使用

命令echo {1..5} 在屏幕上显示出一道5的数字,同时使用xargs -i 一次传递数字参数,使用mkdir命令将传递过来的5个参数作为5个文件创建出来,并使用ls命令查看执行结果

[root@localhost StudyTest]# echo {1..5}
1 2 3 4 5
[root@localhost StudyTest]# echo {1..5} | xargs -i mkdir {}
[root@localhost StudyTest]# ls
1 2 3 4 5  English.txt

echo命令不仅能在屏幕上显示数字还能在屏幕上显示字母

echo {a..d},就是在屏幕上显示a-d字母的意思

echo 回显命令也能倒序显示字母或数字

[root@localhost StudyTest]# echo {a..f}
a b c d e f
[root@localhost StudyTest]# echo {10..1}
10 9 8 7 6 5 4 3 2 1
[root@localhost StudyTest]# echo {10..1} | tr ' ' ','
10,9,8,7,6,5,4,3,2,1
[root@localhost StudyTest]# 

这里我们额外使用了tr命令进空格替换为了句号,由以上的操作来看我们不难得出结论当.. 与echo连用时在{}中表示的是自动递增和递减的操作

使用命令让回显的数字在不同的行显示:echo {10..1} 表示倒序显示10-1, | 命令将得到的结果向下传递,tr命令将显示的参数中的空格替换为换行符号得出一下的结果

[root@localhost StudyTest]# echo {10..1} 
10 9 8 7 6 5 4 3 2 1
[root@localhost StudyTest]# echo {10..1} | tr ' ' '\n'
10
9
8
7
6
5
4
3
2
1
[root@localhost StudyTest]# 

注意:echo echo echo echo 表示的是将第一个echo后面的三个echo包括空格作为内容显示到屏幕上

[root@localhost StudyTest]# echo echo echo echo
echo echo echo

2.2:回显命令echo和生成命令seq

上面我们已经对linux的回显命令做了一个详细的讲解但是我们如果要批量的显示数据到屏幕上的话使用echo命令明显很难对显示的数目进行控制,因此必须有一个命令可以帮助我们控制显示的数目,这个命令就是seq命令,seq命令是sequence的缩写,这个命令的参数比较少,功能上直来直去没有多少变化,一般作为循环变量进行生成,可以根据一下的案例进行理解。

[root@localhost StudyTest]# seq 5
1
2
3
4
5
[root@localhost StudyTest]# seq 3 5
3
4
5
[root@localhost StudyTest]# seq 5 3 11
5
8
11
[root@localhost StudyTest]# 

需要将seq命令生成的数字通过管道的方式传递个echo并且显示到屏幕上可以使用如下命令

[root@localhost StudyTest]# seq 1 8 
1
2
3
4
5
6
7
8
[root@localhost StudyTest]# seq 1 8 | xargs -i echo {} | tr ' ' '\t'
1
2
3
4
5
6
7
8
[root@localhost StudyTest]# seq 1 8 | tr '\n' ' ' | xargs -i echo {}
1 2 3 4 5 6 7 8 
[root@localhost StudyTest]# 

seq命令功能拓展:具体来说seq命令还可以带一个功能参数-f来实现c语言中printf函数的用法如果需要在linux中输出浮点数则可以使用-f参数具体的linux命令语句如下所示。

[root@localhost StudyTest]# seq -f "%1.2f" 10
1.00
2.00
3.00
4.00
5.00
6.00
7.00
8.00
9.00
10.00
[root@localhost StudyTest]# seq -f "%9.2f" 10
     1.00
     2.00
     3.00
     4.00
     5.00
     6.00
     7.00
     8.00
     9.00
    10.00
[root@localhost StudyTest]# seq -f "%30.2f" 10
                          1.00
                          2.00
                          3.00
                          4.00
                          5.00
                          6.00
                          7.00
                          8.00
                          9.00
                         10.00
[root@localhost StudyTest]# seq -f "%30.3f" 10
                         1.000
                         2.000
                         3.000
                         4.000
                         5.000
                         6.000
                         7.000
                         8.000
                         9.000
                        10.000
[root@localhost StudyTest]# seq -f "%30.3" 10
seq: 格式"%30.3" 以% 结束
[root@localhost StudyTest]# seq -f "%0.3f" 10
1.000
2.000
3.000
4.000
5.000
6.000
7.000
8.000
9.000
10.000
[root@localhost StudyTest]# 

从以上命令反馈的结果来看seq -f "%1.2f" 10 seq -f 表示的是显示浮点数 "%1.2f" 第一个参数1表示是显示间隔的空格数,第二个参数2表示的是浮点数后面的余数是几个f是一个后缀一定要跟上命令才能正常的显示,10表示显示的浮点数是10个。

2.3:Linux登录的细节

linux操作系统中默认有一个root用户,该用户拥有系统的最高权限,如果是初学者登录root用户下做了错误的操作可能会对系统造成较大的影响特别是三处用户跟目录下的文件操作,因此一般情况下系统安装是还是会提醒安装者至少建立一个一般的用户初学者使用普通的用户身份登录linux系统造成的伤害会小很多。

su命令:su命令是切换用户命令 su 用户名表示切换用户

符号#是命令提示符,专属于root用户,同时#在脚本文件中表示注释的意思

符号$是命令提示符,专属于非root用户,同时还有很多特别的含义

[root@localhost StudyTest]# su
[root@localhost StudyTest]# su ht
[ht@localhost StudyTest]$ ls /home/jy1701/
ls: 无法访问/home/jy1701/: 没有那个文件或目录
[ht@localhost StudyTest]$ ls
1 2 3 4 5  English.txt
[ht@localhost StudyTest]$ chmod 777 English.txt
chmod: 更改"English.txt" 的权限: 不允许的操作
[ht@localhost StudyTest]$ su root
密码:
[root@localhost StudyTest]# 

注意:高权限用户向低权限用户切换不需要使用密码,地权限用户向高权限用户切换需要输入密码地低权限用户无法对文件进行加权限的操作

[root@localhost StudyTest]# ls
1 2 3 4 5  English.txt
[root@localhost StudyTest]# su ht
[ht@localhost StudyTest]$ ls
1 2 3 4 5  English.txt
[ht@localhost StudyTest]$ chmod +x English.txt
chmod: 更改"English.txt" 的权限: 不允许的操作
[ht@localhost StudyTest]$ sudo chmod +x English.txt

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] ht 的密码:
[ht@localhost StudyTest]$ ls
1 2 3 4 5  English.txt
[ht@localhost StudyTest]$ 

sudo命令在linux中可以暂时赋予普通用户管理员用户的权限,在以上的命令中我们使用sudo命令对English.txt文件的权限进行了添加将其,通过sudo命令将其设置为可执行文件可以看到该文件在普通用户不添加sudo的情况下无法完成添加权限的操作,在使用sudo后顺利的将其设置为可执行文件。

2.4:Bash Shell 和type命令

根据前面的描述终端工具与Linux shell交互命令和信息,linux shell 不止一种,可以为不同的用户设置不同的shell,目前通用的是bash shell,其也是一个用户程序,位置如下所示。

命令which 可以用来查看目录所在路径

[root@localhost bin]# which bash
/usr/bin/bash
[root@localhost bin]# 

除了日常接收用户输入的命令并显示结果外,bash还可以执行命令

[root@localhost bin]# bash -c "echo hi hi hi"
hi hi hi
[root@localhost bin]# 

同时bash还能定制命令,需要修改是可以更改它们位于用户根目录下,所以每个用户都可以控制bash的设置文件来定制与别人完全不同的命令,可以使用type来查看定制某个定制命令的具体表现

[root@localhost bin]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
[root@localhost bin]# 

在linux中ll命令可以使用alias的方法进行定义,源头也是ls命令,所以ll不是一个基础命令而能通过bash的设置文件从基础命令ls中定制出来

使用命令type -a 可以参看某个命令是否是由基本命令或是基本命令alias定义出来的

不同的linux中bash的位置命令:ll -a ~/.bash *查看用户家目录中bash下包含的所有文件

-rwxr-xr-x. 1 root root      32480 8月  12 2017 xset
-rwxr-xr-x. 1 root root      11368 8月  12 2017 xsetmode
-rwxr-xr-x. 1 root root      11400 8月  12 2017 xsetpointer
-rwxr-xr-x. 1 root root      19840 8月  12 2017 xsetroot
-rwxr-xr-x. 1 root root      50328 8月   9 2019 xsetwacom
-rwxr-xr-x. 1 root root      24072 10月  1 2020 xsltproc
-rwxr-xr-x. 1 root root      16144 8月  12 2017 xstdcmap
-rwxr-xr-x. 1 root root       1563 4月   1 2015 xulrunner
-rwxr-xr-x. 1 root root      11592 6月  10 2014 xvattr
-rwxr-xr-x. 1 root root      15616 10月 31 2018 xvinfo
-rwxr-xr-x. 1 root root    2475088 10月 14 2020 Xvnc
-rwxr-xr-x. 1 root root      41120 10月 31 2018 xwininfo
-rwxr-xr-x. 1 root root      14808 10月 14 2020 xxd
-rwxr-xr-x. 1 root root      75280 11月  5 2016 xz
lrwxrwxrwx. 1 root root          2 3月   6 09:40 xzcat -> xz
lrwxrwxrwx. 1 root root          6 3月   6 09:40 xzcmp -> xzdiff
-rwxr-xr-x. 1 root root      11472 11月  5 2016 xzdec
-rwxr-xr-x. 1 root root       6632 11月  5 2016 xzdiff
lrwxrwxrwx. 1 root root          6 3月   6 09:40 xzegrep -> xzgrep
lrwxrwxrwx. 1 root root          6 3月   6 09:40 xzfgrep -> xzgrep
-rwxr-xr-x. 1 root root       5628 11月  5 2016 xzgrep
-rwxr-xr-x. 1 root root       1802 11月  5 2016 xzless
-rwxr-xr-x. 1 root root       2161 11月  5 2016 xzmore
-rwxr-xr-x. 1 root root      55120 11月  6 2018 yelp
-rwxr-xr-x. 1 root root      28984 8月  20 2019 yes
lrwxrwxrwx. 1 root root          8 3月   6 09:40 ypdomainname -> hostname
-rwxr-xr-x. 1 root root        801 10月  2 2020 yum
-rwxr-xr-x. 1 root root      10189 5月  13 2020 yum-builddep
-rwxr-xr-x. 1 root root       9579 5月  13 2020 yum-config-manager
-rwxr-xr-x. 1 root root       8538 5月  13 2020 yum-debug-dump
-rwxr-xr-x. 1 root root       7903 5月  13 2020 yum-debug-restore
-rwxr-xr-x. 1 root root      11115 5月  13 2020 yumdownloader
-rwxr-xr-x. 1 root root      11031 5月  13 2020 yum-groups-manager
-rwxr-xr-x. 1 root root       1941 4月  11 2018 zcat
-rwxr-xr-x. 1 root root       1760 4月  11 2018 zcmp
-rwxr-xr-x. 1 root root       5768 4月  11 2018 zdiff
-rwxr-xr-x. 1 root root        123 4月  11 2018 zegrep
-rwxr-xr-x. 1 root root       1118 12月 29 2013 zenheiset
-rwxr-xr-x. 1 root root     103704 10月 31 2018 zenity
-rwxr-xr-x. 1 root root        123 4月  11 2018 zfgrep
-rwxr-xr-x. 1 root root       2144 4月  11 2018 zforce
-rwxr-xr-x. 1 root root       6132 4月  11 2018 zgrep
-rwxr-xr-x. 1 root root     215840 11月  6 2016 zip
-rwxr-xr-x. 1 root root     100456 11月  6 2016 zipcloak
-rwxr-xr-x. 1 root root       2953 10月 11 2008 zipgrep
-rwxr-xr-x. 2 root root     185512 4月   1 2020 zipinfo
-rwxr-xr-x. 1 root root      95984 11月  6 2016 zipnote
-rwxr-xr-x. 1 root root     100096 11月  6 2016 zipsplit
-rwxr-xr-x. 1 root root       2041 4月  11 2018 zless
-rwxr-xr-x. 1 root root       2859 4月  11 2018 zmore
-rwxr-xr-x. 1 root root       5343 4月  11 2018 znew
lrwxrwxrwx. 1 root root          6 3月  

其中.bashrc中可以放置自用定制命令,其中的内容如下所示

alias ll = 'ls -alF'

bash_history命令的作用是什么?

拓展:linux中我们安装部分软件是需要手动配置环境变量如hadoop,java等这个时候就需要使用到export命令:export命令在linux中用于指定环境变量的值。

2.5:查看当前的shell与ps命令

当需要知道当前使用的shell是bash shell 还是其他的shell可以使用ps命令进行查看

[root@localhost bin]# ps
   PID TTY          TIME CMD
  2972 pts/0    00:00:01 bash
  3364 pts/0    00:00:00 ps
[root@localhost bin]# 
// todo -----> 表示当前的远程终端存在两个shell一个是bash shell 一个是ps shell

命令:ps显示当前bash进程及其后台启动的进程

命令 :ps -A则会显示系统中的所有进程,注意这个A一定是大写的A小写的a没有用

[root@localhost bin]# ps -A
   PID TTY          TIME CMD
     1 ?        00:00:01 systemd
     2 ?        00:00:00 kthreadd
     4 ?        00:00:00 kworker/0:0H
     6 ?        00:00:00 ksoftirqd/0
     7 ?        00:00:00 migration/0
     8 ?        00:00:00 rcu_bh
     9 ?        00:00:00 rcu_sched
    10 ?        00:00:00 lru-add-drain
    11 ?        00:00:00 watchdog/0
    12 ?        00:00:00 watchdog/1
    13 ?        00:00:00 migration/1
    14 ?        00:00:00 ksoftirqd/1
    16 ?        00:00:00 kworker/1:0H
    17 ?        00:00:00 watchdog/2
    18 ?        00:00:00 migration/2
    19 ?        00:00:00 ksoftirqd/2
    21 ?        00:00:00 kworker/2:0H
    22 ?        00:00:00 watchdog/3
    23 ?        00:00:00 migration/3
    24 ?        00:00:00 ksoftirqd/3
    25 ?        00:00:00 kworker/3:0
    26 ?        00:00:00 kworker/3:0H
    28 ?        00:00:00 kdevtmpfs
    29 ?        00:00:00 netns
    30 ?        00:00:00 khungtaskd
    31 ?        00:00:00 writeback
    32 ?        00:00:00 kintegrityd
    33 ?        00:00:00 bioset
    34 ?        00:00:00 bioset
    35 ?        00:00:00 bioset
    36 ?        00:00:00 kblockd
    37 ?        00:00:00 md
    38 ?        00:00:00 edac-poller
    39 ?        00:00:00 watchdogd
    46 ?        00:00:00 kswapd0
    47 ?        00:00:00 ksmd
    48 ?        00:00:00 khugepaged
    49 ?        00:00:00 crypto
    57 ?        00:00:00 kthrotld
    58 ?        00:00:00 kworker/u256:1
    59 ?        00:00:00 kmpath_rdacd
    60 ?        00:00:00 kaluad
    61 ?        00:00:01 kworker/0:1
    62 ?        00:00:00 kpsmoused
    63 ?        00:00:00 kworker/0:2
    64 ?        00:00:00 ipv6_addrconf
    65 ?        00:00:00 kworker/1:1
    78 ?        00:00:00 deferwq
   114 ?        00:00:00 kauditd
   304 ?        00:00:00 nfit
   305 ?        00:00:00 ata_sff
   306 ?        00:00:00 scsi_eh_0
   307 ?        00:00:00 scsi_tmf_0
   308 ?        00:00:00 scsi_eh_1
   309 ?        00:00:00 scsi_tmf_1
   311 ?        00:00:00 kworker/u256:3
   312 ?        00:00:00 mpt_poll_0
   313 ?        00:00:00 mpt/0
   321 ?        00:00:00 scsi_eh_2
   322 ?        00:00:00 scsi_tmf_2
   324 ?        00:00:00 irq/16-vmwgfx
   325 ?        00:00:00 ttm_swap
   338 ?        00:00:00 kworker/1:2
   400 ?        00:00:00 kdmflush
   401 ?        00:00:00 bioset
   412 ?        00:00:00 kdmflush
   413 ?        00:00:00 bioset
   426 ?        00:00:00 bioset
   427 ?        00:00:00 xfsalloc
   428 ?        00:00:00 xfs_mru_cache
   429 ?        00:00:00 xfs-buf/dm-0
   430 ?        00:00:00 xfs-data/dm-0
   431 ?        00:00:00 xfs-conv/dm-0
   432 ?        00:00:00 xfs-cil/dm-0
   433 ?        00:00:00 xfs-reclaim/dm-
   434 ?        00:00:00 xfs-log/dm-0
   435 ?        00:00:00 xfs-eofblocks/d
   436 ?        00:00:00 xfsaild/dm-0
   437 ?        00:00:00 kworker/0:1H
   522 ?        00:00:00 systemd-journal
   539 ?        00:00:00 lvmetad
   561 ?        00:00:01 systemd-udevd
   665 ?        00:00:00 xfs-buf/sda1
   666 ?        00:00:00 xfs-data/sda1
   667 ?        00:00:00 xfs-conv/sda1
   668 ?        00:00:00 xfs-cil/sda1
   669 ?        00:00:00 xfs-reclaim/sda
   670 ?        00:00:00 xfs-log/sda1
   671 ?        00:00:00 xfs-eofblocks/s
   672 ?        00:00:00 xfsaild/sda1
   679 ?        00:00:00 kworker/3:1H
   713 ?        00:00:00 auditd
   715 ?        00:00:00 audispd
   717 ?        00:00:00 sedispatch
   719 ?        00:00:00 rpciod
   720 ?        00:00:00 xprtiod
   742 ?        00:00:00 rtkit-daemon
   743 ?        00:00:00 avahi-daemon
   745 ?        00:00:00 accounts-daemon
   746 ?        00:00:01 rngd
   747 ?        00:00:00 polkitd
   748 ?        00:00:00 rpcbind
   750 ?        00:00:00 dbus-daemon
   752 ?        00:00:00 avahi-daemon
   763 ?        00:00:00 ModemManager
   766 ?        00:00:00 lsmd
   767 ?        00:00:00 abrtd
   770 ?        00:00:00 udisksd
   772 ?        00:00:00 smartd
   773 ?        00:00:00 alsactl
   774 ?        00:00:00 abrt-watch-log
   784 ?        00:00:00 irqbalance
   786 ?        00:00:00 VGAuthSer

Time的作用是什么?

除了以上查看shell的方法外,我们还可以通过直接访问环境变量的方式查看当前使用的shell

[root@localhost usr]# cat ./etc/shell
cat: ./etc/shell: 没有那个文件或目录
[root@localhost usr]# cat ./etc/shells
cat: ./etc/shells: 没有那个文件或目录
[root@localhost usr]# 

当然没有shell的话会显示没有那个文件或者目录

2.6:后台运行与符号&

ps -aux的功能?

tcsh的命令提示与bash的不同

[root@localhost usr]# echo nihao &
[1] 3447
nihao
[root@localhost usr]# 
需要回车才能看到结果表示后台运行

 下面的这个命令,seq生成三个数后立即退出,xargs -i收到传递过来的数字参数后串行后台启动运行了三次sleep命令。

[root@localhost usr]# seq 3 | xargs -i sleep 10 &
[2] 3473
[1]   完成                  echo nihao
[root@localhost usr]# ps
   PID TTY          TIME CMD
  2972 pts/0    00:00:01 bash
  3473 pts/0    00:00:00 xargs
  3484 pts/0    00:00:00 sleep
  3485 pts/0    00:00:00 ps
[root@localhost usr]# ps
   PID TTY          TIME CMD
  2972 pts/0    00:00:01 bash
  3473 pts/0    00:00:00 xargs
  3484 pts/0    00:00:00 sleep
  3486 pts/0    00:00:00 ps
[root@localhost usr]# ps
   PID TTY          TIME CMD
  2972 pts/0    00:00:01 bash
  3473 pts/0    00:00:00 xargs
  3484 pts/0    00:00:00 sleep
  3487 pts/0    00:00:00 ps

第三章:目录与文件基础

Linux是一个多用户系统,每个用户还有自己独特的根目录,在linux中多个用户需要同时而不是分时在Linux上工作。

3.1:典型的Linux文件系统在根目录中的内容

在文件系统的根目录 / 下,有两个位置代表用户的目录,一个是/root表示用户的根目录,一个是/home表示linux中其他用户的总根目录,其下面又有对应于每个普通用户名多个子目录,因为是root超级用户,其根目录的位置和普通用户是有区别的。

符号~表示用户登录的缺省位置,既是用户自身的起始位置,也可以称之为用户的根目录,不同用户的根目录在文件系统中的位置是不同的。

在Linux中符号/还可以表示目录的从属关系如/home/z表示根目录下的home的子目录z的子目录

3.2:目录与文件的重命名

echo hi > a命令的作用是输出一个字符hi并创建文件a 将字符hi写入文件a中

mkdir b 创建的是一个目录 使用echo hi > b是不能将内容防止在目录中的

cp a b

cp a b/

cp a b/a

以上的三个命令作用完全相同,第一文件是无法覆盖目标的目录b的,如果可以覆盖的话文件a和目录a就会同名,所以cp a b的功能只能将文件放入目录。

3.3:当前目录,上一级目录,切换目录

符号.        表示当前的目录。

符号./       表示的也是当前目录,还有一个功能是执行脚本文件

符号..       表示的是当前目录的上一级目录

符号../      表示的也是当前目录的上一级目录

命令ls.      就相当于是ls

命令 find.  就等同于find

命令du.     就相当于是du

命令ls ..    表示的是查看当前目录的上一级目录

命令cd ..   表示的是返回当前目录的上级目录

命令cd .    表示什么都不做表示的就是cd

在这里我们需要注意的是cd的命令比较特殊,因为切换到当前的目录下没有意义,所以不带参数时cd 与ls和find就不相同。

cd 表示的是到用户的根目录中去

cd ~含义和cd是相同的

因为cd命令的用法比较简单这里就不一一的进行列举了

3.4:绝对路径,相对路径与pwd命令

pwd         命令查看用户当前所在的绝对路径

远程拷贝文件时最好知道文件的绝对路径

3.5:切换到前一个目录

在Linux中前一个目录并不等于上一级目录,其表示的是前一次所在的位置,上一次所在的位置可以是文件系统中的任意一个位置

命令: cd - 表示的是回到前一个位置

- 在bash中表示的是前一个位置,在正则表达式[ ]中表示的是范围

3.6:新建,复制和删除

在Linux中使用touch命令新建一个文件

如: touch test 表示新建一个名为test的文件

命令:echo hi > 1 表示建立一个文件1其中的内容是hi 加回车

命令:seq 100 >2 表示建立一个文件2其中该文件的行数为100行

在Linux中有时需要将终端直接作为编辑器输入若干行的内容并放入文件中

命令cat > 8

表示的是创建文件8然后在终端输入文件8的内容放进文件8中

新建二进制文件,有时需要生成一定字节数的二进制文件,或者以0x00填充或者是以随机字节的方式进行填充。

命令:dd if= /dev/zero of = 3 bs = 1K count = 1;

命令dd表示的意思是从源文件中复制指定数目的字节到目标文件中,如果要显示输出文件的二进制内容则要使用xxd命令。

3.7:移动文件命令

在linux中使用mv对文件进行移动

mv 5 7 表示的是将文件5的内容移动到文件7中

mv 6 ./7 表示将文件6的内容移动到当前目录下的文件7中,相当于是将文件6从新命名为文件7

mv 5 /4 表示将文件5放在文件4下

3.8:新建目录命令

在linux中使用mkdir命令进行新建目录

命令: mkdir page 表示的是新建一个名为page的文件

命令: mkdir /son/2/3 -p 表示的是连续新建文件-p是一个参数,表示的是在创建文件son的同时将文件son文件包含的子目录全部创建出来

3.9:拷贝,远程复制,删除命令

在linux中使用cp 命令对指定的文件进行拷贝,使用scp命令对指定的文件进行远程复制

命令 cp 1 2 表示将文件1复制为文件2

命令 cp -r 1 2 表示将目录1复制为目录2

Linux是典型的网络操作系统,因此,Linux中从网络上拷贝文件和从本地拷贝文件时没有本质上的区别的。

scp远程拷贝需要输入密码,当时该密码是以明文的方式显示出来的不能有效的保护隐私和数据的安全

Linux中的通配符和删除命令

命令:rm 1 表删除名称为1的文件

命令:rm -rf 2 表示将目录2强制删除

命令:rm -rf * 表示删除当前目录下的所有文件,这个需要谨慎的使用

在Linux中符号*表示的是通配符的意思,表示任意的符号都能匹配

符号*被用于指定文件的目录或者是名称是,表示的是任意的文件名字都匹配,所以cp -r * ..表示当前目录下的所有文件及目录拷贝到上一级目录。

在linux中通配符*提高了命令的灵活性但是用不好会带来负面的影响,因此使用以下的方式删除文件或者是目录不失为一种更好的方法

命令: ls | grep abc | xargs -i rm -rf {}

命令:   ll | find son/ | xargs -i rm -rf {}

3.9.1:显示与查找

命令:ls -a查看显示隐藏文件

命令:ls -F 查看当前文件下目录的根目录

命令: ll 以文件的形式显示当前目录下的文件

命令 : ls -alF 以长文件的形式显示当前目录下的所有文件包隐藏文件以及目录下的/目录

find命令:在Linux中find命令可以看做是ls命令的增强版命令,可以列出目录下所有的文件和目录,不但可以包含子目录,还可以指定多种搜索条件过滤出文件,得到某种后缀的文件。

过滤出所有含有Java的文件   find | "\.java"

符号\.在正则表达式中表示为.号,而点号的转义表示的是任意一个字符。

在Linux中find命令是一个十分强大的命令,例如删除一类bak的命令是

命令:find . type f -name "*.bak" -delete

命令:find |  grep | rm -rf {*.bak}

命令:find . 表示为当前的目录

Linux查看文件的命令cat,在Linux中使用cat命令对文件进行查看

在Linux中可以使用参数-n显示出文件的行号,可以使用-A参数显示出跳格和回车

以上是使用命令将随机生成的数加上行号,然后使用管道命令显示出空格和回车,然后使用sed命令将前面的空格替换成没有空格。

命令:cat f1 f2 f3 表示将三个文件依次打印出来并且按行拼接

命令:cat f * 将所有名字以f开头的文件依次打印出来

[root@localhost ht]# seq 3 | xargs -i touch f{}
[root@localhost ht]# ls
f1  f2  f3
[root@localhost ht]# cat f1 f2 f3
[root@localhost ht]# ls
f1  f2  f3
[root@localhost ht]# cat f *

命令:seq 10 |  xargs -i echo "echo \"I'm in file{}\" > f{}" > z.cmd

[root@localhost ht]# seq 10 |  xargs -i echo "echo \"I'm in file{}\" > f{}" > z.cmd
[root@localhost ht]# ls
f1  f2  f3  z.cmd
[root@localhost ht]# ./ z.c,d
-bash: ./: 是一个目录
[root@localhost ht]# ./ z.cmd
-bash: ./: 是一个目录
[root@localhost ht]# chmod + x z.cmd
chmod: 无法访问"x": 没有那个文件或目录
[root@localhost ht]# chmod +x z.cmd
[root@localhost ht]# ./z.cmd
[root@localhost ht]# ls
f1  f10  f2  f3  f4  f5  f6  f7  f8  f9  z.cmd
[root@localhost ht]# ll
总用量 44
-rw-r--r--. 1 root root  13 4月   4 09:43 f1
-rw-r--r--. 1 root root  14 4月   4 09:43 f10
-rw-r--r--. 1 root root  13 4月   4 09:43 f2
-rw-r--r--. 1 root root  13 4月   4 09:43 f3
-rw-r--r--. 1 root root  13 4月   4 09:43 f4
-rw-r--r--. 1 root root  13 4月   4 09:43 f5
-rw-r--r--. 1 root root  13 4月   4 09:43 f6
-rw-r--r--. 1 root root  13 4月   4 09:43 f7
-rw-r--r--. 1 root root  13 4月   4 09:43 f8
-rw-r--r--. 1 root root  13 4月   4 09:43 f9
-rwxr-xr-x. 1 root root 252 4月   4 09:42 z.cmd
[root@localhost ht]# 

命令:ls f * | sed 's/f/f /g' | sort -k 2 -g

[root@localhost ht]# ls f * | sed 's/f/f /g' | sort -k 2 -g
ls: 无法访问f: 没有那个文件或目录
z.cmd
f 1
f 2
f 3
f 4
f 5
f 6
f 7
f 8
f 9
f 10
[root@localhost ht]# 

 命令:ls f * | sed 's/f/f /g' | sort -k 2 -g | sed 's/ //g' | xargs -i cat {}

[root@localhost ht]# ls f * | sed 's/f/f /g' | sort -k 2 -g | sed 's/ //g' | xargs -i cat {}
ls: 无法访问f: 没有那个文件或目录
echo "I'm in file1" > f1
echo "I'm in file2" > f2
echo "I'm in file3" > f3
echo "I'm in file4" > f4
echo "I'm in file5" > f5
echo "I'm in file6" > f6
echo "I'm in file7" > f7
echo "I'm in file8" > f8
echo "I'm in file9" > f9
echo "I'm in file10" > f10
I'm in file1
I'm in file2
I'm in file3
I'm in file4
I'm in file5
I'm in file6
I'm in file7
I'm in file8
I'm in file9
I'm in file10

 seq 10 | sed 's/^/f/g' | xargs -i cat {}

[root@localhost ht]# seq 10 | sed 's/^/f/g' | xargs -i cat {}
I'm in file1
I'm in file2
I'm in file3
I'm in file4
I'm in file5
I'm in file6
I'm in file7
I'm in file8
I'm in file9
I'm in file10
[root@localhost ht]# 

查看文件行数命令WC

命令: find | grep "\.java$" | xargs -i cat {} | wc

[root@localhost lib]# find | grep "\.java$" | xrags -i cat {} | wc
bash: xrags: 未找到命令...
相似命令是: 'xargs'
      0       0       0
[root@localhost lib]# find | grep "\^java$" | wc
      0       0       0
[root@localhost lib]# find | grep *java$ | wc
      0       0       0
[root@localhost lib]# find | grep "\.java$" | xargs -i cat {} | wc
      0       0       0
[root@localhost lib]# seq 5| awk 'END{print NR}'
5
[root@localhost lib]# seq 5 | grep -c ".*"
5
[root@localhost lib]# seq 5 | sed 's/.//g' | uniq -c
      5 
[root@localhost lib]# 

3.9.2:行数统计与去除重复

uniq:命令行数统计与去除重复命令

uniq:命令可以将相连的若干行化为一行,也可以统计行数

......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值