Linux高级
[
一、高级
1、Linux系统概述和安装
1.1Linux系统
1.2
…
1.6登录并查看IP地址
ifconfig
1.7Linux连接工具CRT使用CRT
1.7.4文件上传:
一:基于CRT的alt+p
二:使用linux的上传工具进行上传
1)安装上传工具:yum -y install lrzsz
2) 输入上传命令:rz
1.7.5文件下载
1)sz 文件
2、Linux基础命令
2.1终端命令格式
command [-optitions] [parameter]
说明:
command:命令名,相应功能的英文单词或缩写
options:选项,可用来对命令进行控制,也可以省略
parameter :传入参数
2.2技巧
2.2.2曾经使用过的命令
1、使用上/下 光标可以在曾经使用过的命令之间来回切换
2,退出,并且不想执行当下前命令,可以按ctrl+C
2.3显示文件类表命令
ls是英文单词list的缩写,其功能为列出目录的内容
ls如果只使用ls命令只能看到当前目录下非隐藏文件
-a 显示指定目录下所有子目录与文件,包含隐藏文件
-l 以列表方式显示文件的详细信息
-h 配合 -l 以人性化的方式显示文件大小
常见使用命令:
ls #查看当前目录内容(缺点:隐藏文件看不到,开头的文件)
ls -a 包括隐藏文件
ls -al 查看文件类型,权限,大小
ls -lh 以K,M,G方式显示文件大小
ls /root #查看/root目录下内容
ll #等价于ls -l
2.4目录查看、目录创建和目录删除
2.4.1 pwd
2.4.2 mkdir命令 该命令用于创建目录
注意:新建的目录的名称不能与当前目录中 已有的目录或文件 同名
1)创建没有层级的关系目录
mkdir 目录名
2)创建有层级的目录
mkdir -p 目录1/目录2/目录3
mkdir -p /root/aaa/bbb
2.4.3 rm命令
该命令用于删除文件或者目录
-f force(强制) 强制删除,忽略不存在的文件或目录,无需提醒
-r recursive(递归) 递归地删除目录下的内容,删除目录时必须加持删除
使用方法:
rm -r 目录 #删除目录有提醒
rm -fr 目录 #直接删除目录(不管有没有内容)
rm -f 文件名 #强制删除一个文件
2.5目录切换 cd
2.6 文件操作命令
2.6.1 touch 命令
touch命令创建文件
touch a.txt #在当前目录创建a.txt文件
touch /root/a.txt #在/root目录创建a.txt文件
2.6.2mv命令
通过mv 命令可以用来移动文件或目录,也可以给文件 活目录重命名
1)将文件移动另一个目录中:
mv 文件 目录/
touch a.txt
mkdir dir
mv a.txt dir
2)重命名
mv 旧文件名 新文件名
mv a.txt b.txt #重命名文件
mv dir1 dir2 #重命名目录
3)将目录移动 到 另一个目录中
mv 被移动目录 目标目录
mv dir /
2.6.3 cat/more/less 命令
cat命令
cat 文件路径
more命令
分页显示文件内容,还支持直接跳转行等功能
语法:more 文件路径
相关操作:
Enter:向下n行,需要定义,默认1行
空格键:向下滚动一屏 或 Ctrl +F
B键:返回上一屏或Ctrl + B
q:退出more
less
分页显示文件内容,还支持直接跳转等功能
语法:more filePath
空格键: 前进一页 或 page down
b : 后退一页 或 page up
d : 前进半页
u : 后退半页
2.6.4 cp命令
cp a.txt dir # 将a.txt复制到dir1目录
cp a.txt b.txt #将a.txt复制到b.txt
2.7 文件查找命令
2.7.1 find指令
用于查找符合条件的文件
示例:
find / -name 'ins*' #查找/目录下以文件名ins开头的文件
find / -type f -size +100M # 查找/目录下文件大小大于100M的文件
2.7.2 grep 命令
grep命令可对文件文本查询
grep hello anaconda-ks.cfg#在文件中查到lang
2.8 压缩和解压缩命令tar
查数解释:
参数 解释
-c 创建一个新的tar文件
-v 显示运行过程的信息
-f 指定文件名
-z 调用gzip压缩命令进行压缩
-x 解开tar文件
2.8.1解压
tar -zxvf 压缩文件 [-C][指定解压目录]
示例:
tar -zxvf redis-3.2.8.tar.gz # 将文件解压到当前目录
tar -xvf redis-3.2.8.tar # 将文件解压到当前目录 (非压缩文件)
tar -zxvf redis-3.2.8.tar.gz # 将文件解压到指定明目录
2.8.2 压缩
tar -c[z]vf 压缩文件 目录
tar -cvf test.tar /root/test # 打包
tar -czvf test.tar.gz /root/test #打包并压缩
2.9 系统管理命令
2.9.1 ps命令
ps命令用来列出系统中当前运行的哪些进程
ps -ef #查看所有进程
2.9.2 kill命令
kill命令用于终止执行中的程序
kill -9 12345 #杀死pid为12345的进程
2.9.3管道命令
ps -ef | grep java #查询名称中包含java的进程
2.10 用户的创建和删除命令
2.10.1 用户创建和密码设置
useradd 用户名
passwd 用户密码
2.10.2 用户删除
user -r 用户名
userdel -r iz
2.11 权限管理命令
2.11.1文件权限概述
-rwxrwxr-- ;r:读取权4;w:写入权2;x:执行权1
文件类型 属主权限 属组权限 其他用户权限
2.11.3 chmod命令
chmod 666 a.txt
chmod u+x a.txt
chmod u =rwx,g=rw,o=x a.txt
2.12 网络和服务管理命令
2.12.1.ifconfig命令
查看主机ip地址
2.12.2 systemctl命令
systemctl命令是用来控制系统服务的实用工具,启动,停止,重新启动和关闭系统服务,还可以显示当前服务的当前状态
服务管理命令 功能
systemctl start 服务名 开启服务
systemctl stop 服务名 关闭服务
systemctl status 服务名 显示服务状态
systemctl enable 服务名 设置开机自启动
systemctl disable 服务名 关闭开机自启动
2.13磁盘管理命令
df -h disk free显示磁盘剩余空间
du -h [目录名] disk usage 显示目录下的目录大小
free -h 查看内存使用率
2.14 时间和日期
命令 作用
date 查看系统时间(默认)
date +“%Y-%m-%d %H:%M:%S” 查看系统时间(指定格式)
date -s "时间字符串" 设置系统时间
2.15其他命令
2.15.1.ln 命令
ln命令可以用来创建软连接,类似于创建快捷方式
命令格式:
ln[参数][源文件或目录][目标文件或目录]
实例:
ln -s 2.txt 1.txt
2.15.2 clear命令
清屏命令,还可以使用快捷键:ctrl+l
2.15.3关机重启
reboot :重启
shutdown -h now:马上关机(断电关机)
halt:立刻关机(centos)(不断电关机)
2.16vi编辑器vim编辑器
2.16.1命令行模式常用命令
2.16.2 vim编辑器
2.16.4 命令行模式常用命令
2.16.5 低行模式常用命令
:w 文件 另存为
:w 保存(ctrl+s)
:q 退出,如果没有保存,不允许退出
:q! 强行退出,不保存退出
:wq 保存并退出
:x 保存并退出
:set nu 设置行号
:%s/旧文本/新文本/g 文本替换
2.16.6 异常处理
如果vi异常退出,在磁盘上可能会保存有交换文件
下次再使用vi编辑文件时,会看到以下屏幕信息,按下字母d删除交换文件即可
然后,回到文件编辑目录,删除生成的隐藏文件,如
rm .Hello.java.swp -fr
Linux 高级命令
4.1重定向 >
Linux 允许将命令执行结果重新定向到一个文件,本应显示在终端上的内容保存到指定文件中。如:
ls >test.txt (test.txt如果不存在,则创建,存在则覆盖其内容)
重定向 >>
这个是将输出内容追加到目录文件中,如果文件不存在就创建文件,如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响
4.2cut命令
cut:文件内容查看命令,cut命令可以从一个文本文件或者文本流中提取文本列
cut命令参数解释
-b 按照直接选取 忽略多字节字符边界
-c 仅显示行中指定范围的字符
-d 自定义分割符,默认为制表符
-f 与-d一起使用,指定显示哪个区域
-n 与-b选项连用,不分割多字节字符
–complement 补足被选择的字节,字符或字段
–out -delimiter=<字段分割符> 指定输出内容是的字段分割符;
–help 显示指定的帮助信息
–version 显示指定的版本信息
如果有一个学生报表信息文件stu.txt 包含id name age score
d name age score
tom 18 78
jack 20 85
1)使用-d和-f显示文件中的指定的列
cut -d " " -f 1 stu.txt
id
01
02
cut -d " " -f 2,3 stu.txt
name age
tom 18
jack 20
解释:
-d " ": 用来指定文件字段之间的分隔符,如果文件的分隔符是制表符则不需要指定该参数
-f 数字:用来指定哪一列
2)--complement 选项提取指定字段之外的列(打印除了第二列之外的列)
[root@node1 shell]# cut -d " " -f 2 --complement stu.txt
id age score
01 18 78
02 20 85
3)指定字段的字符或者字节范围
cut命令可以将一串字符作为列来显示,字符字段的记法
N-:从第N个字节、字符、字段到结尾;
N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
-M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
#打印第一个到第4个字符
cut -c 1-4 stu.txt
id n
01 t
02 j
#打印前2个字符:
cut -c -2 stu.txt
id
01
02
#打印从第5个字符开始到结尾
cut -c 5- stu.txt
ame age score
om 18 78
ack 20 85
4.3 sort命令
4.3.1可以对文本文件的内容,以行为单位来排序
4.3.2路径
第一步:对字符串排序
第二步:去重排序
第三步:对数值排序
第四步:对成绩排序
# sort sort_demo1.txt
-u unique 去掉重复的
sort -u sort_demo1.txt
-n numeric-sort 按照数值大小排序
-r reverse 使次序颠倒
升序
sort -n sort_demo2.txt
降序
sort -n -r sort_demo2.txt
-t field-separator 指定字段分隔符
-k key 根据那一列排序
# cat sort_demo3.txt | sort -t ' ' -k 2 -n -r 排序以空格符为分割符,按照第2列进行降序排列
4.4uniq命令
uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用,通过sort排序将相同的行放在一起,然后实现去重。
实现1:简单去重,必须要加sort
cat uniq_demo.txt |sort| uniq
实现2: 实现去重效果(按照成绩排序,降序,去重)
cat uniq_demo.txt | sort -t ' ' -k 2 -n -r | uniq
4.4.3.2.第二步:不但去重,还要统计出现的次数
-c count 统计每行内容出现的次数
cat uniq_demo.txt |sort| uniq -c
4.5wc命令
wc命令:统计行数 单词数 字节数
在默认的情况下,wc将计算指定文件的行数,字数以及字节数
命令使用格式为:
wc 文件名
-l 统计行数
-c 统计字节数
-w 统计单词数
-m 统计字符数
1)统计指定文件行数、字数、字节数
wc test_wc.txt
6 21 85 test_wc.txt
#行数为6, 单词数为21, 字节数为85
2)查看跟目录下有多少个文件
ls / | wc -w
4.6awk命令
awk是一种处理文本文件的命令,是一个强大的文本分析工具,它支持分段,默认每行空格或TAB分割。简单来说awk就是把文件逐行读入,以空格为默认分割符将每行切片,切开的部分再进行各种分析处理
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
语法:
awk [-F field-separator] 'commands' input-file(s)
或
awk -F|-f|-v 'BEGIN{ } / / {comand1;comand2} END{ }' file
-F 定义列分隔符
-f 指定调用脚本
-v 定义变量
' '引用代码块,awk执行语句必须包含在内
BEGIN{ } 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
{ } 命令代码块,包含一条或多条命令
// 用来定义需要匹配的模式(字符串或者正则表达式),对满足匹配模式的行进行上条代码块的操作
END{ } 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
脚本方式
将所有的awk命令插入到一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/sh可以换成#!/bin/awk.
变量分配:
$0 代表整个文本行;
$1 代表文本行中的第 1 个数据字段;
$2 代表文本行中的第 2 个数据字段;
$n 代表文本行中的第 n 个数据字段。
实例:
案例1: 打印test_awk.txt第1段
awk '{print $1}' test_awk.txt
案例2: 打印出test_awk.txt的第1,2,3段
awk '{print $1,$2,$3}' test_awk.txt
案例3:打印出1.txt的第1,2,3段,并且使用#号连接
awk '{print $1"#"$2"#"$3}' test_awk.txt
段之间的连接符OFS
OFS用来指定输出记录分隔符
案例1::打印1,2,3段,指定#为连接符
awk '{OFS="#"}{print $1,$2,$3}' test_awk.txt
4.6.1指定分割符
-F 来指定分割符
准备工作,现在有个test_awk2.txt,内容如下: aaa:111:333
案例1: 打印出test_awk2.txt的第1段
awk -F ':' '{print $1}' test_awk2.txt
案例2: 打印出test_awk2.txt的所有段
awk -F ':' '{print $0}' test_awk2.txt
案例3: 打印出test_awk2.txt的第1,3段
awk -F ':' '{print $1,$3}' test_awk2.txt
4.6.2内容匹配
这里的内容匹配需要使用正则表达式,常用的正则表达式规则如下:
1、^linux 以linux开头的行
2、$php 以php结尾的行
3、. 匹配任意单字符
4、.+ 匹配任意多个字符
5、 .* 匹配0个或多个字符(可有可无)
6、 [0-9a-z] 匹配中括号内任意一个字符
7、 (linux)+ 出现多次Linux单词
8、 (web){2} web出现两次以上
9、\ 屏蔽转义
实例:
案例1: 匹配test_awk2.txt中包含cc的内容
awk ‘/cc/’ test_awk2.txt
案例2: 匹配test_awk2.txt中第1段包含cc的内容
awk -F ‘:’ ‘$1 ~ /cc/’ test_awk2.txt
案例3: 匹配test_awk2.txt中第1段包含至少连续两个c的内容
awk -F ‘:’ ‘$1 ~ /cc+/’ test_awk2.txt
案例4: 在test_awk2.txt中如果匹配到aaa就打印第1,3段,如果匹配到ccc,就打印第1,3,4段
awk -F ‘:’ ‘/aaa/ {print $1,$3} /ccc/ {print $1,$3,$4}’ test_awk2.txt
案例5: 在test_awk2.txt中如果匹配到aaa或者ddd,就打印全部内容
awk -F ‘:’ ‘/aaa|ddd/ {print $0}’ test_awk2.txt
4.6.3段内容判断
在awk命令中,支持很多运算符,使用这些运算符可进行段内容判断
案例1:在test_awk2.txt中如果第3段等于222就打印所有内容
awk -F ':' '$3==222 {print $0}' test_awk2.txt
案例2:在test_awk2.txt中如果第3段等于333就打印第一段
awk -F ':' '$3==333 {print $1}' test_awk2.txt
案例3:在test_awk2.txt中如果第5段不等于cccc就打印全部
awk -F ':' '$5!="cccc" {print $0}' test_awk2.txt
案例4:在test_awk2.txt中如果第1段等于ccc,并且第2段大于300就打印全部
awk -F ':' '$1=="ccc" && $2>300 {print $0}' test_awk2.txt
案例5:在test_awk2.txt中如果第1段等于ccc,并且第2段匹配666就打印全部
awk -F ':' '$1=="ccc" && $2==666 {print $0}' test_awk2.txt
4.6.8NR行号和NF段数
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
案例1:打印test_awk2.txt全部内容显示行号
awk -F ':' '{print NR " : " $0}' test_awk2.txt
案例2:打印test_awk2.txt全部内容显示段数
awk -F ':' '{print NF " : " $0}' test_awk2.txt
案例3: 从test_awk2.txt的前3行中匹配出第2段等于 666,并显示行号
awk -F ':' 'NR<=3 && $2==666 {print $0}' test_awk2.txt
4.6.9分段求和
awk 中还可以指定脚本命令的运行时机。awk会从输入中读取一行文字,然后针对该行的数据执行程序脚本,但有时可能需要在处理数据前运行一些脚本命令,这就需要使用begin关键字。
BEGIN 会强制awk在读取数据前执行该关键字后指定的脚本命令。
案例1: 对test_awk2.txt中的第2段求和
awk -F ':' 'BEGING{total=0}{total=total+$2}END{print total}' test_awk2.txt
综合案例
案例1: 统计当前目录下所有文本文件的大小
$5 为ll命令结果的第五列,该列刚好是显示文件的大小
ll | awk 'BEGIN{total=0}{total=total+$5} END{print(total)}'
案例2:求总成绩
awk的代码还可以放在一个脚本中,脚本的后缀是.awk,执行脚本的语法: awk -f 脚本名 源文件
需求:
有个文件score.txt,记录每个学生的成绩,要计算学生总成绩和平均成绩,文件内容如下:
(名字, 学号,数学成绩,英语成绩、计算机成绩)
代码:
cal.awk
#!/bin/awk -f
#运行前
BEGIN {
math = 0
english = 0
computer = 0
printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"
printf "---------------------------------------------\n"
}
#运行中
{
math+=$3
english+=$4
computer+=$5
printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
printf "---------------------------------------------\n"
printf " TOTAL:%8d %8d %8d \n", math, english, computer
printf "AVERAGE:%8.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
执行脚本并查看结果:
[root@node1 shell]# awk -f cal.awk score.txt
NAME NO. MATH ENGLISH COMPUTER TOTAL
---------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
---------------------------------------------
TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.004
]