9.Shell编程
9.1.正则表达式
1、 正则表达式与通配符
a) 正则表达式用来在文件中匹配符合条件的字符串,正则包含匹配。grep,awk,sed等命令可以支持正则表达式。
b) 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls,find,cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
2、基础正则表达式
元字符 |
作用 |
* |
前一个字符匹配0次或任意多次 |
. |
匹配除了换行符外任意一个字符 |
^ |
匹配行首。例如:^hello会匹配以hello开头的行 |
$ |
匹配我行尾。例如:hello$会匹配以hello结尾的行 |
[] |
匹配中括号中指的任意一个字符,只匹配一个字符。 例如:[aeiou]匹配任意一个元音字母,[0-9]匹配任意一个数字,[a-z][0-9]匹配小写字母和一位数字构成的2位字符。 |
[^] |
匹配除中括号内的字符以外的任意一个字符。 例如:[^0-9]匹配任意一个非数字字符,[^a-z]表示任意一位非小写字母 |
\ |
转义符。用于取消特殊符号的含义。 |
\{n\} |
表示其前面的字符恰好出现n次。 例如:[0-9]\{4\}匹配4位数字,[1][3-8][0-9]\{9\}匹配手机号码。 |
\{n,\} |
表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}表示两位及以上的数字 |
\{n,m\} |
表示其前面的字符至少出现n次,最多出现m次。 例如:[a-z]\{6,8\}匹配6到8位的小写字母。 |
匹配所有内容,包括空白行。因为*表示a匹配0次或任意多次,就是没有a一样会匹配。
grep "a*" testfile
匹配至少包含有一个a的行。*表达式是对其前一个字符有效,故b有无都可以,但是a要必须有。
grep "ab*" testfile
匹配至少包含2个连续a的字符串
grep "aab*" testfile
匹配至少包含4个连续a的字符串
grep "aaaab*" testfile
匹配在s和d这2个字母之间一定有2个字符的单词
grep “s..d” testfile
匹配在s和d之间有任意字符
grep “s.*d” testfile
匹配任意内容
grep “.*” testfile
匹配空白行
grep –n “^$” testfile
9.2.字符串截取命令
9.2.1.cut字段提取命令
grep是提取的行,cut提取的是列。
语法:cut [选项] 文件名
-f 列号:提取第几列
-d 分隔符:按照指定分隔符分隔列
成绩单:中间是Tab键,不能是空格,否则cut匹配不了
[root@localhost ~]# cat student.xt
ID Name gender Mark
1 xiaoliu M 98
2 lisi M 99
3 wangwu M 100
提取第2列:Name
[root@localhost ~]# cut -f 2 student.xt
Name
xiaoliu
lisi
wangwu
第取2,4列:列之间逗号分隔即可
[root@localhost ~]# cut -f 2,4 student.xt
Name Mark
xiaoliu 98
lisi 99
wangwu 100
cut命令的默认分隔符是一个制作符(Tab键),通过-d选项可以指定分隔符
[root@localhost ~]# cut -d : -f 1,3 /etc/passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
games:12
ftp:14
nobody:99
systemd-network:192
dbus:81
polkitd:999
postfix:89
sshd:74
test:1000
test2:1001
现在假设要删除普通用户,要如何做?
登录Shell是/bin/bash的才可以登录的,普通用户都是这个Shell
如下命令提取出来所有普通用户的用户名,要删除就方便了
[root@localhost ~]# cat /etc/passwd|grep /bin/bash|grep -v root|cut -d : -f 1
test
test2
cut命令的局限性
cut的分隔符必须是制表符,或者具体的分隔符,例如冒号:等。
如下所示:cut命令并没有起作用,这个是因为分隔符不是制表符,而是空格
[root@localhost ~]# df -h|cut -f 5
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 17G 1.2G 16G 7% /
devtmpfs 446M 0 446M 0% /dev
tmpfs 456M 0 456M 0% /dev/shm
tmpfs 456M 6.1M 450M 2% /run
tmpfs 456M 0 456M 0% /sys/fs/cgroup
/dev/sda1 1014M 125M 890M 13% /boot
tmpfs 92M 0 92M 0% /run/user/0
[root@localhost ~]#
如下所示指定空格作为分隔时,匹配出来的是空白,是因为cut命令只接收一个空格做为分隔,所以分隔符为空格时,cut命令使用起来并不是非常符合我们想像的那样。
[root@localhost ~]# df -h|cut -f 5 -d " "
[root@localhost ~]#
9.2.2.printf格式化打印命令
格式化打印命令
语法:printf ‘输出类型输出格式’ 输出内容
输出类型:
输出类型 |
作用 |
%ns |
输出字符串。n是数字,表示输出几个字符 |
%ni |
输出整数。n是数字,表示输出几个数字 |
%m.nf |
输出浮点数。m和n是数字,表示输出的浮点数全部位数和小数位数。 如%8.2f代表输出8位整数,其中2位是小数,6位是整数。 |
输出格式:
输出格式 |
作用 |
\a |
输出警告声音 |
\b |
输出退格键,也就是Baskspace键 |
\f |
清除屏幕 |
\n |
换行 |
\r |
回车,也就是Enter键 |
\t |
水平输出退格键,也就是Tab键 |
\v |
垂直输出退格键,也就是Tab键 |
基本输出,没有换行
[root@localhost ~]# printf %s 1 2 3 4 5 6
123456[root@localhost ~]#
%s都输出了,是因为输出类型需要使用单引号括起来
123456[root@localhost ~]# printf %s %s %s 1 2 3 4 5 6
%s%s123456[root@localhost ~]#
正确输出:
[root@localhost ~]# printf '%s %s %s\n' 1 2 3 4 5 6
1 2 3
4 5 6
[root@localhost ~]#
printf不支持后面根文件名,读取文件;也不支持通过管道符来输入格式化内容,需要使用如下方式:
如下所示,但是格式全乱掉了:
[root@localhost ~]# printf '%s' $(cat student.xt)
IDNamegenderMark1xiaoliuM982lisiM993wangwuM100[root@localhost ~]#
printf通常情况下和awk命令一起使用。
通过指定格式,可以将文件内容输出我们想要的格式:
[root@localhost ~]# printf '%s\t%s\t%s\t%s\n' $(cat student.xt)
ID Name gender Mark
1 xiaoliu M 98
2 lisi M 99
3 wangwu M 100
[root@localhost ~]#
在awk命令的输出中支持print和printf命令
print:print会在每个输出之后自动加入一个换行符,Linux默认没有print命令,是awk的。
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加换行符。
9.2.3.awk
cut局限性是空格支持不是非常完美。
awk命令也是提取列内容的。支持管道符。但是比较复杂,通常cut能完成的,还是用cut
1、awk
语法:awk ‘条件1{动作1} 条件2{动作2}...’ 文件名
条件:
一般使用关系表达式作为条件,条件非常多,简单举例几个:
x>10 判断变量x是否大于10
x>=10 大于等于
x<=10 小于等于
主要的动作:
格式化输出
流程控制语句
条件可以省略,直接执行动作
[root@localhost ~]# awk '{printf $2 "\t" $4"\n"}' student.xt
Name Mark
xiaoliu 98
lisi 99
wangwu 100
[root@localhost ~]#
通过awk命令就可以提取df命令的输出了:
[root@localhost ~]# df -h|awk '{printf $5 "\t" $6"\n"}'
Use% Mounted
7% /
0% /dev
0% /dev/shm
2% /run
0% /sys/fs/cgroup
13% /boot
0% /run/user/0
[root@localhost ~]#
2、BEGIN
开始,是大写,表示的是执行后面所有动作之前,执行BEGIN紧跟的动作。
[root@localhost ~]# awk 'BEGIN{print "Test BEGIN."}{printf $2 "\t" $4"\n"}' student.xt
Test BEGIN.
Name Mark
xiaoliu 98
lisi 99
wangwu 100
[root@localhost ~]#
通过BEGIN,可以指定一些前置操作,例如,指定分隔符:{FS=”:”}
FS是内置变量,默认是制表符
[root@localhost ~]# awk '{FS=":"}{print $1 "\t" $3}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin 1
daemon 2
adm 3
...
test 1000
test2 1001
[root@localhost ~]#
上面输出内容可以看了第1行并未格式化,这是因为awk处理过程是:先读入一行数据,然后再去执行输出格式化。
即读出第1行的时候,分隔符已经默认为制表符了,然后这个时候才设定分隔符是冒号,已经来不及了。
通过BEGIN关键字,可以让awk在执行输出之前先执行指定分隔符动作。
[root@localhost ~]# awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd
root 0
bin 1
...
test 1000
test2 1001
[root@localhost ~]#
3、END
在所有动作执行完成后,执行END紧跟动作。
[root@localhost ~]# awk 'BEGIN{print "Test BEGIN."}END{print "Test END"}{printf $2 "\t" $4"\n"}' student.xt
Test BEGIN.
Name Mark
xiaoliu 98
lisi 99
wangwu 100
Test END
[root@localhost ~]#
4、关系运算符
对于学生成绩表,只输出成绩大于或等于99的学生及成绩。因为标题列不是数字,不能比较,所以通过grep命令排除掉了标题列
[root@localhost ~]# cat student.xt |grep -v Name|awk '$4>=99{print $2 "\t" $4}'
lisi 99
wangwu 100
[root@localhost ~]#
9.2.4.sed
1、sed
set是一种几乎包括在所有UNIX平台,包括Linux的轻量级流编辑器。set主要是用来将数据进行选取,替换,删除,新增的命令。
支持管道符操作。
主要用在对命令的结果编辑处理上。
语法:sed [选项] ‘[动作]’ 文件名
选项:
选项 |
作用 |
-n |
一般set命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过set命令处理的行输出到屏幕。 |
-e |
允许对输入数据应用多条set命令编辑 |
-i |
用set的修改结果直接修改读取数据的文件,而不是由屏幕输出。 |
动作:
动作 |
作用 |
a \ |
追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用\代表数据未完结。 |
c \ |
行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用\代表数据未完结。 |
i \ |
插入,在当前行前插入一行或多行,插入多行时,除最后一行外,每行末尾需要用\代表数据未完结。 |
d |
删除,删除指定的行 |
p |
打印,输出指定的行。 |
s |
字符串替换,用一个字符串替换另外一个字符串。格式为”行范围s/旧字符串/新字符串/g”,和vim中的替换格式类似。 |
打印第2行到屏幕:
[root@localhost ~]# sed '2p' student.xt
ID Name gender Mark
1 xiaoliu M 98
1 xiaoliu M 98
2 lisi M 99
3 wangwu M 100
上面的命令除了第2行,其他的都打印出来了,所以需要通过-n选项,只打印sed处理过的行。
[root@localhost ~]# sed -n '2p' student.xt
1 xiaoliu M 98
[root@localhost ~]#
支持管道操作:
[root@localhost ~]# df -h|sed -n '2p'
/dev/mapper/centos-root 17G 1.2G 16G 7% /
[root@localhost ~]#
删除第2到3行,这个删除只会影响屏幕输出,不会写到文件,因为没有指定-i选项:
[root@localhost ~]# cat student.xt
ID Name gender Mark
1 xiaoliu M 98
2 lisi M 99
3 wangwu M 100
[root@localhost ~]# sed '2,3d' student.xt
ID Name gender Mark
3 wangwu M 100
[root@localhost ~]#
[root@localhost ~]# sed '1,3d' student.xt
3 wangwu M 100
在2第后追加一行:
[root@localhost ~]# sed '2a hello' student.xt
ID Name gender Mark
1 xiaoliu M 98
hello
2 lisi M 99
3 wangwu M 100
[root@localhost ~]#
在第2行前插入一行
[root@localhost ~]# sed '2i hi!' student.xt
ID Name gender Mark
hi!
1 xiaoliu M 98
2 lisi M 99
3 wangwu M 100
[root@localhost ~]#
将第2行替换掉
[root@localhost ~]# sed '2c replace row.' student.xt
ID Name gender Mark
replace row.
2 lisi M 99
3 wangwu M 100
[root@localhost ~]#
字符串替换,将第4行的100分替换为96分
[root@localhost ~]# sed '4s/100/96/g' student.xt
ID Name gender Mark
1 xiaoliu M 98
2 lisi M 99
3 wangwu M 96
[root@localhost ~]#
-e选项支持多个动作,多个动作之间以分号分隔,如果没有指定行号的表示应用的所有内容。
[root@localhost ~]# sed -e 's/100/96/g;s/wangwu/zhaoliu/g' student.xt
ID Name gender Mark
1 xiaoliu M 98
2 lisi M 99
3 zhaoliu M 96
[root@localhost ~]#
9.3.字符处理命令
1、排序命令sort
语法:sort [选项] 文件名
选项:
选项 |
作用 |
-f |
忽略大小写 |
-n |
以数值型进行排序,默认使用字符串型排序 |
-r |
反向排序 |
-t |
指定分隔符,默认分隔符是制表符 |
-k n[,m] |
按照指定的字段范围排序。从第n字段开始,m字段结束,默认到行尾。 |
正序排序:
[root@localhost ~]# sort /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
test2:x:1001:1002::/home/test2:/bin/bash
test:x:1000:1000:This is a test user:/home/test:/bin/bash
[root@localhost ~]#
反向排序:
[root@localhost ~]# sort -r /etc/passwd
test:x:1000:1000:This is a test user:/home/test:/bin/bash
test2:x:1001:1002::/home/test2:/bin/bash
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
root:x:0:0:root:/root:/bin/bash
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@localhost ~]#
使用用户的ID进行排序,以数值型进行排序,列之间分隔为冒号:
[root@localhost ~]# sort -n -t ":" -k 3,3 /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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
test:x:1000:1000:This is a test user:/home/test:/bin/bash
test2:x:1001:1002::/home/test2:/bin/bash
[root@localhost ~]#
2、统计命令wc
语法:wc [语法] 文件名
-l 只统计行数
-w 只统计单词
-m 只统计字符数
统计/etc/passwd文件的行数,单词,及字符数
[root@localhost ~]# wc /etc/passwd
20 32 897 /etc/passwd
[root@localhost ~]# wc -l /etc/passwd
20 /etc/passwd
[root@localhost ~]# wc -w /etc/passwd
32 /etc/passwd
[root@localhost ~]# wc -m /etc/passwd
897 /etc/passwd
[root@localhost ~]# wc -lwm /etc/passwd
20 32 897 /etc/passwd
[root@localhost ~]#
支持管道操作:
[root@localhost ~]# cat /etc/passwd|wc
20 32 897
[root@localhost ~]#
9.4.条件判断
1、按照文件类型进行判断
测试选项 |
作用 |
-b 文件 |
判断该文件是否存在,并且是否为块设备文件,是块设备文件为真 |
-c 文件 |
判断该文件是否存在,并且是否为字符设备文件,是字符设备文件为真 |
-d 文件 |
判断该文件是否存在,并且是否为目录文件,是目录为真 |
-e 文件 |
判断该文件是否存在,存在为真 |
-f 文件 |
判断该文件是否存在,并且是否为普通文件,是普通文件为真 |
-L 文件 |
判断该文件是否存在,并且是否为符号链接文件,是符号 链接文件为真 |
-p 文件 |
判断该文件是否存在,并且是否为管道文件,是管道文件为真 |
-s 文件 |
判断该文件是否存在,并且是否为非空,非空为真 |
-S 文件 |
判断该文件是否存在,并且是否为套接字文件,是套接字文件为真 |
2、判断2种格式
a) test –e /root/install.log
b) [ -e testfile ],注意中括号给你表达式之间要有1个空格,必须要有。表达式与参数之间也要有1个空格
$?表示上1条命令执行结果,0表示执行成功
[root@localhost ~]# test -e testfile
[root@localhost ~]# echo $?
0
没有空格会报错:
[root@localhost ~]# [-e testfile]
-bash: [-e: command not found
[root@localhost ~]# [ -e testfile]
-bash: [: missing `]'
加上空格可以正确执行
[root@localhost ~]# [ -e testfile ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#
3、按照文件权限进行判断
测试选项 |
作用 |
-r 文件 |
判断该文件是否存在,并且是否拥有读权限,有读权限为真 |
-w 文件 |
判断该文件是否存在,并且是否为拥有写权限,有写权限为真 |
-x 文件 |
判断该文件是否存在,并且是否为拥有执行权限,有执行权限为真 |
-u 文件 |
判断该文件是否存在,并且是否为拥有SUID权限,有SUID权限为真 |
-g 文件 |
判断该文件是否存在,并且是否为拥有SGID权限,有SGID权限为真 |
-k 文件 |
判断该文件是否存在,并且是否为拥有SBIT权限,有SBIT权限为真 |
判断是否有写权限和执行权限:
[root@localhost ~]# ll
total 1032
-rw-------. 1 root root 1283 Apr 22 16:09 anaconda-ks.cfg
drwxr-xr-x. 2 root root 83 May 5 19:57 sh
-rw-r--r--. 1 root root 62 May 6 17:02 student.xt
-rw-r--r--. 1 root root 1048576 May 5 13:49 testfile
[root@localhost ~]# [ -w student.xt ] && echo yes || echo no
yes
[root@localhost ~]# [ -x student.xt ] && echo yes || echo no
no
[root@localhost ~]#
4、两个文件之间进行比较
测试选项 |
作用 |
文件1 –nt 文件2 |
判断文件1的修改时间是否比文件2新,如果为新则为真 |
文件1 –ot 文件2 |
判断文件1的修改时间是否比文件2旧,如果为旧则为真 |
文件1 –ef 文件2 |
判断文件1是否和文件2的Inode号一致,可以理解为2个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法。 |
判断2个文件谁最新:
[root@localhost ~]# ll
total 1032
-rw-------. 1 root root 1283 Apr 22 16:09 anaconda-ks.cfg
drwxr-xr-x. 2 root root 83 May 5 19:57 sh
-rw-r--r--. 1 root root 62 May 6 17:02 student.xt
-rw-r--r--. 1 root root 1048576 May 5 13:49 testfile
[root@localhost ~]# [ student.xt -nt testfile ]
[root@localhost ~]# [ student.xt -nt testfile ]&&echo yes||echo no
yes
[root@localhost ~]#
5、两个整数之间比较
测试选项 |
作用 |
整数1 –eq 整数2 |
等于 |
整数1 –ne 整数2 |
不等于 |
整数1 –gt 整数2 |
大于 |
整数1 –lt 整数2 |
小于 |
整数1 –ge 整数2 |
大于等于 |
整数1 –le 整数2 |
小于等于 |
表达式与整数之间要有1个空格
[root@localhost ~]# [ 1 -eq 1 ]&&echo yes||echo no
yes
[root@localhost ~]# [ 1 -ne 1 ]&&echo yes||echo no
no
[root@localhost ~]#
6、字符串的判断
测试选项 |
作用 |
-z 字符串 |
判断字符串是否为空,为空则为真 |
-n 字符串 |
判断字符串是否为非空,非空返回真 |
字符串1 == 字符串2 |
2个字符串是否相等 |
字符串1 != 字符串2 |
2个字符串是否不相等。 |
name赋值为acc
[root@localhost ~]# name=acc
判断是否为空
[root@localhost ~]# [ -z "$name" ]&&echo yes||echo no
no
判断不存在的变量是否为空
[root@localhost ~]# [ -z "$name1" ]&&echo yes||echo no
yes
判断是否为非空
[root@localhost ~]# [ -n "$name" ]&&echo yes||echo no
yes
判断是否相等
[root@localhost ~]# [ "$name" == "acc" ]&&echo yes||echo no
yes
判断是否相等,输入不相等的字符串
[root@localhost ~]# [ "$name" == "acc1" ]&&echo yes||echo no
no
[root@localhost ~]#
7、多重条件判断
测试选项 |
作用 |
判断1 –a 判断2 |
逻辑与 |
判断1 –o 判断2 |
逻辑或 |
!判断 |
逻辑非 |
[root@localhost ~]# [ "$name" == "acc" -a 1 -gt 2 ]&&echo yes||echo no
no
[root@localhost ~]#
相关推荐
本压缩包“SSH学习笔记--整理.rar”包含了一份精心整理的SSH学习资源,对于想要深入理解SSH的初学者或者开发者来说,是一份非常有价值的资料。 首先,我们来看“马士兵Struts2学习笔记2011.doc”。Struts2是一个...
- **Shell编程**:学习Bash脚本语言,包括变量、条件语句、循环结构等。 - **系统服务与定时任务**:掌握`systemd`服务管理和`cron`定时任务的配置。 - **软件包管理**:熟悉`apt`、`yum`等包管理器的使用,安装和...
- **Python解释器**: Python是一种高级编程语言,常用于科学计算、数据分析和机器学习。Anaconda预装了Python的特定版本(例如Python 3.9)。 - **conda**: 这是一个强大的包和环境管理器,可以方便地创建、安装和...
完成下载后,使用以下命令在Linux环境下进行解压: ```bash tar -xvf pig-0.17.0.tar ``` 这将在当前目录下创建一个名为 "pig-0.17.0" 的目录,包含所有必要的文件和资源。 二、环境变量配置 为了使系统能够识别...
【标题】"pig-0.16.0.tar安装包" 涉及的主要知识点是Apache Pig的安装和使用,这是一个基于Hadoop的数据流编程平台,用于处理大规模数据集。Pig Latin是Pig的编程语言,它允许用户编写复杂的数据处理任务,而无需...
Linux学习笔记PDF文档.pdf是一个详尽的资源,旨在帮助初学者和有经验的用户深入理解Linux操作系统。Linux作为开源的类Unix系统,以其稳定、安全和可定制性在全球范围内广泛应用于服务器、桌面环境以及嵌入式设备。这...
这份“Linux学习笔记-很不错适合linux入门者”文档恰好为初学者提供了一个很好的起点。 首先,笔记可能会从Linux的起源和发展讲起,包括Linux之父Linus Torvalds创建Linux内核的故事,以及GNU项目与自由软件运动...
### 学习笔记-基础Shell编程 #### 一、Shell编程概述 Shell编程是指利用Shell命令语言编写脚本来实现特定功能的过程。Shell不仅是Linux操作系统下的命令行解释器,还是一种强大的脚本语言,广泛应用于自动化任务...
Linux是开源的操作系统,它的命令行界面,尤其是Shell编程...因此,无论你是技术小白还是希望进一步提升,这份“Linux零基础学习笔记 Shell编程-菜鸟入门”都会是你宝贵的资源。祝你在学习的道路上越走越远,不断进步!
【标签】虽然没有提供具体的标签,但我们可以根据主题推测一些相关的关键词:开源、Linux、操作系统、Chrome OS、编程、开发、源代码、调试、定制化。 在解压后的文件"**cros-源码.zip**"中,我们可能会找到以下...
Linux进阶篇总共包含9个章节,第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业...
《IPython 1.2.1:Python编程的强力工具》 IPython是Python编程环境的一个强大增强...通过深入学习和使用这个版本,我们可以更好地理解Python的交互式环境,提高我们的编程效率,并为未来更新的版本打下坚实的基础。
整理了一份Linux shell学习笔记及基本命令合集,包含了LINUX常用操作命令和命令行编辑快捷键、shell基本命令,Linux相关使用配置教程等,需要的朋友可下载试试! shell是一个用C语言编写的程序,它是用户使用Linux的...
Linux进阶篇总共包含9个章节,第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业...
这个项目的源码可能涉及到计算机科学或软件工程的学习内容,涵盖编程语言、算法、数据结构、软件设计原则等多个方面。 【描述】虽然描述中只重复了标题,但我们可以推测这是一份完整的项目源代码,可能包括了实现...
Linux进阶篇总共包含9个章节,第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业...
在IT运维领域,Shell脚本是Linux/Unix系统管理员常用的自动化工具,而Python则因其易读性、强大的库支持和广泛的应用场景,逐渐成为运维工作中进行数据处理、监控、自动化任务编写的重要语言。 【描述】提到的...
Linux进阶篇总共包含9个章节,第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业...
Linux进阶篇总共包含9个章节,第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业...
Linux进阶篇总共包含9个章节,第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业...