shell 入门
切换用户执行sql脚本
使用root用户执行postgresql脚本
su root<< EOFINITDDBDATASU psql database -f sql/sql_data.sql EOFINITDDBDATASU
shell中的EOF用法
Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序。
回顾一下< <的用法。当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。
例子:自动登录mysql(root:root,passwd:123456),查询test库,test1表里的user=aa的记录。
复制代码代码如下:
#!/bin/sh mysql -uroot -p123456 <<EOF use test; select * from testaa while a=10000; ###1000 not usr single quote mark,because a is int # type,only char type need single quote mark. exit EOF
用来注释整段脚本代码
特殊用法:
:<< COMMENTBLOCK
   shell脚本代码段
COMMENTBLOCK
用来注释整段脚本代码。 : 是shell中的空语句。
echo start :<<COMMENTBLOCK echo echo "this is a test" echo COMMENTBLOCK echo end
这段脚本执行时,中间部分不会被执行:
复制代码代码示例:
[root@newserver shell]# sh eof.sh start end
cat和eof结合使用具有追加功能
使用Cat和EOF多行输入
cat >> /root/test.txt <<EOF abcdef hello word ! FFFFFFFFFFFFFFFFFFFFFFF EOF
以上的脚本命令是,在a.txt文件后面加上三行代码。
Ubuntu系统命令
查看系统信息
cat /etc/*release
查看文件大小
ls -ll :以字节B的形式查看文件大小 ls -lh:以直观的形式查看所有文件大小 du -sh: 查看当前文件的总大小
查看当前目录及子目录大小
du -h --max-depth=1 ./
根据端口号查看进程路径
netstat -nlp| grep 80 ps -ef | grep pid
tar 打包并排除某个目录
% tree demo -a
demo
├── .git
│   ├── test1.txt
│   └── test2.txt
└── log
    ├── log1.txt
    └── log2.txt
备份压缩,并排除.git目录
tar -zcvf demo_2022.tar.gz --exclude=.git demo
解压缩会替换目标目录文件
tar -zxvf demo_2022.tar.gz
证明
rm -rf demo/log/log1.txt rm -rf demo/.git/test1.txt % tree demo -a demo ├── .git │ └── test2.txt └── log └── log2.txt
tar -zxvf demo_2022.tar.gz % tree demo -a demo ├── .git │ └── test2.txt └── log ├── log1.txt └── log2.txt
Tail、Head
cat filename | tail -n +3000 | head -n 1000
cat filename| head -n 3000 | tail -n +1000
find命令
我们经常是用linux下的find命令去查找搜索日志,比如服务器一堆按日期的日历,我要搜索/var/logs/projects的2013年12月的txt日志文件中包含date字符,如下:
find /var/logs/projects/ -name "2013-12-*.txt" | xargs grep 'date'
但是偶尔有些同学划分目录的方式是把日期作为目录,时间作为日志文件名,比如/var/logs/projects/2013-12-12/13-30-00.txt,这样的话如果搜索同样的功能,用上面的命令格式虽然也能搜索,但是不是最快最有效的,如果日志文件非常多非常大,那效率就满多了,研究了一下,用下面的命令能够更快的搜索出来:
find /var/logs/projects/ -regex '/var/log/projects/2013-12-.*/.*.txt' | xargs grep 'date'
查找并删除后缀.pyc文件
find . -name "*.pyc" | xargs rm -rf
文件名+内容
find 文件目录 -type f |xargs grep "查询内容";
时间范围查询
find sessions/ -type f -newermt '03 Feb 2021' ! -newermt '08 Feb 2021' -print | xargs egrep "天气"
几天内改动过的文件
find . -name "*.h" -mtime -10 -type f -print
grep命令--(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)
- –e:从文件内容查找与正则表达式匹配的行:
 - –i:查找时不区分大小写:
 - -c:查找匹配的行数
 - –v :从文件内容查找不匹配指定字符串的行
 - -l: 只显示文件名
 - --color=auto: 高亮显示
 
查找20201118、20201119文件夹下,以prefix为前缀的所有文件,grep 包含“regex”的所有文件名
ls | grep -E "2020111[8-9]" | xargs -i find {} -name "prefix*" | xargs grep -l -E "regex"
##根据时间查找日志
grep '2020-02-27 17:5[6,9]' log.log
##查询指定时间段内的日志
grep -E '2020-02-27 14:5[5-9]|2020-02-28 15:0[0-5]' log.log
##查找关键字
grep -C 10 'aaaa' nohup.out
通过find与grep相结合查找所有子文件中包含timersub关键字的文件
find / -name '*' | xargs grep 'timersub'
借助grep -r只搜索子目录的内容就能够避免提示(Is a directory)
find / -name '*' | xargs grep -r 'timersub'
搜索某个文件里面是否包含字符串,例如:
grep "search content" filename1
搜索多个文件里面是否包含字符串,例如:
grep "search content" dir
搜索某个目录以及子目录下的所有文件
grep -r "search content" dir
如果需要显示搜索文本在文件中的行数,可以使用参数-n
grep -n "search content" filename1
从文件内容查找不匹配指定字符串的行:
grep –v "被查找的字符串" 文件名
搜索、查找匹配的行数:
grep -c "被查找的字符串" 文件名
如果我们只想获取那些文件包含搜索的内容,那么可以使用下命令
grep -H -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1 grep -H -r "v\$temp_space_header" /u01/app/oracle/product/11.1.0/dbhome_1/rdbms/admin/ | cut -d: -f1 | uniq
9:如果只想获取和整个搜索字符匹配的内容,那么可以使用参数w
grep -w "ORA" utlspadv.sql
10: grep命令结合find命令搜索
find . -name '*.sql' -exec grep -i 'v\$temp_space_header' {} \; -print
sed命令
取行。多用于替换。默认会显示文件的全部内容。也可用于查找内容(这个用的比较少)
格式:sed 参数 匹配行/替换/查找的字符 文件名
参数:
-n 取消默认输出。即取消默认显示全部内容,一般与p搭配使用。
-r 表示支持扩展正则。
-i 修改文件内容
eg:
取行
显示test.txt文件第20行到第30行的内容。
sed -n '20,30p' test.txt
显示test.txt文件第20行的内容。
sed -n '20p' test.txt
显示第3行到最后一行。
sed -n '3,$p' test.txt
插入
如果在某一行匹配到content,就在前面插入两行
sed -i '/content/i\ first row\ second row\ ' test.txt
替换
格式:sed -i 's#找谁#替换为什么#g' test.txt
sed 's/原字符串/替换字符串/g'
举例:将test.txt文件内的nm全部替换为DDD
sed -i 's#nm#DDD#g' test.txt
找出/data文件夹内所有以.sh结尾的文件,替换所有文件内的abc为kpl.
find /data/ -type f -name "*.sh" |xargs sed -i 's#abc#kpl#g'
将第2行的abc替换为123,显示出来。
sed -n '2s#abc#123#gp' test.txt
这里若是加-i的话,则会用处理的结果行替换整个文件的内容,如:
sed -n '2s#abc#123#gp' test.txt -i # 则会把第2行中的abc全部替换为123后,清空文件,写入第2行内容
查找
将文件内包含abc的行显示.
sed -n '/abc/p' test.txt
将文件内没有包含abc字符的行,均显示出来(这里如果加-n的话就什么都不显示)。
sed '/abc/d' test.txt
awk
取列。取行。计算。
格式:awk 参数 取行/取列/查找的字符 文件名
awk ‘找谁{做什么}’ 文件 eg:awk ‘NR==2{print $3}’ test.txt 取出test.txt文件第2行的第3列内容
参数:
-F 指定分隔符(未指定时,默认空格作为分隔符)。 eg:awk -F ”,“ ‘{print $3}’ test.txt 用逗号作为分隔符,显示第3列
-F "[ ,]" 指定多个分隔符。 eg:awk -F "[ ,]" '{print $3,$5}' test.txt 用逗号或者空格作为分隔符,显示第3列和第5列
-F "[ ,]+" 指定多个分隔符。这里的+号表示,以连续出现的空格或逗号作为分隔符。
$n 第n列
$0 表示一整行的内容
NR 表示行号
{print }
取列:
awk ‘{print $3]’ test.txt 显示第3列
awk '{print $2,$6}' test.txt 显示第2列,第6列
awk '{print $2" ,aa"$4}' tets.txt 显示第2列,第4列。大括号内,双引号里的内容会原封不动的输出。
取行:
awk ‘NR==20,NR==30’ test.txt 显示第20行到第30行
awk ‘NR==20’ test.txt 显示第20行
查找:
awk '/123/' test.txt 显示文件内包含123字符的行
awk ‘!/123/’ test.txt 显示文件内不包含123字符的行
less
- u (up)向前滚动半页
 - d (down)向后翻半页
 - [pagedown]: 向下翻动一页
 - [pageup]: 向上翻动一页
 - h 显示帮助界面
 - Q 退出less 命令
 
附加备注
1.全屏导航
- ctrl + F - 向前移动一屏
 - ctrl + B - 向后移动一屏
 - ctrl + D - 向前移动半屏
 - ctrl + U - 向后移动半屏
 
2.单行导航
- j - 向前移动一行
 - k - 向后移动一行
 
3.其它导航
- G - 移动到最后一行
 - g - 移动到第一行
 - q / ZZ - 退出 less 命令
 
4.其它有用的命令
- v - 使用配置的编辑器编辑当前文件
 - h - 显示 less 的帮助文档
 - &pattern - 仅显示匹配模式的行,而不是整个文件
 
5.标记导航
当使用 less 查看大文件时,可以在任何一个位置作标记,可以通过命令导航到标有特定标记的文本位置:
- ma - 使用 a 标记文本的当前位置
 - 'a - 导航到标记 a 处
 
获取日期
DATE=`date +"%Y%m%d%H%M"`
参考连接
Linux如何搜索查找文件里面内容: https://blog.csdn.net/matthewwu/article/details/86307049
46个Linux面试常见问题送给你:https://www.cnblogs.com/passzhang/p/8552757.html
Linux面试题:https://blog.csdn.net/ThinkWon/article/details/104588679
linux下查找文件及文件内查找内容--find/grep/sed/awk:https://www.cnblogs.com/haocao-niu/p/11618527.html
Ubuntu 常用查找文件与文件内容指令:https://blog.csdn.net/qq_35451572/article/details/81094144
Linux查看文件内容的5种方式:https://blog.csdn.net/pro_fan/article/details/84348793
Linux less命令:https://www.runoob.com/linux/linux-comm-less.html
                    
                
                
            
        
浙公网安备 33010602011771号