盒子
盒子
文章目录
  1. 1. 监测磁盘空间
    1. 1.1 df 命令
    2. 1.2 du 命令
  2. 2. 处理数据文件
    1. 2.1 sort 排序数据
    2. 2.2 搜索数据
    3. 2.3 压缩数据
      1. 2.3.1 bzip2 命令
      2. 2.3.2 gzip 命令
      3. 2.3.3 zip 命令
      4. 2.3.4 tar 命令
  3. 3. 环境变量
    1. 3.1 查看环境变量
      1. 3.1.1 printenv命令
      2. 3.1.2 echo 命令
      3. 3.1.3 set 命令
    2. 3.2 设置局部环境变量
    3. 3.3 设置全局环境变量
    4. 3.4 unset 删除环境变量
    5. 3.5 默认的 shell 环境变量
    6. 3.6 可变数组
  4. 4. Bash shell 的启动文件
    1. 4.1 非登录 shell 的交互 shell(例如你在命令行提示符下敲入 bash 启动)
    2. 4.2 非交互式 shell (系统执行 shell 脚本 时用的就是这种 shell)
  5. 5. 别名
  6. 6. Vim 文本编辑器
    1. 6.1 普通模式
    2. 6.2 命令行模式
    3. 6.3 复制和粘贴
    4. 6.4 可视模式
    5. 6.5 查找和替换
    6. 6.5 插入模式
  7. 7. 文件权限
    1. 7.1 查看权限
    2. 7.2 改变权限
      1. 7.2.1 八进制模式
      2. 7.2.2 符号模式
  8. 8. wc 命令
  9. 9. shell 脚本基础
  10. 10. 反引号
  11. 11. 重定向
    1. 11.1 输出重定向
    2. 11.2 输入重定向
    3. 11.3 管道

Linux 操作系统(二)

1. 监测磁盘空间

1.1 df 命令

1
2
3
4
5
6
7
[root@master01 hdfsData]# df	// 查看所有已挂载磁盘的使用情况
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/centos-root 52403200 8191828 44211372 16% /
devtmpfs 917596 0 917596 0% /dev
tmpfs 933512 0 933512 0% /dev/shm
tmpfs 933512 9284 924228 1% /run
...

命令输出格式:

  • Filesystem:设备文件位置
  • Size:设备总空间大小
  • Used:已使用空间大小
  • Avail:可用空间大小
  • Use%:已用空间所占的比例
  • Mounted on:设备挂载位置
1
2
3
4
5
6
7
[root@master01 hdfsData]# df -h		// -h 会将输出的磁盘空间按人类可读的形式显示,通常用 M、G 代替
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 7.9G 43G 16% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.1M 903M 1% /run
...

当你发现某个磁盘快没有存储空间,需要查找删除无用的大文件怎么做呢?

1.2 du 命令

du 显示某个特定目录的磁盘使用情况(默认是当前目录)
du 会显示当前目录下的所有文件、目录和子目录的磁盘使用情况。

那么如何知道每个单独的文件和目录占用 了多大的磁盘空间?
-c 显示所有已列出文件总的大小
-h 按人类可读的格式输出大小
-s 显示每个输出参数的总计

1
2
3
4
5
6
7
8
[root@master01 hdfsData]# du -csh *
104K Flight1.csv
4.0K hello.sh
140K phone.csv
4.0K student
124K test
100M traffic
101M total

2. 处理数据文件

2.1 sort 排序数据

默认 sort 会按照字典序来排序文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@master01 hdfsData]# cat test 
jai
djoa
adfjig
eff
arb
...

[root@master01 hdfsData]# sort test
adfjig
arb
b
b
djoa
...

sort 命令会把数字当做字符执行标准的字符排序。
sort -n test // -n 选项会让 sort 把数字识别成数字而不是字符。
man sort

sort 命令参数
图片14.png
图片15.png

根据第三列用户 ID 进行数值排序

1
2
3
4
5
6
7
[root@master01 hdfsData]# sort -t ":" -k 3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
...

反向排序

1
2
3
4
5
6
7
[root@master01 hdfsData]# sort -t ":" -k 3 -nr /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
miracle:x:1000:1000:miracle:/home/miracle:/bin/bash
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:996:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:995:User for colord:/var/lib/colord:/sbin/nologin
...

管道符加入排序要求,更容易看到目录下哪个文件占用空间最多

1
2
3
4
5
6
7
[root@master01 hdfsData]# du -s * | sort -nr
102328 traffic
140 phone.csv
104 Flight1.csv
4 test
4 student
4 hello.sh

2.2 搜索数据

grep 命令会到输入中或你指定的文件中查找包含匹配指定模式的字符的行。

筛选出包含 a 字符的行

1
2
3
4
5
[root@master01 hdfsData]# grep a test 
jawoef
bra
ba
a

反向搜索(输出不匹配该模式的行)-v

1
2
3
4
5
6
7
[root@master01 hdfsData]# grep -v a test 
eerg

sergg
e
rrv
...

显示匹配所在的行的行号

1
2
3
4
5
[root@master01 hdfsData]# grep -n a test 
1:jawoef
15:bra
19:ba
22:a

显示匹配的行的行数

1
2
[root@master01 hdfsData]# grep -c a test 	// -c 选项只显示匹配行数,不显示内容
4

正则匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@master01 hdfsData]# grep -e a -e b test 	// 可以添加多个正则匹配,满足其一即可
jawoef
brh
bra
ba
brtnrn
a

[root@master01 hdfsData]# grep -e [ab] test
jawoef
brh
bra
ba
brtnrn
a

2.3 压缩数据

图片16.png

compress 工具可以忽略,因为已经在 Linux 系统上很少看到了。

2.3.1 bzip2 命令

  • bzip2:用来压缩文件(逐渐普及的新压缩包)
  • bzcat:用来显示压缩的文本文件的内容
  • bunzip2:用来解压缩 .bz2 文件
1
bzip2 test	// 默认情况下,bzip2 命令尝试压缩原始文件,并用压缩后的文件(同样的文件名后加 .bz2 扩展名)替换它

观察解压缩前后文件大小变化
图片17.png

bzcat 查看压缩文件内容

1
2
3
4
5
6
7
8
[root@master01 hdfsData]# bzcat test.bz2 
jawoef
eerg

sergg
e
rrv
...

2.3.2 gzip 命令

到目前为止,Linux 上最流行的文件压缩工具就是 gzip 工具了,gzip 是 GNU 项目发起的替代原来 Unix 的 compress 工具的压缩工具。

  • gzip:用来压缩文件
  • zcat:用来查看压缩过的文本文件的内容
  • gunzip:用来解压文件
1
2
3
4
gzip test	// 压缩
zcat test.gz // 查看压缩文本文件内容
gunzip test.gz // 解压文件
gzip -r test // -r 会递归将目录下所有的文件都进行 gz 压缩,针对大文件,压缩效率更高。

2.3.3 zip 命令

  • zip:创建一个压缩文件
  • zipsplit:将现有 zip 文件分割成多个更小的固定大小的文件
  • unzip:从压缩过的 zip 文件中提取文件和目录

zip 使用方式 [压缩后的文件名] [需要进行压缩的文件名]:如果压缩后文件名不带 .zip 后缀,会自动加入。

1
2
3
4
5
6
7
8
9
10
11
[root@master01 hdfsData]# zip test1 test
adding: test (deflated 25%)
[root@master01 hdfsData]# ll
total 102588
-rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
-rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
-rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
-rw-r--r-- 1 root root 45 Sep 2 11:11 student
-rw-r--r-- 1 root root 75 Sep 20 10:15 test
-rw-r--r-- 1 root root 214 Sep 20 14:20 test1.zip
-rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic

zip 工具的强大之处在于,它能够将整个目录下的文件都压缩进单个文件。这让它成为归档整个目录结构的理想工具。

1
2
3
4
zip -r hadoop hadoop-2.7.5
unzip hadoop.zip

zipsplit -n 200000 hadoop.zip // 将 zip 文件分割成若干小文件,大小不超过 -n 后的参数值

2.3.4 tar 命令

zip 命令能够很好的将数据压缩和归档进单个文件,但它并不是 Unix 和 Linux 中的标准归档工具。目前,Unix 和 Linux 最广泛使用的归档工具(将多个文件和目录归档到单个文件)是 tar 命令:
图片18.png
图片19.png

有些选项经常一起使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
tar -cvf hadoop.tar hadoop-2.7.5/
[root@master01 hdfsData]# tar -cvf a.tar student test // 可以归档多个文件,以空格分隔拼接
student
test
[root@master01 hdfsData]# ll
total 102596
-rw-r--r-- 1 root root 10240 Sep 23 09:58 a.tar
-rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
-rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
-rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
-rw-r--r-- 1 root root 45 Sep 2 11:11 student
-rw-r--r-- 1 root root 75 Sep 20 10:15 test
-rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic
[root@master01 hdfsData]# tar -tf a.tar // 列出 a.tar 的内容,但不解压文件
student
test

tar -xvf a.tar // 从 a.tar 中提取内容

tar -zcvf b.tgz student test // 归档文件并使用 gzip 压缩
tar -zxvf b.tgz // 提取 gzip 解压后的内容

:tgz 和 tar.gz 是同一种格式,不同写法。

3. 环境变量

Base shell 用环境变量来存储有关 shell 会话和工作环境的信息。
环境变量分为两类:全局变量局部变量

全局变量:不仅对 shell 会话可见,对所有 shell 创建的子进程也可见。
局部变量:只对创建它们的 shell 可见,即只能在定义它们的进程中可见。

系统环境变量一律使用全大写字母以区别普通用户的环境变量。

3.1 查看环境变量

3.1.1 printenv命令

1
2
3
4
5
6
7
[root@master01 hdfsData]# printenv 	// 用于查看所有全局变量
XDG_SESSION_ID=295
SPARK_HOME=/opt/modules/spark243
HOSTNAME=master01
TERM=xterm
SHELL=/bin/bash
...

3.1.2 echo 命令

用于打印信息,并可用于查看环境变量的值,当引用环境变量时,必须在环境变量的名称前放置一个 $ 符号:

1
2
[root@master01 hdfsData]# echo $HOME
/root

3.1.3 set 命令

会显示为某个特定进程设置的所有环境变量(全局变量和局部变量),可以看到 printenv 命令显示的全局环境变量都在 set 命令的输出中。

3.2 设置局部环境变量

1
2
3
4
5
6
[root@master01 hdfsData]# test=testing
[root@master01 hdfsData]# echo $test
testing
[root@master01 hdfsData]# test1="a b c" // 字符串包含空格时一定要加引号
[root@master01 hdfsData]# echo $test1
a b c

3.3 设置全局环境变量

1
2
3
4
5
[root@master01 ~]# test=hello
[root@master01 ~]# export test
[root@master01 ~]# export test=hello
[root@master01 ~]# echo $test
hello

3.4 unset 删除环境变量

1
unset test

3.5 默认的 shell 环境变量

shell 交互式命令行提示符就是 CLI(Command Line Interface)
列举一些 bash shell 的默认环境变量:
图片20.png
图片21.png

1
2
[root@master01 ~]# echo $PATH
/opt/modules/jdk1.8.0_181/bin:/opt/modules/zookeeper-3.4.14/bin:/opt/modules/spark243/sbin:/opt/modules/spark243/bin:/opt/modules/hadoop277/sbin:/opt/modules/hadoop277/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

PATH 中的每个目录都有冒号分隔。PATH 变量同时显示了 shell 查找命令的顺序。
PATH 定义了命令行输入命令的搜索路径。

如果想要在虚拟目录中的任何位置执行某个可执行程序,就把这个可执行程序的目录添加到 PATH 中。
程序员通常用的办法是将单点符也加入到 PATH 环境变量里。这个单点符代表当前目录。

3.6 可变数组

环境变量很好的一个功能是它们可以作为数组使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@master01 ~]# arr=(1 2 3 4 5)	// 利用环境变量定义数组
[root@master01 ~]# echo $arr // 只显示数组第一个值
1
[root@master01 ~]# echo $arr[3] // 错误的引用方式
1[3]
[root@master01 ~]# echo ${arr[3]} // 正确的引用方式
4
[root@master01 ~]# echo ${arr[*]} // * 显示所有
1 2 3 4 5
[root@master01 ~]# echo ${arr[8]} // 超出数组长度,显示空

[root@master01 ~]# arr[0]=5 // 可以根据索引改变数组值
[root@master01 ~]# echo ${arr[*]}
5 2 3 4 5
[root@master01 ~]# unset arr[0] // 删除索引值
[root@master01 ~]# echo ${arr[*]}
2 3 4 5
[root@master01 ~]# echo ${arr[0]}

[root@master01 ~]# echo ${arr[1]} // 索引值为空,索引位置保留。
2
[root@master01 ~]# unset arr // 删除整个数组
[root@master01 ~]# echo ${arr[*]}

4. Bash shell 的启动文件

bash shell 检查的启动文件取决于你启动 bash shell 的方式。
登录时当做默认登录 shell
/etc/profile > ~/.bash_profile > ~/.bash_login > ~/.profile
后三个 $HOME 下的启动文件提供了一个用户专属的启动文件来定义用户专有的环境变量,它们是隐藏文件。~/.bash_profile 启动文件会去首先执行 HOME 目录中叫 .bashrc 的启动文件。~/.bashrc 又首先会执行叫 /etc/bashrc 的启动文件。

4.1 非登录 shell 的交互 shell(例如你在命令行提示符下敲入 bash 启动)

只会执行 ~/.bashrc 文件

通用的 /etc/bashrc 启动文件会被系统上每个启动交互式 shell 会话的用户执行。

4.2 非交互式 shell (系统执行 shell 脚本 时用的就是这种 shell)

默认不加载启动文件。

5. 别名

命令别名允许为通用命令能创建一个别名,这样可以用最少的键入调用想要的命令。

1
2
3
4
5
6
7
[root@master01 ~]# alias -p	// 查看已有的别名列表
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
...
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@master01 ~]# alias li='ls -ilaF'	// 创建自己的命令别名
注:命令别名的行为和局部变量一致,只在定义它们的 shell 进程中有效。
[root@master01 ~]# bash
[root@master01 ~]# li
bash: li: command not found...
[root@master01 ~]# exit
exit
[root@master01 ~]# li
total 160
100663361 drwxr-xr-x. 17 root root 4096 Sep 23 11:15 ./
64 dr-xr-xr-x. 17 root root 244 Jul 19 02:54 ../
100663372 -rw-------. 1 root root 1590 Jul 19 07:58 anaconda-ks.cfg
...

6. Vim 文本编辑器

Vim 编辑器使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行,在文件中移动,以及插入、编辑和替换文本。
Vim 编辑器在内存缓冲区中处理数据。不要用来打开超大文件,否则会启动很慢并且会占用很多内存。

Vim 编辑器有几种操作模式:普通模式,插入模式,命令行模式,可视模式

6.1 普通模式

在你刚打开要编辑的文件,Vim 编辑器会进入普通模式,在普通模式中 Vim 编辑器会将按键解释成命令。在普通模式你可以用方向键在文本区域移动光标。
除了方向键,其他的特殊键位:
图片22.png
图片23.png

编辑数据的特殊键位:
图片24.png
图片25.png

有些编辑命令允许使用数据修饰符来指定重复该命令多少次,例如:5x 删除从光标当前位置开始的两个字符,命令 5dd 会阐述从光标当前所在行开始的 5 行。

6.2 命令行模式

命令行模式提供了一个可供输入额外命令来控制 Vim 中行为的交互式命令。
要进入命令行模式,在普通模式下按下冒号键

命令行模式的特殊命令:
图片26.png
set number 显示行号

6.3 复制和粘贴

在普通模式下,
剪切:当使用 x 和 dd 等删除操作删除数据时,实际上它会将数据保存在一个单独的寄存位置中,你可以使用 p 命令来取回数据(p 命令会将文本插入到当前光标之后)。
复制:yy 复制整行,yw 复制单词,y$ 表示复制到行尾,复制后用 p 命令粘贴,自定义复制可以用可视模式。

6.4 可视模式

会在你移动光标时高亮显示选中的文本。要进入可视模式,移动光标到要选中的位置,按下 v 键。在覆盖了要复制的文本后,按 y 键来激活复制命令,使用 p 命令粘贴。
在覆盖了要剪切的文本后,按下 x 或 d 键来激活删除命令,使用 p 命令粘贴。

6.5 查找和替换

查找:在普通模式下按下划线(/)键,输入要查找的文本按回车键,光标会调到文本出现的下一个位置,如果要继续查找同一个单词,使用 n 键表示 next 下一个。

替换:在命令行模式下执行
:s/old/new/g 或 :s/old/new // 替换 old 下一次出现的地方,用 new 来替换
:n,m/old/new/g // 替换行号 n 和 m 之间所有 old
:%s/old/new/g // 替换整个文件中的所有 old

6.5 插入模式

在插入模式下,Vim 会将你在当前光标位置输入的每个键都插入到缓冲区。要进入插入模式,按下 i 键。要退出插入模式回到普通模式,按下键盘上的退出键(esc)。

7. 文件权限

7.1 查看权限

1
2
3
4
5
6
7
8
[root@master01 ~]# ll
total 80
-rw-------. 1 root root 1590 Jul 19 07:58 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Jul 19 00:11 Desktop
drwxr-xr-x. 2 root root 6 Jul 19 00:11 Documents
drwxr-xr-x. 2 root root 6 Jul 19 00:11 Downloads
-rw-r--r--. 1 root root 1618 Jul 19 00:02 initial-setup-ks.cfg
...

-:代表文件
d:代表目录
l:代表符号链接
c:代表字符型设备
b:代表块设备
n:代表网络设备

3组三字符的码,每一组三字符码表示三重访问权限:
r:代表可读的
w:代表可写的
x:代表对象是可执行的
图片27.png

使用八进制模式的安全性设置来表示这 3 组 rwx 权限的值
图片28.png

7.2 改变权限

chmod 命令用来改变文件和目录的安全性设置。chmod 后可跟八进制模式或符号模式来设置安全性设置。八进制模式直接赋予文件的标准的3位八进制权限码。

7.2.1 八进制模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@master01 hdfsData]# touch test
[root@master01 hdfsData]# ll
total 102580
-rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
-rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
-rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
-rw-r--r-- 1 root root 45 Sep 2 11:11 student
-rw-r--r-- 1 root root 0 Sep 25 09:43 test
-rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic
[root@master01 hdfsData]# chmod 760 test
[root@master01 hdfsData]# ll
total 102580
-rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
-rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
-rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
-rw-r--r-- 1 root root 45 Sep 2 11:11 student
-rwxrw---- 1 root root 0 Sep 25 09:43 test
-rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic

7.2.2 符号模式

[ugoa][+-=][rwxXugo]
u 代表用户,g 代表组,o 代表其他,a 代表上述所有。

  • 代表增加权限,- 代表移除权限,= 代表将权限设置成后面的值。
    X 如果对象是目录,则赋予执行权限,u 将权限设置成属主一致,g 将权限设置成属组一致,o 将权限设置成跟其他用户一致。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    [root@master01 hdfsData]# chmod g+x test 
    [root@master01 hdfsData]# ll
    total 102580
    -rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
    -rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
    -rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
    -rw-r--r-- 1 root root 45 Sep 2 11:11 student
    -rwxrwx--- 1 root root 0 Sep 25 09:43 test
    -rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic
    [root@master01 hdfsData]# chmod o+u test
    [root@master01 hdfsData]# ll
    total 102580
    -rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
    -rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
    -rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
    -rw-r--r-- 1 root root 45 Sep 2 11:11 student
    -rwxrwxrwx 1 root root 0 Sep 25 09:43 test
    -rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic
    [root@master01 hdfsData]# chmod o-w test
    [root@master01 hdfsData]# ll
    total 102580
    -rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
    -rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
    -rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
    -rw-r--r-- 1 root root 45 Sep 2 11:11 student
    -rwxrwxr-x 1 root root 0 Sep 25 09:43 test
    -rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic
    [root@master01 hdfsData]# chmod o=g test
    [root@master01 hdfsData]# ll
    total 102580
    -rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
    -rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
    -rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
    -rw-r--r-- 1 root root 45 Sep 2 11:11 student
    -rwxrwxrwx 1 root root 0 Sep 25 09:43 test
    -rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic
    [root@master01 hdfsData]# chmod u-rwx test
    [root@master01 hdfsData]# ll
    total 102580
    -rw-r--r-- 1 root root 103626 Jul 23 22:32 Flight1.csv
    -rwxr-xr-x 1 root root 56 Sep 19 19:05 hello.sh
    -rw-r--r-- 1 root root 140293 Sep 2 15:14 phone.csv
    -rw-r--r-- 1 root root 45 Sep 2 11:11 student
    ----rwxrwx 1 root root 0 Sep 25 09:43 test
    -rw-r--r-- 1 root root 104783207 Aug 14 16:30 traffic

chmod 命令还提供了一些选项,-R 会把权限递归地作用到文件和子目录中

1
chmod -R u+rwx tmp3

8. wc 命令

wc 命令后面跟文件,它默认会输出4个值。
文本的行数; // -l
文本的词数; // -w
文本的字节数; // -c
文件名

1
2
3
4
[root@master01 hdfsData]# wc phone.csv 
542 2106 140293 phone.csv
[root@master01 hdfsData]# wc traffic
1000000 2000000 104783207 traffic

9. shell 脚本基础

shell 脚本的关键点在于可以输出多个命令并处理每个命令的结果,而非像之前的 shell 命令行交互界面上每次键入一条命令。

创建 shell 脚本时,需要在文件的第一行指定要使用的解析器

#! bin/bash
通常在 shell 脚本的行里,# 用做注释行,shell 脚本中 的注释行是不被 shell 执行的。但第一行是个特例,它指定执行的解析器。

10. 反引号

反引号和波浪线 ~ 位于同一键位
反引号允许你把 shell 命令的输出赋给变量。

1
2
3
4
5
6
[root@master01 hdfsData]# test=`date`
[root@master01 hdfsData]# echo $test
Wed Sep 25 10:12:49 CST 2019
[root@master01 hdfsData]# test=`echo ''hello world''`
[root@master01 hdfsData]# echo $test
hello world

11. 重定向

bash shell 提供了一些操作符允许你将某个命令的输入输出重定向到另一个位置(比如文件上)

11.1 输出重定向

将命令的输出发送到一个文件中,两种操作符 > >>

1
2
3
4
5
6
7
[root@master01 hdfsData]# date > file
[root@master01 hdfsData]# cat file
Wed Sep 25 10:16:00 CST 2019
[root@master01 hdfsData]# date >> file
[root@master01 hdfsData]# cat file
Wed Sep 25 10:16:00 CST 2019
Wed Sep 25 10:16:08 CST 2019

:文件不存在默认创建,如果文件存在,则会用新的文件数据覆盖已经存在的文件

:文件不存在默认创建,如果文件存在,则会追加数据。

11.2 输入重定向

< :将文件的内容重定向到命令

1
2
3
4
[root@master01 hdfsData]# wc < file
2 12 58
[root@master01 hdfsData]# wc file
2 12 58 file

内联输入重定向符号 <<
允许你在命令行上指定输入重定向的数据,你必须指定一个文本标记来划分输入数据的开始和结尾。你可以用任何字符串的值来作为文本标记,但在数据的开始结尾必须一致。

1
2
3
4
5
6
7
8
[root@master01 hdfsData]# wc << aa 
> hello world
> thanks
> ;
> aa
3 4 21
[root@master01 hdfsData]# echo $PS2
>

shell 会使用 PS2 环境变量定义的次提示符来提示输入数据。

11.3 管道

取代将命令的输出重定向到文件,你可以重定向输出到另一个命令,这个过程称为管道连接。
不要以为管道链接会一个一个运行,Linux 系统实际会同时运行这两个命令,在系统内部将 它们连接起来。在第一个命令产生输出的同时,输出会被立即送给第二个命令。传输数据不会用到任何中间文件或缓冲区域。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@master01 hdfsData]# ls > file 
[root@master01 hdfsData]# cat file
file
Flight1.csv
hello.sh
phone.csv
student
test
traffic
[root@master01 hdfsData]# sort < file
file
Flight1.csv
hello.sh
phone.csv
student
test
traffic
[root@master01 hdfsData]# ls | sort
file
Flight1.csv
hello.sh
phone.csv
student
test
traffic
支持一下
扫一扫,支持forsigner
  • 微信扫一扫
  • 支付宝扫一扫