书摘

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(使用前将#替换为@)

书摘 的相关文章

  • 如何将域名附加到我的服务器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个小问题 查看了这里和其他论坛 但找不到解决方案 我的网站位于 my domain com 网站位于共享主机上 在我的域名注册中 我添加了当我为
  • 安装 python-dev 和链接库后,Cython 中的 Hello World 程序因 gcc 失败

    我创建了一个简单的 hello world 程序 并尝试使用 gcc 执行生成的 C 程序 但无论我做什么 我都会得到大量未定义的引用 SO 有很多类似的问题 但他们都说安装 python dev 或其某些变体 或添加用于链接和加载库的标志
  • 无法从 Windows GUI 工具连接到远程 Linux 服务器上的 MySql 数据库

    我已经在 Amazon EC2 上的 Linux 服务器上设置了 mysql 数据库 这在本地效果很好 我可以登录 linux 盒子并管理 mysql 数据库 我正在尝试将本地 GUI 客户端连接到远程 mysql 但连接失败 我更新了 e
  • 拼写检查 shell 脚本

    我有一些疑问 我对一个应该是简单拼写检查器的脚本有疑问 它的目的是 当发现错误的单词时 它会提示用户输入该单词的正确拼写 如果用户输入正确的拼写 则会显示更正的单词以及错误的单词 下面 在读完所有单词之后 但是 如果用户只是按 Enter
  • 在 execl 在输出中不可见之前打印

    include
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • 找出Linux上一个进程使用了​​多少内存页

    我需要找出进程分配了多少内存页 每个页面是 4096 进程内存使用情况我在查找正确值时遇到一些问题 当我查看 gome system monitor 时 内存映射下有几个值可供选择 Thanks 这样做的目的是将内存使用量除以页数并验证页大
  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • Linux中如何避免sleep调用因信号而中断?

    我在 Linux 中使用实时信号来通知串行端口中新数据的到达 不幸的是 这会导致睡眠呼叫在有信号时被中断 有人知道避免这种行为的方法吗 我尝试使用常规信号 SIGUSR1 但我不断得到相同的行为 来自 nanosleep 联机帮助页 nan
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情

随机推荐