linux和shell的学习记录
1.16条常用的命令
.文件的权限修改:(把文件1.txt的归属改为mysql的,然后ll查看)
chown mysql:mysql .txt .增加当前用户的x权限,然后ll查看:
chomd u+x .txt .对比文件的差异:
diff .txt .txt .查询文件位置:
find ./ -name .txt .杀掉进程
kill - .杀掉test用户下面的所有进程:
ps -ef | awk '$1=="test"{print $2}' | xargs kill - .查看时间:
date .查看当前用户
id .查看当前主机信息
uname -a .使用root用户修改test用户密码:
passwd test .磁盘空间信息
df -h .查看当前所在目录
pwd .标准输出,和print类似:
echo '' .查看文件前10行信息
head - .txt .查看文件后10行
tail - .txt .vi基本使用
ESC后:
x:删除一个字符
dd:删除一行
底行模式:
设置行号:set nu
查找:/字符
2.文件权限问题命令:
.权限字符:
分三列:所有者,所属组,其他
r:读---
w:写---
x:执行--- .增加当前用户的x权限,然后ll查看:
chmod u+x .txt .文件的权限修改:(把文件1.txt的归属改为mysql的,然后ll查看)
chown mysql:mysql .txt .例如:-rw-r--r--. root root Mar : test.sh
所有者:root 权限:rw
所属组:root 权限:r
但是所有者root可以使用:sh test.sh来执行这个文件,因为可读
直接使用./test.sh执行不了,
需要授权:chmod +x test.sh 即可执行 .执行文件:(推荐./和sh的方式)
有r:
sh test.sh
bash test.sh
source test.sh 有x:
sh test.sh
bash test.sh
source test.sh
./test.sh .sh的原理:
读取文件的命令,然后执行文件里面的命令,所以只要有r权限就能执行
3.命令操作符号问题:
.符号>
删除文件内容追加新内容,经常和cat一起使用
cat >.txt
回车然后输入内容 .符号>>
不删除文件内容追加字符,经常和cat一起使用
cat >>.txt
回车然后输入内容 .符号;
执行多条命令
cat .txt ; ls .符号|
管道:| 表示管道,上一条命令的输出,作为下一条命令参数(输入)。
cat .txt | grep 你好 .符号&&
前面的命令执行成功才执行下一条命令
cat .txt && ls .符号||
前面的命令执行不成功才执行下一条命令 .符号""
输出变量值
echo "第一个变量是:$a" .符号''
只会当成字符串输出
echo '第一个变量是:$a' .符号``
符号内解析为一条命令
a='date' 为字符串 echo $a 结果为date
a=`date` 为一条命令 echo $a 结果为时间 .无底洞
>/dev/null 把错误的输出丢到无底洞,不会在控制台打印错误信息
>/dev/null 把正确的输出丢到无底洞,不会在控制台打印正确信息
cat .txt >/dev/null
4.运算符号问题:
.输出表达式的三种方法:
expr +
echo $[ + ]
echo $(( + )) .使用bc计算器(字符串交给bc处理)
echo "1.2+1.3" | bc 结果:2.5
echo "scale=2;1.2+1.3" | bc 结果:2.5
echo "scale=2;(1.2+1.3)/1" | bc 结果:2.50
5.判断运算的问题:
-e 目标是否存在: [ -e .txt ] || touch .txt
-d 是否为路径 : [ -d /docker ] && echo '存在'
-f 是否为文件 -r 是否有r权限: [ -r .txt ] && echo '有读权限'
-w
-x 整数:
-eq 等于 [ -eq ] && echo '等于'
-ne 不等于
-gt 大于
-lt 小于
-ge 大于或等于
-le 小于或等于 字符串:
= 等于 [ 'ggg' = 'ggg' ] && echo '等于'
!= 不等于 小数:通过bc计算器 [ `echo '1.2 > 1.3' | bc` -eq ] && echo '大于' 常用:
[ $? -eq ] 判断上一条命令是否执行成功
6.read命令:
read命令:
-p 给出提示符
-s 隐藏输入内容
-t 给出等待时间,超时退出read
-n 限制读取字符个数,超过临界值会自动执行
7.-e 的作用
-e :激活命令的作用:
echo -e "\n"
`echo -e "\033[4;31m 你好: \033[0m"`
8.处理海量数据;grep,awk,sed,cut
8.1grep:行操作
-v :内容的取反
-n :行号+内容
-w :精确匹配
-i :忽略大小写
^ :匹配行首
-E :正则匹配 在123.sh文件提取包含user的行内容
grep 'user' .sh 匹配以user开头的行
grep '^user' .sh 匹配包含user1或user2或user3的行
grep -E 'user1|user2|user3' .sh
8.2cut:列操作
-d :指定分割符(不加默认tab键分割)
-f :指定截取区域
-c :以字符为单位进行分割 以':'为分割符,截取出123.sh文件第一列和第3列
cut -d ':' -f , .sh 以':'为分割符,截取出123.sh文件第一列到第3列
cut -d ':' -f - .sh 以':'为分割符,截取出123.sh文件第二列到最后一列
cut -d ':' -f - .sh 截取123.sh文件第二个字符到第五个字符
cut -c - .sh 案例:
领教教你截取所有可登陆系统的普通用户(除root)
grep '/bin/bash' /etc/passwd | cut -d ':' -f | grep -v 'root'
cat /etc/passwd | grep 'bin/bash' | cut -d ':' -f1 | grep -v 'root' 上述命令也可以用cat命令:
cat 123.sh | cut -d ':' -f 1,3
8.3强大的awk:列操作
awk [选项] '条件{执行动作} 条件2{执行动作} ..' 文件名
选项和条件可以不写 printf:格式化输出,不会自动换行
\t:tab
\n:换行
%ns:字符串 n表示字符串个数
%ni:整型 n表示数字个数
%.nf:浮点型 n表示小数点后个数
printf '%s\t%s\t%s\t\%s\n' print:会自动换行 例子:查看磁盘的使用率
df -h | grep /dev/vdal | awk '{printf "/dev/vdal的使用率:"} {print $5}' 浮点计算(最后的$0表示一整行)
echo "scale=2; 0.13 + 0.1" | bc | awk '{printf "%.2f\n",$0}' $:一整行
$:第一列
$:第二列
... 条件:
\F:指定分割符:
cat /etc/passwd | cut -d ':' -f
cat /etc/passwd | awk -F":" '{print $1}' BEGIN:读取所有文件内容前执行,一般用于修改内置变量的值
FS:BEGIN时定义分割符
cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}' END:结束时执行
cat /etc/passwd | awk -F":" '{print $1} END{printf "以上为执行结果\n"}' NR:行号
df -h | awk '(NR>=2 && NR<=5) {print $5}'
awk '(NR>=2 && NR<=5) {print $5}' /etc/passwd 打印行号:
nl /etc/passwd | awk '(NR>=2 && NR<=5) {print $1}'
8.4sed:先取,新增,搜索,替换,删除
sed [选项] [动作] 文件名
选项和动作可以不写 -n:把匹配到的行打印
p:以行为单位进行查询,通常与-n一起使用
打印第二行:
df -h | sed -n '2p'
打印包含2行:
df -h | sed -n '/2/p' d:删除(不会对源文件修改的)
删除第二行:
df -h | sed '2d'
把文本放到一个新的文件
df -h > newdf.txt
sed '2d' newdf.txt a:在行的下面插入新的内容(不修改源文件)
sed '2a 123456789' newdf.txt i:在行的上面插入新的内容(不修改源文件)
sed '2i 123456789' newdf.txt c:替换
把第二行替换
sed '2c 123456789' newdf.txt s/str1/str2/g str2替换str1
sed 's/%0/100%/g' newdf.txt -i:对源文件进行修改(高危操作,必须先备份)
sed -i 's/%0/100%/g' newdf.txt -e:表示可以执行多条动作
比如搜索内容时替换和打印两个动作
cat newdf.txt | sed -n -e 's/0%/100%/g' -e '/100%/' 搜索内容的方法:
sed -n '/100%/p' newdf.txt
cat -n newdf.txt | sed -n '/100%/p' 之前学过的grep搜索:
cat -n newdf.txt | grep %
复习:
判断运算的问题
-e 目标是否存在: [ -e .txt ] || touch .txt
-d 是否为路径 : [ -d /docker ] && echo '存在'
-f 是否为文件 -r 是否有r权限: [ -r .txt ] && echo '有读权限'
-w
-x 整数:
-eq 等于 [ -eq ] && echo '等于'
-ne 不等于
-gt 大于
-lt 小于
-ge 大于或等于
-le 小于或等于 字符串:
= 等于 [ 'ggg' = 'ggg' ] && echo '等于'
!= 不等于 小数:通过bc计算器 [ `echo '1.2 > 1.3' | bc` -eq ] && echo '大于' 常用:
[ $? -eq ] 判断上一条命令是否执行成功
运算符号问题:
.输出表达式的三种方法:
expr +
echo $[ + ]
echo $(( + )) .使用bc计算器(字符串交给bc处理)
echo "1.2+1.3" | bc 结果:2.5
echo "scale=2;1.2+1.3" | bc 结果:2.5
echo "scale=2;(1.2+1.3)/1" | bc 结果:2.50
9.循环:
9.1循环的if
. if [条件];
then
动作
fi . if [条件];
then
动作
else
动作
fi 例子:判断输入文件是否存在
#!/bin/bash
if [ -e $ ];
then
echo "$1存在"
else
echo "$1不存在"
fi . if [条件];
then
动作
elif [];
动作
fi 例子:判断输入的数字是否大于10
#!/bin/bash
echo '请输入一个数字:'
read number
if [ $number -eq ];
then
echo "$number 等于10"
elif [ $number -gt ];
then
echo "$number 大于10"
else
echo "$number 小于10"
fi
9.2循环的for
.格式:
for 变量名 in 值1 值2 ....
do
动作
done 例子:打印1-
#!/bin/bash
for i in
do
echo $i
sleep
done .格式
for 变量名 in `命令`
do
动作
done 例子:打印1-
#!/bin/bash
for i in `seq `
do
echo $i
done 例子:ping两下baidu是否通,通则断开
#!/bin/bash
for i in $(cat a.txt)
do
ping -c $i
echo -e "\n"
done a.txt文件内容
www.taobao.com
www.qq.com .格式:
for ((条件))
do
动作
done 例子:打印1-
#!/bin/bash
for ((i=;i<;i++))
do
echo $i
sleep
done
9.3循环的case:(匹配执行)
.格式:(;;表示执行完后结束)
case 变量 in
值1 )
动作
;; 值2 )
动作
;; 值3 )
动作
;; ...
esac 例子:查询城市天气
echo '请输入城市'
read city
case $city in
'广州')
echo "$city温度23,热"
;;
'四川')
echo "$city温度24,热"
;;
'大良')
echo "$city温度25,热"
;;
*)
echo "输入有误"
;;
esac
9.4循环的while
.格式:
while [ 条件判断式 ]
do
动作
done 例子:计算0加到n的和
#!/bin/bash
i=
sum=
while [ $i -le $ ]
do
sum=$(($sum+$i))
i=$(($i+))
done
echo 'the sum is:'$sum
linux和shell的学习记录的更多相关文章
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- Linux 下Shell的学习
1.Shell学习 1.什么是Shell shell是一个命令解析器,在操作系统的最外层,负责和用户对话,将用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果.2.什么是shell脚本 ...
- Linux 下Shell的学习3-优秀demo
优秀的DEMO cat /etc/init.d/functions -->里面有颜色定义cat /etc/rc.d/rc.sysinit cat /etc/init.d/nfscat /et ...
- linux下计划任务学习记录
0x01 计划任务简介 linux 中计划任务主要分为”循环执行”和”只执行一次”两种,分别对应的时 crond 服务 和 atd 服务: 0x02 只执行一次的计划任务 0x02.1 atd 服务说 ...
- linux下shell脚本学习
在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...
- 和菜鸟一起学linux之DBUS基础学习记录
D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信.它是个3层架构的IPC 系统,包括: 1.函数库libdbus ,用于两个应用程序互相联系和交互消息. 2.一 ...
- Linux 下Shell的学习2
0. 查看帮助(比如内置功能) man bash -->变量处理大全 1.-计算变量长度的不同方法及不同方法的耗时对比 尽可能的用内置的命令处理,速度快 time ...
- 【转】和菜鸟一起学linux之DBUS基础学习记录
[原文] D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信.它是个3层架构的IPC 系统,包括: 1.函数库libdbus ,用于两个应用程序互相联系和交互消息 ...
- linux基础了解的学习记录
一.文件结构图 linux的储存结构为文件树 二.绝对路径.相对路径.权限 1.绝对路径: /usr/local/include 在路径的最前面是 / 开头的 使用环境:当在当前路径下想到 ...
随机推荐
- C# 微信开发-----微信会员卡(二)
主要说说如何使用微信的激活会员卡 如图: 点击激活会员卡时,要跳转到如下的图片: 要实现这个功能,首先我们在创建会员卡后就操作如下代码 #region 添加激活时的自定义字段 string custo ...
- JavaScript入门学习笔记(异常处理)
try:语句测试代码块的错误,当try中的代码块出错时执行catch中的代码块. catch:语句处理错误: throw:语句创建或抛出自定义异常. 三者一起使用可以控制程序流并生成自定义异常信息. ...
- linuxDNS
getenforce 查询状态 setenforce 0 临时关闭 永久关闭vim /etc/selinux/configlinux配置文件内容SELINUC=disabled关闭重启系统生效 ...
- jQuery 第六章 jQuery在Ajax应用
1.本章目标 ajax 2.ajax 异步刷新技术,我们的网页不需要全部刷新,按需实现局部刷新,上线后台的交互 用户体验好 地图,前台验证,表单提交,修改,查询等等 原生的js和ajax packag ...
- youtube-dl下载youtube视频时查看分辨率以及选择分辨率下载
1.查看分辨率: youtube-dl -F https://www.youtube.com/watch?v=_NMf1TpiFwY 2.根据分辨率下载,比如下载1280*720的mp4,前面的数字是 ...
- git生成ssh key步骤并添加到github网站
0: 查看是否已经有了ssh密钥 执行命令:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除 1:使用 Git Bash生成新的ssh key ssh-keygen -t rsa -C ...
- TreeMap 的排序冲突吗
今天在网上看到一个问题:一个已经构建好的 TreeSet,怎么完成倒排序? 网上给出的答案是: 通过TreeSet构造函数传入一个比较器,指定比较器进行排序为原排序的倒叙. TreeSet的自然排序是 ...
- Server酱微信推送中的问题
1.写在URL的文字就是不在微信端显示 当时为了明显提示写了个这个:<--11111-->后来发现1111不能显示,去掉两边的<---->就可以了, 2.输出到微信端的文字不换 ...
- centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'
centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module named '_ctypes'的解决办法 3.7版本需要一个新的包libffi-de ...
- windows上react-native run-android时Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED报错
报错如图 解决 在C:\Users\{用户名}\.gradle\wrapper\dists路径下,删除所有文件夹,重新run-android ps:网上搜了说是说是java解压缩编码格式问题什么的,感 ...