Linux shell语法

6 篇文章 0 订阅

1、提取文件名

[root@localhost log]# var=/dir1/dir2/file.txt
[root@localhost log]# echo ${var##*/}
file.txt

2、提取后缀

[root@localhost log]# echo ${var##*.}
txt

3、提取不带后缀的文件名,分两步

[root@localhost log]# tmp=${var##*/}
[root@localhost log]# echo $tmp
file.txt
[root@localhost log]# echo ${tmp%.*}
file

4、提取目录

[root@localhost log]# echo ${var%/*}
/dir1/dir2

5、doc后缀改pdf

var=$file
tmp=${var##*/}
echo ${var%/*}/${tmp%.*}.pdf

使用文件目录的专有命令basename和dirname
1、提取文件名,注意:basename是一个命令,使用 ( ) , 而 不 是 (), 而不是 (),{}

[root@localhost log]# echo $(basename $var)
file.txt

2、提取不带后缀的文件名

[root@localhost log]# echo $(basename $var .txt)
file

3、提取目录

[root@localhost log]# dirname $var
/dir1/dir2
[root@localhost log]# echo $(dirname $var)
/dir1/dir2

4、Shell判断字符串包含
检查var文件名是否包含.doc(.docx的也会显示)

			var=$file
			result=$(echo $var | grep ".doc")
			if [[ "$result" != "" ]]
			then
			echo $file
			fi

5、shell字符串大小写转换

[root@localhost ]# echo 'hello' | tr 'a-z' 'A-Z'
HELLO
[root@localhost ]# echo 'HELLO' | tr 'A-Z' 'a-z'
hello

6、遍历文件夹下所有doc\docx\DOC\DOCX文件并转为pdf

#!/bin/bash
day=`date +%Y%m%d`;
echo "[`date '+%Y-%m-%d %H:%M:%S'`]start............................................."
function getdir(){
    for file in $1/*
    do
    if test -f $file
    then
			var=$file
			result=$(echo $var | tr 'A-Z' 'a-z' | grep ".doc")
			if [[ "$result" != "" ]]
			then
			tmp=${var##*/}
			pp=${var%/*}/${tmp%.*}.pdf
			if [ ! -f "$pp" ];then
			/home/inner/tools/unoconv/unoconv -f pdf $file
			fi
			fi
    else
            getdir $file
    fi
    done
}
getdir /home/file
echo "[`date '+%Y-%m-%d %H:%M:%S'`]end............................................."

7、获取文件名和大小

ls -l|awk '{print $9,$5}'

8、删除所有大小为0的文件

ls -l|awk '$5==0 {print "rm",$9}'|sh
找到所有大小为0的文件,支持子目录
find /home/file -size 0 -print
找到所有大小为0的文件,支持子目录并删除
find /home/file -size 0 -exec rm {} \;

9、获取时间

#获取test.dat的时间,long型,单位秒
echo `stat -c %Y /home/test.dat`
#获取系统当前时间,long型,单位秒
echo `date +%s`

10、加减

a=`stat -c %Y /home/test.dat`
b=`date +%s`
echo $[$b-$a]

11、获取文件的统计信息

$ wc testfile           # testfile文件的统计信息  
3 92 598 testfile       # testfile文件的行数为3、单词数92、字节数598 

12、获取文件夹文件数量

ls -l|grep '^-'|wc -l

13、查看当前目录下各个文件及目录占用空间大小

du -sh *
#排序
du -s * | sort -nr
#选出排在前面的10个
du -s * | sort -nr | head
#选出排在后面的10个
du -s * | sort -nr | tail 

14、显示进程名为java、所有者为root的进程。

pgrep -u root java

15、查找文件内容

##文件名+内容
grep -r "查询内容"  文件目录    

##只显示包含内容的文件名
grep -r -l "查询内容"  文件目录

##文件名+内容  
find 文件目录  -type f |xargs grep "查询内容"; 

16、获取pid

ps -ef | grep "job-admin-1.2-SNAPSHOT" | grep -v "grep" | awk '{print $2}'

17、调整系统时间和硬件时间

date #查看系统时间
date -R #查看系统时间,有时区
date -s '2019-01-01 12:09:22' #修改系统时间
hwclock #查看硬件时间
hwclock -w #系统时间同步到硬件时间

18、批量删除进程

kill -9 `ps -ef | grep xxx|awk '{print $2}' `

19、cp命令

-r  递归处理,将指定目录下的文件与子目录一并处理。 
-R或--recursive  递归处理,将指定目录下的所有文件与子目录一并处理
-i或--interactive  覆盖既有文件之前先询问用户

复制data整个文件夹及其子文件夹文件等到es文件夹下
复制后为/media/data/es/data

cp -r data/ /media/data/es

错误:

cp: cannot stat '–r': No such file or directory
cp: -r not specified; omitting directory '/home/programs/elasticsearch/data/'

可能是外挂硬盘问题,放到复制目录的父目录下cp

# cp不覆盖原有文件 a是原文件夹 b是目标文件夹
awk 'BEGIN { cmd="cp -ri /a/* /b/*";print "n" |cmd;}' 
# cp覆盖目标文件
cp -Rf a b

20、查看CentOS版本信息

[root@localhost home]# cat /etc/issue
\S
Kernel \r on an \m

[root@localhost home]# cat /etc/redhat-release #查看CentOS版本
CentOS Linux release 7.3.1611 (Core) 
[root@localhost home]# cat /proc/version #内核相关
Linux version 3.10.0-514.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41 UTC 2016
[root@localhost home]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost home]# uname -r
3.10.0-514.el7.x86_64

21、查看CentOS日志和重启信息

tail -f /var/log/message #系统日志
uptime #显示自上次重启以来已运行多长时间
lastlog
last  #显示最后登录的用户,显示重启请求
who #显示谁现在登录

22、检查你的 Linux 硬盘上的坏道/坏块

$ sudo fdisk -l
$ sudo badblocks -v /dev/sda1 > badsectors.txt

23、df -h和du -sh显示结果不一样
https://blog.csdn.net/weixin_34241036/article/details/94025055

lsof -n|grep deleted

24、Centos清除缓存

free -m
a)清理pagecache(页面缓存)
# echo 1 > /proc/sys/vm/drop_caches
b)清理dentries(目录缓存)和inodes
# echo 2 > /proc/sys/vm/drop_caches
c)清理pagecache、dentries和inodes
# echo 3 > /proc/sys/vm/drop_caches

参考:https://www.cnblogs.com/nzbbody/p/4391802.html

25、coredump 的打开和关闭

ulimit -c 输出如果为0,则说明coredump没有打开
ulimit -c 输出如果为unlimited,则说明coredump已打开
通过 ulimit -c unlimited 就可以打开它,
通过 ulimit -c 0 就可以关闭它

通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改/etc/profile文件 来使系统每次自动打开。
步骤如下:
1.首先打开/etc/profile文件
一般都可以在文件中找到 这句语句:ulimit -S -c 0 > /dev/null2>&1.ok,根据上面的例子,我们只要把那个0 改为unlimited 就ok了。然后保存退出。
2.通过source /etc/profile 使当期设置生效。
3.通过ulimit -c 查看下是否已经打开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值