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/053f1da40351 在计算机科学领域,MIPS(Microprocessor without Interlocked Pipeline Stages)被视作一种精简指令集计算机(RISC)的架构,其应用广泛存在于教学实践和嵌入式系统设计中。 本篇内容将深入阐释MIPS汇编语言中涉及数组处理的核心概念实用操作技巧。 数组作为一种常见的数据结构,在编程中能够以有序化的形式储存及访问具有相同类型的数据元素集合。 在MIPS汇编语言环境下,数组通常借助内存地址索引进行操作。 以下列举了运用MIPS汇编处理数组的关键要素:1. **数据存储**: - MIPS汇编架构采用32位地址系统,从而能够访问高达4GB的内存容量。 - 数组元素一般以连续方式存放在内存之中,且每个元素占据固定大小的字节空间。 例如,针对32位的整型数组,其每个元素将占用4字节的存储空间。 - 数组首元素的地址被称为基地址,而数组任一元素的地址可通过基地址加上元素索引乘以元素尺寸的方式计算得出。 2. **寄存器运用**: - MIPS汇编系统配备了32个通用寄存器,包括$zero, $t0, $s0等。 其中,$zero寄存器通常用于表示恒定的零值,$t0-$t9寄存器用于暂存临时数据,而$s0-$s7寄存器则用于保存子程序的静态变量或参数。 - 在数组处理过程中,基地址常被保存在$s0或$s1寄存器内,索引则存储在$t0或$t1寄存器中,运算结果通常保存在$v0或$v1寄存器。 3. **数组操作指令**: - **Load/Store指令**:这些指令用于在内存寄存器之间进行数据传输,例如`lw`指令用于加载32位数据至寄存器,`sw`指令...
根据原作 https://pan.quark.cn/s/cb681ec34bd2 的源码改编 基于Python编程语言完成的飞机大战项目,作为一项期末学习任务,主要呈现了游戏开发的基本概念和技术方法。 该项目整体构成约500行代码,涵盖了游戏的核心运作机制、图形用户界面以及用户互动等关键构成部分。 该项目配套提供了完整的源代码文件、相关技术文档、项目介绍演示文稿以及运行效果展示视频,为学习者构建了一个实用的参考范例,有助于加深对Python在游戏开发领域实际应用的认识。 我们进一步研究Python编程技术在游戏开发中的具体运用。 Python作为一门高级编程语言,因其语法结构清晰易懂和拥有丰富的库函数支持,在开发者群体中获得了广泛的认可和使用。 在游戏开发过程中,Python经常Pygame库协同工作,Pygame是Python语言下的一款开源工具包,它提供了构建2D游戏所需的基础功能模块,包括窗口系统管理、事件响应机制、图形渲染处理、音频播放控制等。 在"飞机大战"这一具体游戏实例中,开发者可能运用了以下核心知识点:1. **Pygame基础操作**:掌握如何初始化Pygame环境,设定窗口显示尺寸,加载图像和音频资源,以及如何启动和结束游戏的主循环流程。 2. **面向对象编程**:游戏中的飞机、子弹、敌人等游戏元素通常通过类的设计来实现,利用实例化机制来生成具体的游戏对象。 每个类都定义了自身的属性(例如位置坐标、移动速度、生命值状态)和方法(比如移动行为、碰撞响应、状态更新)。 3. **事件响应机制**:Pygame能够捕获键盘输入和鼠标操作事件,使得玩家可以通过按键指令来控制飞机的移动和射击行为。 游戏会根据这些事件的发生来实时更新游戏场景状态。 4. **图形显示刷新**:...
【顶级SCI复现】高比例可再生能源并网如何平衡灵活性储能成本?虚拟电厂多时间尺度调度及衰减建模(Matlab代码实现)内容概要:本文围绕高比例可再生能源并网背景下虚拟电厂的多时间尺度调度储能成本优化问题展开研究,重点探讨如何在保证系统灵活性的同时降低储能配置运行成本。通过构建多时间尺度(如日前、日内、实时)协调调度模型,并引入储能设备衰减建模,提升调度精度经济性。研究结合Matlab代码实现,复现顶级SCI论文中的优化算法建模方法,涵盖鲁棒优化、分布鲁棒、模型预测控制(MPC)等先进手段,兼顾风光出力不确定性需求响应因素,实现虚拟电厂内部多能源协同优化。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、智能电网、能源互联网领域的工程技术人员。; 使用场景及目标:① 掌握虚拟电厂多时间尺度调度的核心建模思路实现方法;② 学习如何将储能寿命衰减纳入优化模型以提升经济性;③ 复现高水平SCI论文中的优化算法仿真流程,服务于科研论文写作项目开发。; 阅读建议:建议结合文中提供的Matlab代码逐模块分析,重点关注目标函数设计、约束条件构建及求解器调用过程,配合实际案例数据进行调试验证,深入理解优化模型物理系统的映射关系。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值