书摘

2023-11-18

因为近几个项目都是基于Linux 平台,于是开始持续关注linux shell 和linux系统管理相关的知识,平时除了阅读在线的博客来汲取这方面的知识,也努力看一些书籍来完善知识体系,而这本<Linux Shell脚本攻略>是个人觉得比较实用的一本shell脚本教材,作者在其中分门别类的记录了各种解决实际的脚本,命令。就像英文原版书名所写,这是一本cookbook,像菜谱,拿来照着步骤做一做,能解决不少常见的实际问题。

这里仅摘录一些个人在使用中经常会翻开书看一看的tips,相信以后用多了自然就记住了。


1. 用shell 进行数学运算

十进制的加法是很简单明了的,但是要告诉shell 我需要一个变量,并且这个变量是两个数值变量的和,则不是像其他语言直接上来var=1+1 就能得到预期结果。

在shell环境中,可以利用let ,(())以及[] 来执行基本的算术操作,而在高级操作时,则需要用到expr 和bc 这两个工具。

当我们在shell 输入n1=4; n2=5时, 它实际存储的是两个字符串,当你试图使用n3=$n1+$n2来获得一个加和时,你仅仅会得到一个字符串 “4+5”,这显然不是我们想要的结果。

而let 可以用来执行基本的算术操作,例如 let n3=n1+n2; echo $n3, 你可能已经注意到,在let 表达式里,我们不需要用$符号来引用n1和n2.

又如自加和自减操作: let n1++; let n1--

[]的操作与let命令类似,例如 res=$[n1+n2] ; 在[ ]中也可以使用$ 前缀: res=$[$n1+$n2]

在使用(()) 时,变量名前必须加上$: res=$(($n1+$n2))


2.一些小命令

拼接文件: cat file1 file2 file3
压缩连续的空白行: cat -s file
删除空白行: tr -s '\n'

用find 命令在查找文件时,经常因为条件太少,例如只提供一个文件名来搜索,导致搜索时间太长,返回的结果太多而失去意义。这里列出常用的一些:

否定参数 ! : find . ! -name "*.txt" -print 所有非txt的文件

基于目录深度的搜索: -maxdepth -mindepth

根据文件时间进行搜索: -atime -mtime -ctime

find . -type f -atime -7 -print 七天内被访问过的

find . -type f -atime 7 -print  在七天前访问过的

find . -type f -atime +7 -print 访问时间超过7天的

-amin -mmin -cmin 是基于分钟为计量单位的

-newer 查找比某文件修改时间更长的文件


基于文件大小的搜索:

-size 

find . -type f -size +2k 大于2kb的文件


删除匹配的文件 -delete

find . -type f -name "*.swp" -delete


以文件权限进行匹配:

find -type -f -perm 644 -print


打印出用户slynux 拥有的文件

find . -type f -user slynux -print



结合find 执行命令或动作 -exec

find . -type f -user root -exec chown slynux {} \;



切换用户执行命令 :用su,当我们需要以其他身份执行 command,或者shell脚本,一般命令如下:

a. 切换用户只执行一条命令的可以用:  su - oracle -c your_command

b. 切换用户执行一个shell文件可以用:su - oracle -s /bin/bash your_shell.sh


使用pushd /popd 快速定位路径, dirs  查看栈内容,从0 开始编号,去相应目录只需要 pushd +num  , 而popd +num 可以移除相应的路径

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

书摘 的相关文章

  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • C语言中如何通过内存地址映射函数名和行号?

    如何用 GCC 中的内存地址映射回函数名称和行号 即假设一个 C 语言原型 void func Get the address of caller maybe this could be avoided MemoryAddress get
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • php exec 返回的结果比直接进入命令行要少

    我有一个 exec 命令 它的行为与通过 Penguinet 给 linux 的相同命令不同 res exec cd mnt mydirectory zcat log file gz echo res 当将命令直接放入命令行时 我在日志文件
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0

随机推荐