前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell Code Snippet

Shell Code Snippet

作者头像
Yifans_Z
发布2023-08-23 18:52:30
1700
发布2023-08-23 18:52:30
举报

pkgs.org

https://pkgs.org/download/vim-common

代码语言:javascript
复制
# rpm redhat package manager 查看安装的包版本
rpm -qa | grep docker

命令后台运行

代码语言:javascript
复制
# 后台运行,关掉终端会停止运行
cmd &
# 后台运行,关掉终端不会停止运行
nohup cmd &
  • ctrl + z 将正在前台执行的命令放到后台,且让命令处于暂停状态。?
  • jobs:查看当前有多少在后台运行的命令,-l 选项可显示所有任务的 PID。
  • fg:将后台命令放回前台运行(可以跟 jobid )。
  • bg:将嵌套命令放到后台运行(可以跟 jobid )。

lookup CNAME records

代码语言:javascript
复制
dig zyf.im cname
# ;; ANSWER SECTION:
# zyf.im.  300  IN  CNAME  imzyf.github.io.

查找大文件

代码语言:javascript
复制
du -s ./*|sort -nr|head -3

一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就需要知道 Linux 下文件的存储机制和存储结构。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的 meta-data 中,数据被删除后,这个指针就从 meta-data 中清除了,而数据部分存储在磁盘中,数据对应的指针从 meta-data 中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除 access_log 文件后,空间还没释放,就是因为 httpd 进程还在一直向这个文件写入内容,导致虽然删除了 access_log 文件,但文件对应的指针部分由于进程锁定,并未从 meta-data 中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过 df 命令查询空间并未释放也就不足为奇了。

代码语言:javascript
复制
# 获取一个已经被删除但仍然被应用程序占用的文件列表
lsof | grep delete

通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理 Apache、Tomcat、Nginx 等 Web 服务产生的日志文件:

代码语言:javascript
复制
echo " " >/tmp/acess.log

grep 遍历文件夹查找文本内容

有时候我们需要在某一个包含很多子目录的目录中搜索查找包含某个文本内容的文本,我们可以在 grep 中加上 -r 选项让 grep 命令迭代进入子目录查找。同时在命令最后加上代表文件通配符的*号,不然 grep 会一直等待输入。

代码语言:javascript
复制
grep -r "查找文本内容" *

set

代码语言:javascript
复制
#!/usr/bin/env bash

set -o errexit #等价 set -e。只要发生错误,就终止执行。认为非0就是错误。
set +o nounset # 等价 set +u。遇到不存在的变量不报错。默认如此。
set -o pipefail # 只要一个子命令失败,整个管道命令就失败,脚本就会终止执行。
set -o xtrace # 等价 set -x。在运行结果之前,先输出执行的那一行命令,调试复杂的脚本是很有用。
代码语言:javascript
复制
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace

# 4合1
set -euxo pipefail
## 写法二
set -eux
set -o pipefail

# 或者执行命令时
bash -euxo pipefail script.sh

如果脚本里面有运行失败的命令(返回值非 0),Bash 默认会继续执行后面的命令。

实际开发中,如果某个命令失败,往往需要脚本停止执行,防止错误累积。这时,一般采用下面的写法:

代码语言:javascript
复制
command || exit 1

上面的写法表示只要 command 有非零返回值,脚本就会停止执行。

如果停止执行之前需要完成多个操作,就要采用下面三种写法:

代码语言:javascript
复制
# 写法一
command || { echo "command failed"; exit 1; }

# 写法二
if ! command; then echo "command failed"; exit 1; fi

# 写法三
command
if [ "$?" -ne 0 ]; then echo "command failed"; exit 1; fi

如果两个命令有继承关系,只有第一个命令成功了,才能继续执行第二个命令,那么就要采用下面的写法:

代码语言:javascript
复制
command1 && command2

CDPATH

代码语言:javascript
复制
# Unset CDPATH so that path interpolation can work correctly
unset CDPATH
代码语言:javascript
复制
export CDPATH=/etc
cd mail
/etc/mail

Ubuntu 命令行下设置时区

  • Ubuntu 16.04
代码语言:javascript
复制
sudo dpkg-reconfigure tzdata

按提示进行选择完成。

设置完成后发现在 crontab 仍然是按 UTC 执行的,应该是需要重启下系统或者:

代码语言:javascript
复制
/etc/init.d/rsyslog restart

Ubuntu 命令行下打开 PDF

一个文件夹中存放了大量的文件后,在窗口打开中被打开时是非常耗时的。当我们已经明确知道文件名时,可以直接在 Terminal 中使用命令,调用应用打开文件:

代码语言:javascript
复制
evince filename.pdf

References

– EOF –

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pkgs.org
  • 命令后台运行
  • lookup CNAME records
  • 查找大文件
  • grep 遍历文件夹查找文本内容
  • set
  • CDPATH
  • Ubuntu 命令行下设置时区
  • Ubuntu 命令行下打开 PDF
  • References
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档