shift

shift

移动位置参数。

概要

shift [n]

主要用途

  • 将位置参数$n, $n+1...重命名为$1, $2...

参数

n(可选):大于等于1且小于等于参数个数的整数,默认为1。

返回值

返回成功除非n大于参数个数或n小于1以及其他非法值。

例子

假设我们的脚本文件(test.sh)如下:

#!/usr/bin/env bash
# 显示前三个位置参数。
echo "$1 $2 $3"
# 移除前两个位置参数,并将$3重命名为$1,之后的以此类推。
shift 2
echo "$1 $2 $3"

在终端执行该脚本:

sh test.sh q w e r t

返回信息如下:

q w e
e r t

注意

  1. 该命令是bash内建命令,相关的帮助信息请查看help命令。
2024-08-08    
shopt

shopt

显示和设置shell操作选项

补充说明

shopt命令 用于显示和设置shell中的行为选项,通过这些选项以增强shell易用性。shopt命令若不带任何参数选项,则可以显示所有可以设置的shell操作选项。

语法

shopt(选项)(参数)

选项

-s:激活指定的shell行为选项;
-u:关闭指定的shell行为选项。

参数

shell选项:指定要操作的shell选项。

实例

使用shopt命令显示当前所有可以设置的shell操作选项,输入如下命令:

shopt           #输出所有可以设置的shell操作选项
cdable_vars     off
cdspell         off
checkhash       off
checkwinsize    on
cmdhist         on
dotglob         off
execfail        off
expand_aliases  on
extdebug        off
...

如图上所示,选项"cdspell"的状态为"off",即关闭cd拼写检查选项。现在,可以使用shopt命令将其开启,输入如下命令:

shopt -s cdspell          #开启cd拼写检查

执行上面的命令后,该选项的状态将变为"on",即开启状态。可以再次通过该命令显示一下shell操作选项即可,输出信息如下:

cdspell on                #开启cdspell选项

用户可以通过实际执行cd命令检查该选项是否被成功开启。

2024-08-08    
showmount

showmount

显示NFS服务器加载的信息

补充说明

showmount命令 查询“mountd”守护进程,以显示NFS服务器加载的信息。

语法

showmount(选项)(参数)

选项

-d:仅显示已被NFS客户端加载的目录;
-e:显示NFS服务器上所有的共享目录。

参数

NFS服务器:指定NFS服务器的ip地址或者主机名。

2024-08-08    
shuf

shuf

产生随机的排列。

概要

shuf [OPTION]... [FILE]
shuf -e [OPTION]... [ARG]...
shuf -i LO-HI [OPTION]...

主要用途

  • 将输入的内容随机排列并输出。
  • 当没有文件或文件为-时,读取标准输入。

选项

-e, --echo                  将每个ARG视为输入行。
-i, --input-range=LO-HI     将数字范围LO(最低)到HI(最高)之间的作为输入行。
-n, --head-count=COUNT      只输出前COUNT行。
-o, --output=FILE           将结果写入到文件而不是标准输出。
    --random-source=FILE    将FILE中内容作为随机数据源。
-r, --repeat                输出行可以重复。
-z, --zero-terminated       行终止符为NUL(空字符)而不是默认的换行符。
--help                      显示帮助信息并退出。
--version                   显示版本信息并退出。

参数

FILE(可选):要处理的文件,可以为任意数量。

ARG(可选):作为输入行的字符串,可以为任意数量。

返回值

返回0表示成功,返回非0值表示失败。

例子

# 模拟硬币抛掷,获取前10个结果:
[user2@pc ~]$ shuf -r -n 10 -e "正面" -e "反面"
反面
正面
正面
正面
反面
反面
反面
正面
正面
正面
[user2@pc ~]$ shuf -i 1-35 -n 5|sort -n && shuf -i 1-12 -n 2|sort -n
4
17
20
29
31
6
11

注意

  1. 该命令是GNU coreutils包中的命令,更多详细的帮助信息请查看man -s 1 shufinfo coreutils 'shuf invocation'
2024-08-08    
shutdown

shutdown

用来执行系统关机的命令

补充说明

shutdown命令 用来系统关机命令。shutdown指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。

语法

shutdown(选项)(参数)

选项

-c:当执行“shutdown -h 11:50”指令时,只要按+键就可以中断关机的指令;
-f:重新启动时不执行fsck;
-F:重新启动时执行fsck;
-h:将系统关机;
-k:只是送出信息给所有用户,但不会实际关机;
-n:不调用init程序进行关机,而由shutdown自己进行;
-r:shutdown之后重新启动;
-t<秒数>:送出警告信息和删除信息之间要延迟多少秒。

参数

  • [时间]:设置多久时间后执行shutdown指令;
  • [警告信息]:要传送给所有登入用户的信息。

实例

指定现在立即关机:

shutdown -h now

指定5分钟后关机,同时送出警告信息给登入用户:

shutdown +5 "System will shutdown after 5 minutes"
2024-08-08    
skill

skill

向选定的进程发送信号冻结进程

补充说明

skill命令 用于向选定的进程发送信号,冻结进程。这个命令初学者并不常用,深入之后牵涉到系统服务优化之后可能会用到。

语法

skill(选项)

选项

-f:快速模式;
-i:交互模式,每一步操作都需要确认;
-v:冗余模式;
-w:激活模式;
-V:显示版本号;
-t:指定开启进程的终端号;
-u:指定开启进程的用户;
-p:指定进程的id号;
-c:指定开启进程的指令名称。

实例

如果您发现了一个占用大量CPU和内存的进程,但又不想停止它,该怎么办?考虑下面的top命令输出:

top -c -p 16514
23:00:44  up 12 days,  2:04,  4 users,  load average: 0.47, 0.35, 0.31
1 processes: 1 sleeping, 0 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total    0.0%    0.6%    8.7%   2.2%     0.0%   88.3%    0.0%
Mem:  1026912k av, 1010476k used,   16436k free,       0k shrd,   52128k buff
                    766724k actv,  143128k in_d,   14264k in_c
Swap: 2041192k av,   83160k used, 1958032k free                  799432k cached

  PID USER     PRI  NI  SIZE  RSS SHARE stat %CPU %MEM   time CPU command
16514 oracle    19   4 28796  26M 20252 D N   7.0  2.5   0:03   0 oraclePRODB2...

既然您确认进程16514占用了大量内存,您就可以使用skill命令“冻结”它,而不是停止它。

2024-08-08    
slabtop

slabtop

实时显示内核slab内存缓存信息

补充说明

slabtop命令 以实时的方式显示内核“slab”缓冲区的细节信息。

语法

slabtop(选项)

选项

--delay=n, -d n:每n秒更新一次显示的信息,默认是每3秒;
--sort=S, -s S:指定排序标准进行排序(排序标准,参照下面或者man手册);
--once, -o:显示一次后退出;
--version, -V:显示版本;
--help:显示帮助信息。

排序标准:

  • a: sort by number of active objects
  • b: sort by objects per slab
  • c: sort by cache size
  • l: sort by number of slabs
  • v:sort by number of active slabs
  • n: sort by name
  • o: sort by number of objects
  • p: sort by pages per slab
  • s: sort by object size
  • u: sort by cache utilization

知识扩展

内核的模块在分配资源的时候,为了提高效率和资源的利用率,都是透过slab来分配的。通过slab的信息,再配合源码能粗粗了解系统的运行情况,比如说什么资源有没有不正常的多,或者什么资源有没有泄漏。linux系统透过/proc/slabinfo来向用户暴露slab的使用情况。

2024-08-08    
sleep

sleep

将目前动作延迟一段时间

补充说明

sleep命令 暂停指定的时间。

语法

sleep(参数)

参数

时间:指定要暂停时间的长度, 包括如下:

  • 2s: 2秒
  • 2m: 2分钟
  • 2h: 2小时
  • 2d: 2天
  • infinity: 永久

实例

有时在写一些以循环方式运行的监控脚本,设置时间间隔是必不可少的,下面是一个Shell进度条的脚本演示在脚本中生成延时。

#!/bin/bash

b=''
for ((i=0;$i<=100;i++))
 do
 printf "Progress:[%-100s]%d%%\r" $b $i
 sleep 0.1
 b=#$b
 done
echo
2024-08-08    
slocate

slocate

命令查找文件或目录

补充说明

slocate命令 是一个命令查找文件或目录。slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。

语法

slocate [-u][--help][--version][-d <目录>][查找的文件]

选项

-d<目录>或--database=<目录>  指定数据库所在的目录。
-u  更新slocate数据库。
--help  显示帮助。
--version  显示版本信息。

实例

使用指令"slocate"显示文件名中含有关键字"fdisk"的文件路径信息,输入如下命令:

$ slocate fdisk #显示文件名中含有fdisk关键字的文件的路径信息 

执行以上命令后,指令执行的输出信息如下:

$ slocate fdisk #显示文件名中含有fdisk 关键字的文件的路径信息  
/root/cfdisk        #搜索到的文件路径列表  
/root/fdisk  
/root/sfdisk  
/usr/include/grub/ieee1275/ofdisk.h  
/usr/share/doc/util-Linux/README.cfdisk  
/usr/share/doc/util-Linux/README.fdisk.gz  
/usr/share/doc/util-Linux/examples/sfdisk.examples.gz  
2024-08-08    
smbclient

smbclient

交互方式访问samba服务器

补充说明

smbclient命令 属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源。

语法

smbclient(选项)(参数)

选项

-B<ip地址>:传送广播数据包时所用的IP地址;
-d<排错层级>:指定记录文件所记载事件的详细程度;
-E:将信息送到标准错误输出设备;
-h:显示帮助;
-i<范围>:设置NetBIOS名称范围;
-I<IP地址>:指定服务器的IP地址;
-l<记录文件>:指定记录文件的名称;
-L:显示服务器端所分享出来的所有资源;
-M<NetBIOS名称>:可利用WinPopup协议,将信息送给选项中所指定的主机;
-n<NetBIOS名称>:指定用户端所要使用的NetBIOS名称;
-N:不用询问密码;
-O<连接槽选项>:设置用户端TCP连接槽的选项;
-p<TCP连接端口>:指定服务器端TCP连接端口编号;
-R<名称解析顺序>:设置NetBIOS名称解析的顺序;
-s<目录>:指定smb.conf所在的目录;
-t<服务器字码>:设置用何种字符码来解析服务器端的文件名称;
-T<tar选项>:备份服务器端分享的全部文件,并打包成tar格式的文件;
-U<用户名称>:指定用户名称;
-w<工作群组>:指定工作群组名称。

参数

smb服务器:指定要连接的smb服务器。

实例

列出某个IP地址所提供的共享文件夹

smbclient -L 198.168.0.1 -U username%password

像ftp客户端一样使用smbclient

smbclient //192.168.0.1/tmp  -U username%password

执行smbclient命令成功后,进入smbclient环境,出现提示符:smb:/>

这里有许多命令和ftp命令相似,如cd 、lcd、get、megt、put、mput等。通过这些命令,我们可以访问远程主机的共享资源。

直接一次性使用smbclient命令

smbclient -c "ls"  //192.168.0.1/tmp  -U username%password

smbclient //192.168.0.1/tmp  -U username%password
smb:/>ls

功能一样的。

创建一个共享文件夹

smbclient -c "mkdir share1" //192.168.0.1/tmp -U username%password

如果用户共享//192.168.0.1/tmp的方式是只读的,会提示NT_STATUS_ACCESS_DENIED making remote directory /share1

2024-08-08