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 查看下是否已经打开