62、深入探索Bash shell:重定向、扩展与常用命令

深入探索Bash shell:重定向、扩展与常用命令

1. 标准错误输出重定向

在Bash shell中,标准输入和标准输出通常指的是键盘和屏幕,这是程序默认的输入输出方式。不过,当程序出错时,错误信息一般不会作为标准输出的一部分,而是通过标准错误输出显示,通常也会出现在屏幕上。

有时候,将错误信息捕获到文本文件中是很有用的,这可以通过重定向标准错误输出来实现,方法和重定向标准输出类似。例如:

wodim --scanbus 2> errormessage.txt

wodim 命令用于刻录CD, --scanbus 选项让它搜索系统中的CD - R/RW驱动器。如果系统配置不当,这个操作常常会产生错误信息。在命令后面,使用 2> 来重定向标准错误输出,而不是简单的 > ,这实际上是告诉Bash使用第二种输出类型,即标准错误。

也可以将标准输出和标准错误输出都定向到同一个文件,示例如下:

cdrecord --scanbus > error.txt 2>&1

这个操作稍微复杂一些。 wodim --scanbus 的标准输出会被发送到 error.txt 文件,第二个重定向命令告诉Bash将标准错误包含在标准输出中。也就是说,不是先将标准输出写入文件,再添加标准错误,而是Bash先将标准错误添加到标准输出,然后一起写入文件。

2. 使用花括号扩展

在命令行中,花括号扩展是一种非常实用的省力技巧。简单来说,花括号 {} 内的内容会被替换到指定的文件名中。例如,下面的命令会创建名为 PhotosGermany PhotosEngland PhotosSpain 的新目录:

mkdir Photos{Germany,England,Spain}

实际上, mkdir 命令将 Photos Germany England Spain 组合,创建了三个新目录。

如果还想创建一个名为 Photos 的目录(后面没有国家名称),可以通过在花括号内指定一个前面没有内容的逗号来实现。示例如下:

mkdir Photos{,Germany,England,Spain}
$ ls
Photos  PhotosEngland  PhotosGermany  PhotosSpain

此外,还可以使用两个点 .. 来指定数字或字母范围的扩展,这和通配符中使用破折号表示范围不同。例如,下面的命令会创建从 PhotosA PhotosZ 的目录:

mkdir Photos{A..Z}

3. Bash命令索引

这里介绍一些在Bash shell中常用的命令,这些命令是日常桌面系统中经常会用到的。每个命令的描述都比较简单,并且带有星号 * 的命令功能通常比简要描述的要多,建议查看其手册页获取更多信息。

3.1 命令列表约定

  • 当出现斜体字时,需要替换为自己的具体信息。
  • 普通用户可以运行的命令前面带有美元符号 $
  • 需要root权限(使用 sudo )的命令前面带有井号 #
  • 对系统有潜在危险的命令会明确标记,使用前需要研究其用法和功能。

3.2 常见Bash命令

命令 描述 典型命令选项 使用示例
$ alias 创建或显示命令别名 alias list =ls
$ alsamixer 调整音频音量级别 alsamixer
$ apropos 在手册页中搜索指定的单词或短语 apropos "word or phrase"
$ apt-cache 搜索、查询和操作APT数据库缓存 search :搜索指定包; showpkg :显示指定包的信息; depends :显示指定包的依赖关系 apt-cache search packagename
# apt-get 多功能工具,用于安装、删除和管理软件包 install :从仓库安装指定包; update :更新或构建包数据库; upgrade :尝试升级所有已安装的包; dist-upgrade :积极解决包冲突并升级所有已安装的包; remove :删除包; clean :删除旧的包安装文件; -f :尝试修复损坏的包依赖; force-yes :绕过保护措施(危险) apt-get install packagename
$ bzip2 压缩指定文件 -d :解压缩文件; -k :不删除原始文件; -t :进行测试而不写入数据 bzip2 myfile
$ bzip2 recover 尝试恢复损坏的 .bz2 文件 bzip2recover myfile.tar.bz2
$ cal 显示当前月(或指定月/年)的日历 cal 4 2005
$ cat 在屏幕上显示文件或合并显示两个文件 cat myfile
$ cd 切换到指定目录 cd /usr/bin
$ cdparanoia * 将CD音频轨道转换为硬盘文件 -B :批量模式; -S :设置CD读取速度 cdparanoia -S 8 -B
# wodim * 刻录音频或CD - R/RW数据光盘 -dev= :指定驱动器设备号; scanbus :扫描CD - R/RW驱动器; -speed= :指定写入速度; -v :详细输出 wodim dev=0,0,0 -speed=16 -v myfile.iso
# cfdisk * 危险!基于菜单的磁盘分区程序 cfdisk /dev/hda
# chgrp 更改文件/目录的组所有权 -R :递归应用更改到子目录 chgrp mygroup myfile
$ chmod 更改文件/目录的权限 -R :递归应用到子目录; reference= :从指定文件复制权限 chmod a+rw myfile
$ chown 更改文件所有权到指定用户名 -R :递归应用到子目录 chown username myfile1
# chroot 将文件系统的根更改为指定路径 chroot / home / mydirectory
# chvt 切换到指定的虚拟终端 chvt 3
$ clear 清除终端屏幕并将光标置于顶部 clear
$ cp 复制文件 -r :递归复制子目录和其中的文件; -s :创建符号链接而不是复制 cp myfile1 directory/
$ crontab 编辑或显示用户的crontab文件(定时任务) -e :编辑crontab文件; -l :列出crontab条目; -r :删除crontab文件; -u :指定用户并编辑其crontab文件 crontab -e
$ date 显示日期和时间 date
$ df 显示文件系统中的可用磁盘空间 -h :以人类可读的格式显示; -l :限制为本地文件系统 df -h
$ diff 显示指定文件之间的差异 -a :将所有文件视为文本文件; -i :忽略大小写差异; -s :抑制关于不可访问文件的错误信息 diff myfile1 myfile2
$ diff3 显示三个指定文件之间的差异 diff3 myfile1 myfile2 myfile3
$ dig 查找指定域名的IP地址 dig mysite.com
$ dmesg 显示内核消息日志 dmesg
# dosfsck * 检查和修复基于MS - DOS的硬盘分区 -a :自动修复; -r :修复时询问用户确认; -v :详细输出 dosfsck -rv /dev/hda4
# dpkg 安装、删除和管理本地安装包 -i :安装指定包; -r :删除指定包; -I :显示指定包的信息; ignore - depends = packagename.deb :忽略包依赖问题(危险) dpkg –i packagename.deb
# dpkg - reconfigure 重新配置已安装的包 dpkg - reconfigure packagename
$ du 显示文件和文件夹的大小(以千字节为单位) -h :以人类可读的格式输出; -s :只显示目录的总计 du -h / home / myuser
$ eject 弹出可移动存储磁盘 -t :关闭已打开的托盘 eject / media / dvd - rom
$ ex * 启动一个主要用于shell脚本的简单文本编辑器程序 ex myfile.txt
$ exit 退出shell(结束会话) exit
$ fdformat 对软盘进行低级格式化(不会创建文件系统) fdformat /dev/fd0
# fdisk * 危险!硬盘分区程序 -l :列出分区表 fdisk /dev/hda
$ fg 将后台运行的作业移到前台 fg 1
$ file 显示指定文件的信息,如文件类型 file myfile

下面是这些操作的流程图:

graph TD;
    A[开始] --> B[重定向标准错误输出]
    B --> C[使用花括号扩展]
    C --> D[使用常见Bash命令]
    D --> E[结束]

3.3 常见Bash命令(续)

命令 描述 典型命令选项 使用示例
$ find * 通过搜索目录查找文件(从当前目录开始) -maxdepth :指定子目录的搜索深度; -name :指定要搜索的文件名; -type :指定要返回的文件类型 find -name "myfile"
$ free 显示内存使用信息 -m :以MB为单位显示; -t :在表格底部显示总计 free -m
# fsck * 检查文件系统是否有错误(通常从救援盘运行) fsck /dev/hda1
$ ftp * 用于上传/下载到远程站点的FTP程序 ftp ftp.mysite.com
$ fuser 显示正在使用特定文件或文件系统的进程 -v :详细输出 fuser -v myfile
$ genisoimage * 从指定目录创建ISO镜像文件(通常用于使用 wodim 刻录光盘) -o :指定输出文件名; -apple :使用Mac OS扩展; -f :跟随符号链接; -J :使用Joliet扩展; -R :使用Rock Ridge扩展; -v :详细输出 mkisofs -o isoimage.iso -R -J -v mydirectory
$ grep * 在指定文件中搜索指定的文本字符串或单词 -i :忽略大小写差异; -r :递归搜索子目录; -s :抑制关于不可访问文件的错误消息 grep "phrase I want to find" myfile.txt
# groupadd 创建新组 groupadd mygroup
# groupdel 删除指定组 groupdel mygroup
$ groups 显示指定用户所属的组 groups myuser
$ gzip 压缩文件并替换原始文件 -d :解压缩文件; -v :详细显示压缩程度 gzip myfile
# halt 启动关机程序,结束所有进程并卸载所有磁盘 -p :关机后关闭电源 halt -p
# hdparm * 危险!调整或查看硬盘设置 hdparm /dev/hda
$ head 打印文本文件的前几行(默认前10行) -n :指定行数 head myfile.txt
$ help 显示常见Bash命令列表 help
$ history 显示历史文件(最近使用的命令列表) history
$ host 根据指定的域名或IP地址查询DNS服务器 -d :详细输出; -r :强制名称服务器返回缓存信息 host 82.211.81.166
$ hostname 显示计算机的本地主机名 hostname
$ id 显示指定用户的用户名和组信息(如果未指定则为当前用户) id myuser
# ifconfig * 显示或配置网络接口的设置 down :禁用接口; netmask :指定子网掩码; up :启用接口 ifconfig eth0 192.168.0.10 netmask 255.255.0.0 up
$ info * 显示指定命令的信息页面 info command
# init 更改当前运行级别 init 1
$ jobs 显示后台运行的作业列表 jobs
$ kill 终止指定进程 kill 1433
$ killall 终止具有指定名称的进程 -i :终止前确认; -v :详细报告 killall processnumber
$ last 显示最近的登录、重启和关机详细信息 last
$ ldd 显示指定程序所需的系统文件(库) ldd /usr/bin/program
$ less 交互式滚动浏览文本文件 -q :安静模式; -i :忽略大小写 less myfile.txt
$ ln 创建指定文件的链接,如符号链接 -s :创建符号链接(默认是硬链接) ln -s myfile1 myfile2
$ lpr 打印文件(发送到打印机队列) -V :详细显示打印作业进度 lpr myfile.txt
$ lpstat 显示打印队列 Lpstat
$ ls 列出目录内容 -a :列出所有文件,包括隐藏文件; -d :只列出目录名; -h :以人类可读的格式显示; -l :长列表格式; -m :以逗号分隔的列表显示 ls -h mydirectory
# lsmod 显示当前加载的内核模块 Lsmod
$ lsof 显示当前正在使用的文件 -u :限制结果为指定用户使用的文件 lsof -u username
$ man 显示指定命令的手册 man command
$ md5sum 显示MD5校验和(通常用于下载后确认文件完整性) md5sum myfile
# mkfs * 危险!在指定设备上创建指定的文件系统 -t :指定文件系统类型 mkfs -t vfat /dev/fd0
# modinfo 显示内核模块的信息 modinfo modulename
# modprobe 将指定模块插入内核,以及其依赖的其他模块 -k :设置模块的自动清理标志; -r :移除指定模块及其依赖 modprobe modulename
$ more 交互式滚动浏览文本文件(类似于 less more myfile.txt
# mount * 在指定位置挂载指定的文件系统 -o :指定命令选项,如 rw 允许读写访问 mount /dev/hda4 /mnt
$ mv 移动(或重命名)指定的文件和/或目录 -b :移动前备份文件; -v :显示操作细节 mv myfile mydirectory/
$ netstat * 显示当前的网络连接 netstat –a
$ nice 以指定优先级运行指定命令 -n :指定优先级,范围从 -20(最高)到 19(最低) nice -n 19
$ nohup 运行指定命令,即使用户注销也继续运行 nohup command
$ passwd 更改用户密码 Passwd
$ ping 检查本地机器与指定地址之间的网络连接 -w :指定秒数后退出 ping mydomain.com
$ printenv 显示当前用户的所有环境变量 Printenv
$ ps * 显示当前正在运行的进程 a :列出所有进程; f :以树状图形显示进程所有权; u :限制结果为当前用户运行的进程; x :包括非用户启动但以用户ID运行的进程 ps aux
$ pwd 显示当前目录 Pwd
# reboot 重启计算机 Reboot
$ renice 在进程运行时更改其优先级 renice 19 10704
$ rm 删除单个或多个文件和/或目录 -r :递归删除指定目录及其子目录; -f :强制删除,不提示确认(谨慎使用) rm -rf mydirectory
# rmmod 从内核中删除模块 rmmod modulename
# route * 添加、创建(或查看)路由表条目 route add default gw 192.168.1.1
$ runlevel 显示当前运行级别 runlevel
$ screen * 运行一个伪shell,即使用户登录状态改变也保持运行 -ls :显示当前运行的屏幕会话列表; -R :重新连接到已运行的屏幕会话或启动新会话 screen
$ sftp * 安全的FTP程序,通过SSH连接运行 sftp username@192.168.1.14
$ shred 用乱码覆盖文件数据,使其不可恢复 -u :覆盖后删除文件; -v :详细显示过程; -f :必要时强制更改权限以允许写入 shred -fv myfile
$ sleep 暂停输入指定的时间( s 表示秒, m 表示分钟, h 表示小时, d 表示天) sleep 10m
$ smbclient * 类似FTP的程序,用于登录基于SMB(Windows)的文件共享 smbclient //192.168.1.1/
$ sort 对指定文本文件中的条目进行排序(默认按ASCII排序) sort myfile.txt -o sorted.txt
$ ssh * 使用安全shell登录到远程计算机 ssh username@192.168.1.15
$ startx 启动GUI会话(如果GUI尚未运行) startx
$ su 临时以指定用户身份登录;如果未指定用户,则以root身份登录(前提是root账户已激活) - :采用用户的环境变量 su
$ sudo 以root权限执行指定命令 sudo command
$ tac 反向显示指定的文本文件(从最后一行到第一行) tac myfile.txt
$ tail 显示指定文本文件的最后几行 -n :指定显示的行数 tail myfile.txt
$ tar * 将指定的文件和/或目录合并为一个较大的文件,或从这样的文件中提取内容 -c :创建新存档; -j :使用bzip2压缩(或解压缩)文件; -f :指定文件名; -r :向现有存档中添加文件; -x :从现有存档中提取文件; -z :使用gzip压缩(或解压缩)文件 tar -zcf myfile.tar.gz mydirectory
$ tee 显示管道输出并将其保存到指定文件 ls -lh| tee listing.txt
$ top * 显示并允许用户操作进程的程序 top
$ touch 为指定文件设置当前时间和日期戳;如果文件不存在,则创建一个零字节的文件 touch myfile
$ tracepath 发现并显示到另一个主机的网络路径 tracepath 192.168.1.20
$ umask 设置新创建文件的默认权限 umask u=rwx,g=r,o=
# umount 卸载文件系统 umount /media/cdrom
# useradd 添加新用户 -m :为用户创建主目录 useradd -m username
# userdel 从系统配置文件中删除用户的所有信息(实际上删除用户,但用户拥有的文件可能仍然存在) -r :删除用户的 /home 目录 userdel -r username
$ unalias 删除指定的别名 -a :删除所有别名(谨慎使用) unalias command
$ uname 显示当前系统的技术信息 -a :显示所有基本信息 uname –a
$ unzip 解压Windows兼容的Zip文件 -l :显示存档内容但不实际解压 unzip myfile.zip
$ uptime 显示系统的运行时间、CPU负载平均值和登录用户 uptime
$ vim * 文本编辑器程序 vim
$ wc 统计文件中的单词数量 wc myfile.txt
$ whatis 显示指定命令的单行摘要 whatis command
$ whereis 显示二进制命令的位置,以及其源代码和手册页(如果适用) -b :只返回二进制程序的信息 whereis -b command
$ xhost 配置哪些用户/系统可以在X服务器上运行程序 + :允许指定用户/系统在X服务器上运行程序; - :相反操作 xhost +
$ xinit 启动基本的GUI会话(如果GUI尚未运行) xinit
$ zip 创建Windows兼容的压缩Zip文件 -r :递归包含所有子目录和文件; -u :更新Zip文件; -P :用指定密码加密Zip文件; -v :详细输出; -# :设置压缩级别,从0(无压缩)到9(最高) zip -r myfile.zip mydirectory
$ zipgrep 在Zip文件中搜索指定的文本字符串 zipgrep " search phrase myfile.zip

下面是使用这些命令的操作步骤总结:
1. 确定要执行的操作,例如重定向输出、创建目录、安装软件等。
2. 根据操作选择合适的命令,参考命令的描述和典型选项。
3. 根据实际情况替换命令中的斜体部分为具体信息。
4. 注意命令的权限要求,普通用户命令使用 $ 开头,需要root权限的命令使用 # 开头。
5. 对于危险命令,如 # cfdisk # fdisk 等,在使用前充分了解其功能和影响。
6. 执行命令并根据输出结果进行相应的处理。

通过掌握这些Bash shell的重定向、扩展和常见命令,用户可以更高效地操作和管理系统。无论是日常的文件操作、网络连接检查,还是系统的安装和配置,这些命令都能发挥重要作用。

graph LR;
    A[确定操作] --> B[选择命令]
    B --> C[替换信息]
    C --> D[注意权限]
    D --> E[处理危险命令]
    E --> F[执行命令]
    F --> G[处理结果]
代码下载地址: https://pan.quark.cn/s/8236006bf1f9 Word精灵插件:一款用于增强Microsoft Word功能的辅助软件,能够将多种复杂功能转化为插件形式,并在软件状态栏中进行展示,涵盖诸如批注管理、表格处理、内容替换、文档拆分、数学运算、字符提取、批量重命名等多项实用工具。在工作环境中应用该插件能够显著降低工作强度,提升操作效率。Word精灵插件兼容32位64位的Microsoft Word版本,支持Word 2007、2010、2013以及Word 2016操作系统,但不适用于Word 2003版本。此外,该插件同样支持WPS办公软件。 功能概述: 1、表格自动调整宽度:自动优化文档内所有表格的显示宽度。 2、批量导出批注信息:将文档内所有批注集中导出到Excel工作簿中。 3、表格至Excel多表导出:在将表格导出到Excel时,每个Word表格将独立存放在一个工作表中,Word文档内的表格数量Excel生成的工作表数量相等,并附有工作表目录。 4、表格至Excel单表导出:将文档内所有表格整合后导出到一个Excel工作表中,多个表格将按顺序排列于同一工作表内。 5、统一图片分辨率:对指定文件夹内的所有图片进行分辨率标准化处理。 6、图片批量缩放:依据设定比例对图片进行放大或缩小,支持按百分比调整。 7、图片批量插入:将图片批量插入到当前文档,可选择图片名称的展示形式,并设定图片的高度。 8、图片格式统一转换:将指定文件夹内的所有图片转换为相同的文件格式。 9、内容批量替换:对文档内容、页眉及页脚执行批量替换操作,例如将数字1替换为字母A,数字2替换为字母B,数字3替换为字母C等。 10、图片批量导出:将文档内所...
打开链接下载源码: https://pan.quark.cn/s/245ca7a27256 OmniGraffle是一款效能卓越的图形设计软件,在构建图表、流程图以及组织结构图等领域的应用尤为突出。该软件起源于Mac操作系统,并且兼容iOS平台,作为专业人士及业余爱好者进行图形设计时的首选工具之一。在OmniGraffle的功能模块中,“泳道图流程图”占据着核心地位,它主要用于勾勒业务流程图或系统流程图,其中各个分隔的泳道象征着不同的职能角色、部门划分或工作流程的各个阶段。泳道图(Lanes Diagram)作为流程图的一种特殊形式,通过将流程中的各个操作步骤分配到垂直或水平的“泳道”之中,能够明确地揭示出每个参方或部门所承担的责任以及整个流程的走向。此类图形通常应用于业务流程管理(BPM)和系统分析领域,旨在帮助用户深入理解并优化复杂的业务流程。 在OmniGraffle中构建泳道图时,由于软件本身并未提供现成的泳道图模板,用户需要自行设计图形和布局以模拟出泳道的效果。然而,您提供的"06stencil泳道图流程图.graffle"文件很可能是一个预先构建好的模板,能够显著简化这一过程。该模板可能包含了预先设计好的泳道形态、箭头以及其他流程图组件,使用户能够直接在此基础上进行修改和增添个人的步骤,从而节省了大量的设计时间。 应用OmniGraffle的泳道图模板,你可以: 1. **导入模板**:首先需要启动OmniGraffle并将"06stencil泳道图流程图.graffle"文件添加到你的项目工作中。 2. **定制泳道**:依据实际需求调整泳道的数量和尺寸,使之契合你的业务流程。每个泳道对应一个角色或部门,确保它们的排列顺序和宽度能够精确地体现实际的工...
你有没有过这样的场景:手头一台 Mac 一台 Windows,想发一个几百 MB 的压缩包过去;或者给同事传个文件,结果他说"微信发不了大文件";又或者你想给服务器拷文件,发现 scp 又得记 IP 又得配密钥。有没有一个工具,**不装服务、不注册账号、不折腾内网穿透,一条命令就能安全地把文件从 A 送到 B**?答案是有的——它就是 **croc** | 传统传输的痛点 | croc 的做法 | | --- | --- | | 需要注册账号 / 上传到第三方服务器 | 无需注册,点对点传输 | | 内网没有公网 IP,NAT 后面传不出去 | 自带 NAT 穿透,失败自动走中继兜底 | | 担心文件被中转服务器看到 | 端到端加密,中继只看得到密文 | | 传大文件被限速、被压缩画质 | 直连传输,无第三方限速 | | 断了要重新传 | 支持断点续传 | | 只能传单个文件 | 多文件、整个文件夹一起传 | 官方文档里列了一串特性,翻译成人话就是:**任何两台电脑、跨平台、端到端加密、支持续传、不用服务器也不用端口映射、IPv6 优先、还能走 Tor 之类的代理**。 croc 的成功其实说明了一件事:**好工具不一定功能多,而是把一个高频痛点解决得足够干净**。 它没有花哨的界面,没有账号体系,没有"分享空间"的概念——就是一台电脑生成口令、另一台输入口令,文件在端到端加密的保护下安全抵达。恰恰是这种"少即是多",让它从众多文件传输工具里脱颖而出,拿到 4 万多 Star,还被各路教程反复提及。 如果你也有"两台电脑临时传文件"的刚需,不妨花两分钟装一个试试——大概率会像很多人一样,用完就把"微信传文件"这招给戒了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值