linux 命令行

(windows10) ubuntu config --default-user root 指定子系统的登录账号
(windows10) wsl 进入子系统

命令&权限

  • 快捷键
按键 行动
Ctrl-a 移动光标到行首。
Ctrl-e 移动光标到行尾。
Ctrl-k 剪切从光标位置到行尾的文本。
Ctrl-u 剪切从光标位置到行首的文本。
Ctrl-y 把剪切环中的文本粘贴到光标位置。
Ctrl-l 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。
Alt-f 光标前移一个字。
Alt-b 光标后移一个字。
Alt-l 把从光标位置到字尾的字符转换成小写字母。
Alt-u 把从光标位置到字尾的字符转换成大写字母。
  • 通配符

接受文件名作为参数的命令,支持下列通配符

字符类 意义
* 匹配任意多个字符(包括零个或一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于字符集中的字符
[!characters] 匹配任意一个不是字符集中的字符
[:lower:] 匹配任意一个小写字母
[:upper] 匹配任意一个大写字母
---- ----
* 所有文件
g* 文件名以“g”开头的文件
b*.txt 以”b” 开头,中间有零个或任意多个字符,并以”.txt” 结尾的文件
Data??? 以“Data”开头,其后紧接着 3 个字符的文件
[abc]* 文件名以”a”,”b”, 或”c” 开头的文件
B.[0-9][0-9][0-9] 以”B.” 开头,并紧接着 3 个数字的文件
[[:upper:]]* 以大写字母开头的文件
[![:digit:]]* 不以数字开头的文件
*[[:lower:]123] 文件名以小写字母结尾,或以“1”,“2”,或“3”结尾的文件
  • 创建软连接
    ln -s src link
    当源文件被删除时,软链接失效,而硬链接还可以继续用来访问源文件。去掉[-s] 参数可创建硬链接。

  • 查看命令类型
    type ls

命令有四种类型:
1. 是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++ 语言写成的程序, 也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby,等等。
2. 是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令(builtins)。例如,cd 命令,就是一个 shell 内部命令。
3. 是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。在后续的章节里,我们将讨论配置环境变量以及书写 shell 函数。但是现在,仅仅意识到它们的存在就可以了。
4. 是一个命令别名。我们可以定义自己的命令,建立在其它命令之上。
  • 别名命令
    alias m='mkdir m' 创建
    unalias m 删除

  • 重定向
    ls -al aa 1>>ls-output.txt 2>&1
    ls -al aa &>>ls-output.txt(等价)
    将标准输入重定向至文件,标准错误重定向至标准输出(即文件)
    2> /dev/null 隐藏标准错误

  • 显示文件
    tail -f /var/log/messages 实时显示最后10行,这个文件是记录系统的一举一动

  • 历史记录
    history | grep mv
    !88 历史记录展开,再次键入该条历史记录

  • 文件类型

属性 文件类型
- 一个普通文件
d 一个目录
l 一个符号链接。注意对于符号链接文件,剩余的文件属性总是”rwxrwxrwx”,而且都是虚拟值。真正的文件属性是指符号链接所指向的文件的属性。
c 一个字符设备文件。这种文件类型是指按照字节流,来处理数据的设备。比如说终端机,或者调制解调器
b 一个块设备文件。这种文件类型是指按照数据块,来处理数据的设备,例如一个硬盘,或者 CD-ROM 盘。
  • 文件权限
    chmod u+x,go=rw 1.txt 给文件拥有者执行权限并给组和其他人读和执行的
    权限。多种设定可以用逗号分开。
    chown [owner][:[group]] 1.txt 更改文件或目录的所有者和用户组

  • 添加用户
    adduser unual 创建用户
    passwd unual 修改用户的密码

进程

  • 查看进程快照信息
    ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 8324 152 ? Ss 21:38 0:00 /init
root 3 0.0 0.0 8328 156 tty1 Ss 21:38 0:00 /init
unual 4 0.0 0.0 16892 3428 tty1 S 21:38 0:00 -bash
unual 21 0.0 0.0 17380 1920 tty1 R 21:43 0:00 ps aux
字段 含义
USER 用户 ID. 进程的所有者。
%CPU 以百分比表示的 CPU 使用率
%MEM 以百分比表示的内存使用率
VSZ 虚拟内存大小
RSS 进程占用的物理内存的大小,以千字节为单位。
START 进程运行的起始时间。若超过 24 小时,则用天表示。
STAT字段 含义
R 运行。这意味着,进程正在运行或准备运行。
S 正在睡眠。进程没有运行,而是,正在等待一个事件,比如说,一个按键或者网络数据包。
D 不可中断睡眠。进程正在等待 I/O,比方说,一个磁盘驱动器的 I/O。
T 已停止. 已经指示进程停止运行。稍后介绍更多。
Z 一个死进程或“僵尸”进程。这是一个已经终止的子进程,但是它的父进程还没有清空它。(父进程没有把子进程从进程表中删除)
< 一个高优先级进程。这可能会授予一个进程更多重要的资源,给它更多的 CPU 时间。进程的这种属性叫做 niceness。具有高优先级的进程据说是不好的(less nice),因为它占用了比较多的 CPU 时间,这样就给其它进程留下很少时间。
N 低优先级进程。一个低优先级进程(一个“好”进程)只有当其它高优先级进程执行之后,才会得到处理器时间。
  • 查看计算机运行状态和进程
    top
top - 21:56:19 up 17 min,  0 users,  load average: 0.52, 0.58, 0.59
Tasks:   4 total,   1 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  1.1 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
KiB Mem :  8295652 total,  5215984 free,  2850316 used,   229352 buff/cache
KiB Swap: 25165824 total, 25150436 free,    15388 used.  5311604 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   22 unual     20   0   17620   2036   1504 R   0.3  0.0   0:00.07 top
    1 root      20   0    8324    152    128 S   0.0  0.0   0:00.06 init
    3 root      20   0    8328    156    120 S   0.0  0.0   0:00.00 init
    4 unual     20   0   16892   3428   3324 S   0.0  0.0   0:00.06 bash
行号 字段 含义
1 top 程序名。
21:56:19 当前时间。
up 17min 这是正常运行时间。它是计算机从上次启动到现在所运行的时间。在这个例子里,系统已经运行了17分钟。
load average:0.52, 0.58, 0.59 加载平均值是指,等待运行的进程数目,也就是说,处于运行状态的进程个数,这些进程共享 CPU。展示了三个数值,每个数值对应不同的时间周期。第一个是前 60 秒的平均值,下一个是前 5 分钟的平均值,最后一个是前 15 分钟的平均值。若平均值低于 1.0,则指示计算机工作不忙碌。
2 Tasks: 总结了进程数目和各种进程状态。
3 Cpu(s): 这一行描述了 CPU 正在执行的进程的特性。
0.2us 0.2% of the CPU is being used for user processes. 这意味着进程在内核之外。
1.1sy 1.1% 的 CPU 时间被用于系统(内核)进程。
0.0ni 0.0% 的 CPU 时间被用于”nice”(低优先级)进程。
98.5id 98.5% 的 CPU 时间是空闲的。
0.0wa 0.0% 的 CPU 时间来等待 I/O。
4 Mem: 展示物理内存的使用情况。
5 Swap: 展示交换分区(虚拟内存)的使用情况。
  • 后台任务
    xlogo &

  • 以列出从终端中启动的任务
    jobs
    [1]+ Running xlogo &

  • 将后台任务返回前台
    fg %1

  • 暂停任务
    ctrl + z

  • 将任务移到后台
    bg %1

  • 通过 kill 命令给进程发送信号
    kill [-signal] PID

编号 名字 含义
1 HUP 挂起。这是美好往昔的痕迹,那时候终端机通过电话线和调制解调器连接到远端的计算机。这个信号被用来告诉程序,控制的终端机已经“挂起”。通过关闭一个终端会话,可以说明这个信号的作用。发送这个信号到终端机上的前台程序,程序会终止。许多守护进程也使用这个信号,来重新初始化。这意味着,当发送这个信号到一个守护进程后,这个进程会重新启动,并且重新读取它的配置文件。Apache 网络服务器守护进程就是一个例子。
2 INT 中断。实现和 Ctrl-c 一样的功能,由终端发送。通常,它会终止一个程序。
9 KILL 杀死。这个信号很特别。鉴于进程可能会选择不同的方式,来处理发送给它的信号,其中也包含忽略信号,这样呢,从不发送 Kill 信号到目标进程。而是内核立即终止这个进程。当一个进程以这种方式终止的时候,它没有机会去做些“清理”工作,或者是保存劳动成果。因为这个原因,把 KILL 信号看作杀手锏,当其它终止信号失败后,再使用它。
15 TERM 终止。这是 kill 命令发送的默认信号。如果程序仍然“活着”,可以接受信号,那么这个程序将终止。
18 CONT 继续。在停止一段时间后,进程恢复运行。
19 STOP 停止。这个信号导致进程停止运行,而没有终止。像KILL 信号,它不被发送到目标进程,因此它不能被忽略。

eg: kill -9 108
[1] Killed top

  • 树型结构的进程列表
    pstree

  • 系统资源使用快照
    vmstat
    输出一个系统资源使用快照,包括内存,交换分区和磁盘I/O。为了看到连续的显示结果,则在命令名后加上延时的时间(以秒为单位)。例如,“vmstat 5”。终止输出,按下Ctrl-c 组合键。

SHELL

  • shell环境变量
    登录 shell 会话会提示用户输入用户名和密码;例如,我们启动一个虚拟控制台会话。当我们在 GUI 模式下运行终端会话时,非登录 shell 会话会出现。
类别 文件 内容
登录shell /etc/profile 应用于所有用户的全局配置脚本。
˜/.bash_profile 用户私人的启动文件。可以用来扩展或重写全局配置脚本中的设置。
˜/.bash_login 如果文件 ˜/.bash profile 没有找到,bash 会尝试读取这个脚本。
˜/.profile 如果文件 ˜/.bash profile 或文件 ˜/.bash login 都没有找到,bash 会试图读取这个文件。这是基于 Debian 发行版的默认设置,比方说 Ubuntu。
非登录shell /etc/bash.bashrc 应用于所有用户的全局配置文件。
˜/.bashrc 用户私有的启动文件。可以用来扩展或重写全局配置脚本中的设置。
  1. 登录shell:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) ->( ~/.bashrc -> /etc/bashrc) -> ~/.bash_logout

    1. profile(由Bourne Shell和Korn Shell使用)和.bash_login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell
    2. bash_profile中一般会执行.bashrc
  2. 交互式非登陆shell: ~/.bashrc -> /etc/bashrc

在普通用户看来,文件 ∼/.bashrc 可能是最重要的启动文件,因为它几乎总是被读取。

VI编辑器

按键 移动光标
l or 右箭头 向右移动一个字符
h or 左箭头 向左移动一个字符
j or 下箭头 向下移动一行
k or 上箭头 向上移动一行
0 (零按键) 移动到当前行的行首。
ˆ 移动到当前行的第一个非空字符。
$ 移动到当前行的末尾。
w 移动到下一个单词或标点符号的开头。
W 移动到下一个单词的开头,忽略标点符号。
b 移动到上一个单词或标点符号的开头。
B 移动到上一个单词的开头,忽略标点符号。
Ctrl-f or Page Down 向下翻一页
Ctrl-b or Page Up 向上翻一页
nG 移动到第 n行。例如,1G 移动到文件的第一行。
G 移动到文件末尾。
按键 效果
a 当前光标后插入
A 当前行末尾插入
o 当前行的下方打开一行,进入编辑模式
O 当前行的上方打开一行,进入编辑模式
- -
x 删除当前字符
3x 删除当前字符及其后的两个字符。
dd 删除当前行。
5dd 删除当前行及随后的四行文本。
dW 删除从光标位置开始到下一个单词的开头。
d$ 删除从光标位置开始到当前行的行尾。
d0 删除从光标位置开始到当前行的行首。
删除从光标位置开始到文本行的第一个非空字符。
dG 删除从当前行到文件的末尾。
d20G 删除从当前行到文件的第 20 行。
- -
yy 复制当前行。
5yy 复制当前行及随后的四行文本。
yW 复制从当前光标位置到下一个单词的开头。
y$ 复制从当前光标位置到当前行的末尾。
y0 复制从当前光标位置到行首。
复制从当前光标位置到文本行的第一个非空字符。
yG 复制从当前行到文件末尾。
y20G 复制从当前行到文件的第 20 行。
p 在下方新开一行,粘贴复制内容
P 在上方新开一行,粘贴复制内容
J 将下一行拼接到当前行末尾
u 撤销之前的修改
fx 移动光标到当前行下一个x的字符上
- -
/word 查找word,n查找下一个
- -
:%s/Line/line/gc
: 冒号字符运行一个 ex 命令。
% 指定要操作的行数。% 是一个快捷方式,表示从一行到最后一行。另外,操作范围也可以用 1,5 来代替(因为我们的文件只有 5 行文本),或者用 1,$ 来代替,意是“从第一行到文件的最后一行。”如果省略了文本行的范围,那么操作只对当前行生效。
s 指定操作。在这种情况下是,替换(查找与替代)。
/Line/line 查找类型与替代文本。
g 这是“全局”的意思,意味着对文本行中所有匹配的字符串执行查找和替换操作。如果省略 g,则只替换每个文本行中第一个匹配的字符串。
c 需要用户确认每一个替换
:r file1.txt 复制整个file1.txt到当前文件

vi file1.txt file2.txt
可以同时编辑两个文件,通过:n/:N切换显示文件

  • 命令提示符
    PS1 环境变量定义了命令提示符的格式,默认为[\u@\h \W]$
符号 显示值
\a 以 ASCII 格式编码的铃声. 当遇到这个转义序列时,计算机会发出嗡嗡的响声。
\d 以日,月,天格式来表示当前日期。例如,“Mon May 26.”
\h 本地机的主机名,但不带末尾的域名。
\H 完整的主机名。
\j 运行在当前 shell 会话中的工作数。
\l 当前终端设备名。
\n 一个换行符。
\r 一个回车符。
\s shell 程序名。
\t 以 24 小时制,hours:minutes:seconds 的格式表示当前时间.
\T 以 12 小时制表示当前时间。
@ 以 12 小时制,AM/PM 格式来表示当前时间。
\A 以 24 小时制,hours:minutes 格式表示当前时间。
\u 当前用户名。
\v shell 程序的版本号。
\V Version and release numbers of the shell.
\w 当前工作目录名。
\W 当前工作目录名的最后部分。
! 当前命令的历史号。
# 当前 shell 会话中的命令数。
$ 这会显示一个”$” 字符,除非你拥有超级用户权限。在那种情况下,它会显示一个”#” 字符。
[ 标志着一系列一个或多个非打印字符的开始。这被用来嵌入非打印的控制字符,这些字符以某种方式来操作终端仿真器,比方说移动光标或者是更改文本颜色。
] 标志着非打印字符序列结束。
  • 包管理工具
发行版 底层工具 上层工具
Debian-Style dpkg apt-get, aptitude
Fedora, Red Hat Enterprise Linux, CentOS rpm yum
风格 命令 含义
Debian apt-get update; apt-get install package_name 安装
Debian dpkg --install package_file 安装.deb
Debian apt-get remove package_name 卸载
Debian apt-get update; apt-get upgrade 更新全部软件
Debian dpkg --install package_file .deb更新
Debian dpkg --list 列出所安装的软件包
Debian dpkg --status package_name 是否安装
Debian apt-cache show package_name 显示安装包的信息
Debian dpkg --search file_name 查看某个文件是谁安装
Red Hat yum install package_name 安装
Red Hat rpm -i package_file 安装.rpm
Red Hat yum erase package_name 卸载
Red Hat yum update 更新全部软件
Red Hat rpm -U package_file .rpm更新
Red Hat rpm -qa 列出所安装的软件包
Red Hat rpm -q package_name 是否安装
Red Hat yum info package_name 显示安装包的信息
Red Hat rpm -qf file_name 查看某个文件是谁安装
  • 网络命令
    ping linuxcommand.org
    traceroute(tracepath) slashdot.org
    netstat -ie 查看系统中的网络接口
    netstat -r 显示内核的网络路由表

  • ssh软件包
    ssh user@ssh_server 登录
    ssh remote-sys 'ls *' > dirlist.txt 执行单个命令
    scp remote-sys:document.txt . 复制文件

  • 查找文件

find ~ -type f -name "*.JPG" -size +1M | wc -l

文件类型 描述
b 块设备文件
c 字符设备文件
d 目录
f 普通文件
l 符号链接

压缩和归档
gzip foo.txt
gunzip foo.txt.gz

tar cf playground.tar playground
tar xf playground.tar

zip -r playground.zip playground 打包
unzip playground.zip 解压

  • 同步
    rsync options source destination
    这里 source 和 destination 是下列选项之一,两者之一必须是本地文件:
    • 一个本地文件或目录
    • 一个远端文件或目录,以 [user@]host:path 的形式存在
    • 一个远端 rsync 服务器,由 rsync://[user@]host[:port]/path 指定
    • rsync unual@192.168.2.140:~/Desktop/1.txt /mnt/c/unual/code/1.txt 远程文件复制到本地
    • rsync /mnt/c/unual/code/linux.pdf unual@192.168.2.140:~ 本地文件复制到远程

备份别名
alias backup='sudo rsync -av --delete /etc /home /usr/local /media/BigDisk/backup'

sudo rsync -av --delete --rsh=ssh /etc /home /usr/local remote-sys:/backup 本地备份到远程主机
rsync -av -delete rsync://rsync.gtlib.gatech.edu/fedora-linux-core/development/i386/os fedora-devel 从远程服务获取更新

  • grep (global regular expression print)
    grep [options] regex [file...]
选项 描述
-i 忽略大小写。不会区分大小写字符。也可用 --ignore-case 来指定。
-v 不匹配。通常,grep 程序会打印包含匹配项的文本行。这个选项导致 grep 程序只会不包含匹配项的文本行。也可用--invert-match 来指定。
-c 打印匹配的数量(或者是不匹配的数目,若指定了 -v 选项),而不是文本行本身。也可用 --count 选项来指定。
-l 打印包含匹配项的文件名,而不是文本行本身,也可用--files-with-matches 选项来指定。
-L 相似于 -l 选项,但是只是打印不包含匹配项的文件名。也可用 --files-without-match 来指定。
-n 在每个匹配行之前打印出其位于文件中的相应行号。也可用--line-number 选项来指定。
-h 应用于多文件搜索,不输出文件名。也可用 --no-filename选项来指定。

grep bzip dirlist*.txt
多文件搜索,从一批文件的内容之中,查找匹配字符串

  • 正则表达式
    ^ $ . [ ] { } - ? * + ( ) | \
符号 用法
^ 行首匹配 (额外,和[]配合表示否定,[^bg]表示不包含b或者g)
$ 行尾匹配
. 用来匹配任意字符
[] 从一个指定的字符集合中匹配一个单个的字符
- 连接符,或表示一个范围,A-Z表示大写字母
| 表示或,grep需要使用-E选项,或者在表达式中使用转义
( ) 隔离作用
? 可有可无,表示匹配0次或者1次
* 匹配零个或多个元素
+ 类似*,但要求至少匹配一次
{n} 匹配n次
  1. grep -h '[^bg]zip' dirlist*.txt
    匹配zip三个字符前一个并非b/g字符
  2. grep -h '^[A-Za-z0-9]' dirlist*.txt
    匹配字符或数字开头
  3. grep -Eh '^(bz|gz|zip)' dirlist*.txt
    匹配以“bz”,或“gz”,或“zip”开头的文件名
  4. grep -E '^([[:alpha:]]+ ?)+$'
    匹配一个或多个字母开头,可以跟随一个空格,可重复多次。
  5. ^(?[0-9]{3})? [0-9]{3}-[0-9]{4}$
    匹配电话号码
  6. find . -regex '.[^-_./0-9a-zA-Z].'
    find是精确匹配,要求路径名全匹配
  • sort
选项 长选项 描述
-b --ignore-leading-blanks 默认情况下,对整行进行排序,从每行的第一个字符开始。这个选项导致 sort 程序忽略每行开头的空格,从第一个非空白字符开始排序。
-f --ignore-case 让排序不区分大小写。
-n --numeric-sort 基于字符串的长度来排序。使用此选项允许根据数字值执行排序,而不是字母值。
-r --reverse 按相反顺序排序。结果按照降序排列,而不是升序。
-k --key=field1[,field2] 对从 field1 到 field2 之间的字符排序,而不是整个文本行。看下面的讨论。
-m --merge 把每个参数看作是一个预先排好序的文件。把多个文件合并成一个排好序的文件,而没有执行额外的排序。
-o --output=file 把排好序的输出结果发送到文件,而不是标准输出。
-t --field-separator=char 定义域分隔字符。默认情况下,域由空格或制表符分隔。
  1. ls -al /usr/bin | sort -nr -k 5 | head
  2. sort --key=1,1 --key=2n distros.txt
    指定了 1,1,意味着“始于并且结束于第一个字段。”在第二个实例中,我们指定了 2n,意味着第二个字段是排序的键值,并且按照数值排序。
  • cut
选项 说明
-c char list从文本行中抽取由 char list 定义的文本。这个列表可能由一个或多个逗号分隔开的数值区间组成。
-f field list从文本行中抽取一个或多个由 field list 定义的字段。这个列表可能包括一个或多个字段,或由逗号分隔开的字段区间。
-d delim char当指定 -f 选项之后,使用 delim char 做为字段分隔符。默认情况下,字段之间必须由单个 tab 字符分隔开。
--complement 抽取整个文本行,除了那些由 -c 和/或 -f 选项指定的文本。
  1. cut -d ':' -f 1 /etc/passwd
    查看所有账号

shell 脚本

  • $?
    查看shell命令退出状态

  • 流程控制:
    1.if 分支结构

if commands; then commands
[elif commands; then commands...]
[else commands]
fi

2.while

 while commands; do commands; done

3.until

和while区别为,until满足条件,退出循环
until commands; do commands; done

4.case

case word in
    [pattern [| pattern]...) commands ;;]...
esac

5.for

for variable [in words]; do
    commands
done
省略掉 for 命令的可选项 words 部分,for 命令会默认处理位置参数
  • 计算文件状态:
表达式 如果为真
file1 -ef file2 file1 和 file2 拥有相同的索引号(通过硬链接两个文件名指向相同的文件)。
file1 -nt file2 file1 新于 file2。
file1 -ot file2 file1 早于 file2。
-b file file存在并且是一个块(设备)文件。
-c file file存在并且是一个字符(设备)文件。
-d file file存在并且是一个目录。
-e file file存在。
-f file file存在并且是一个普通文件。
-g file file存在并且设置了组 ID。
-G file file存在并且由有效组 ID 拥有。
-k file file存在并且设置了它的“sticky bit”。
-L file file存在并且是一个符号链接。
-O file file存在并且由有效用户 ID 拥有。
-p file file存在并且是一个命名管道。
-r file file存在并且可读(有效用户有可读权限)。
-s file file存在且其长度大于零。
-S file file存在且是一个网络 socket。
-t fd fd是一个定向到终端/从终端定向的文件描述符。这可以被用来决定是否重定向了标准输入/输出错误。
-u file file存在并且设置了 setuid 位。
-w file file存在并且可写(有效用户拥有可写权限)。
-x file file存在并且可执行(有效用户有执行/搜索权限)。
- -
string string 不为 null。
-n string 字符串 string 的长度大于零。
-z string 字符串 string 的长度为零。
string1 = string2 string1 == string2 string1 和 string2 相同. 单或双等号都可以,不过双等号更受欢迎。
string1 != string2 string1 和 string2 不相同。
string1 ">" string2 sting1 排列在 string2 之后。
string1 "<" string2 string1 排列在 string2 之前。
- -
integer1 -eq integer2 integer1 等于 integer2.
integer1 -ne integer2 integer1 不等于 integer2.
integer1 -le integer2 integer1 小于或等于 integer2.
integer1 -lt integer2 integer1 小于 integer2.
integer1 -ge integer2 integer1 大于或等于 integer2.
integer1 -gt integer2 integer1 大于 integer2.
test_file () {
    # test-file: Evaluate the status of a file
    FILE=~/.bashrc
    if [ -e "$FILE" ]; then
        if [ -f "$FILE" ]; then
            echo "$FILE is a regular file."
        fi
        if [ -d "$FILE" ]; then
            echo "$FILE is a directory."
        fi
        if [ -r "$FILE" ]; then
            echo "$FILE is readable."
        fi
        if [ -w "$FILE" ]; then
            echo "$FILE is writable."
        fi
        if [ -x "$FILE" ]; then
            echo "$FILE is executable/searchable."
        fi
    else
        echo "$FILE does not exist"
    return 1
    fi
}

[[ ]]支持以上所有表达式,并且
1.支持正则表达式

if [[ "\$INT" =~ ^-?[0-9]+$ ]]; then
    echo "INT is an integer."
else
    echo "INT is not an integer." >&2
    exit 1
fi

2.支持类型匹配

FILE=foo.bar
if [[  $FILE == foo.* ]]; then
    echo "$FILE matches pattern 'foo.*'"
fi
  • read
    read [-options] [variable...]
    如果 read 命令接受到变量值数目少于期望的数字,那么额外的变量值为空,而多余的输入数据则会被包含到最后一个变量中。如果 read 命令之后没有列出变量名,则一个 shell 变量,REPLY,将会包含所有的输入。
选项 说明
-a array 把输入赋值到数组 array 中,从索引号零开始。我们将第36 章中讨论数组问题。
-d delimiter 用字符串 delimiter 中的第一个字符指示输入结束,而不是一个换行符。
-e 使用 Readline 来处理输入。这使得与命令行相同的方式编辑输入。
-n num 读取 num 个输入字符,而不是整行。
-p prompt 为输入显示提示信息,使用字符串 prompt。
-r Raw mode. 不把反斜杠字符解释为转义字符。
-s Silent mode. 不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这会很有帮助。
-t seconds 超时. 几秒钟后终止输入。read 会返回一个非零退出状态,若输入超时。
-u fd 使用文件描述符 fd 中的输入,而不是标准输入。
#!/bin/bash
# read-ifs: read fields from a file
FILE=/etc/passwd
read -p "Enter a user name > " user_name
file_info=$(grep "^$user_name:" $FILE)
if [ -n "$file_info" ]; then
    IFS=":" read user pw uid gid name home shell <<< "$file_info"
    echo "User = '$user'"
    echo "UID = '$uid'"
    echo "GID = '$gid'"
    echo "Full Name = '$name'"
    echo "Home Dir. = '$home'"
    echo "Shell = '$shell'"
else
    echo "No such user '$user_name'" >&2
    exit 1
fi

有用的命令

  • sudo apt update
    是从/etc/apt/source.list文件中定义的源中去同步包的索引文件

  • du命令

选项 说明
h 以人类可读的方式显示
a 显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
s 显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
c 显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
apparent-size 显示目录或文件自身的大小
l 统计硬链接占用磁盘空间的大小
L 统计符号链接所指向的文件占用的磁盘空间大小

1.du -sh : 查看当前目录总共占的容量。而不单独列出各子项占用的容量
2.du -sh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量。
3.du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
4.du -sk filename 查看指定文件大小

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容