系统常用命令及快捷键
本文最后更新于 2025年7月2日 晚上
本文主要分享了自己在使用Linux和Windows系统过程中常用的命令及快捷键。
注意中文
—
和英文字符-
Linux
Win = Super
快捷键
一般
快捷键 | 作用 |
---|---|
Win+L | 锁屏 |
Ctrl+Alt+T | 新建终端 |
Ctrl+Alt+A(自定) | flameshot 截图 |
Ctrl+Alt+F(自定) | fsearch 搜索文件 |
Ctrl+Shift+N | 新建文件夹 |
Win+I(自定义) | 打开设置中心 |
Ctrl+L | 全选文件夹路径 |
F2 | 文件(夹)重命名 |
Win | 活动大纲 |
Win+Tab/Alt+Tab | 切换应用程序 |
Ctrl+Alt+上/下箭头,点击桌面左上角的“Activities” | 切换工作区(同一屏幕的全部内容) |
Alt+Enter | 查看选择文件/文件夹的属性,代替单击右键选择属性 |
Ctrl+1/2 | 改变文件夹视图查看方式,图标视图/列表视图 |
Ctrl+H | 显示隐藏文件 |
双击Ctrl(自定) | 打开uTools |
启动位于任务栏的程序 | Win + 数字键 |
窗口
快捷键 | 作用 |
---|---|
Win+E(自定义) | 新建文件夹窗口 |
win+H | 隐藏窗口 |
Win+D | 隐藏或显示全部应用窗口 |
Win+A | 显示应用程序菜单 |
Super+箭头 | 移动窗口位置(左/右:贴左/右;上:最大化;下:恢复) |
Ctrl+W | 关闭标签页 |
Ctrl+Q/Alt+F4 | (强制)关闭应用程序(窗口)。ALT+F4是基于任务管理器连接结束进程项,CTRL+Q只是关闭的快捷键 |
Alt+空格(自定) | 激活窗口菜单(内含置顶选项,也适用于没有系统标题栏的应用) |
Win+Shift+向上/下翻页 | 将窗口上/下移一个工作区 |
Win+Shift+上/下/左/右箭头 | 将窗口上/下/左/右移一个显示器 |
Alt+F7(自定义) | 使用键盘方向键移动窗口,按住Shift键快速贴边,按Enter键确认 |
目录
快捷键 | 作用 |
---|---|
Backspace | 返回上一级目录 |
Alt+左箭头 | 回退(搭配Backspace回到下一级目录) |
Alt+右箭头 | 前进(只能响应回退操作) |
打开文件夹之后,按backspace删除键就可以返回上一级;或者Alt+←也是可以返回上一级,用Alt+←返回上一级后,按Alt+→键就可以倒退回去一级。
鼠标
- 直接拖拉在最大化时的窗口标题可以还原窗口大小,再拖放回去就最大化。
- 在音量控制处用鼠标滚轮滚动可以直接调整音量,在任务栏中滚动滚轮可以切换任务栏,工作区则切换工作区。
- 工作区里的小窗口可以在不同工作区内拖拉,即移动到另一个工作区的功能。
- 按住
Shift
拖动窗口可以吸附上下边缘的移动。 - 水平滚动文件,请在按住
Shift
的同时转动鼠标滚轮。 - 双击选中词,三击选中整句。
- 按住Alt,鼠标可以选中带链接的内容(而不打开链接)。
- 按住Shift,鼠标在开头和结尾点击,可以选中全文(不用拖动了)。
- 拖动选中可直接完成复制粘贴的操作(对于某些禁止复制粘贴的网站)。
- 在Win11,按住Shift,点击鼠标右键,呼出旧版菜单。
- 鼠标中间有快捷关闭的功能。
路径
-
对于在
.zshrc
等文件中使用export
命令时,举例说明:1
2
3
4export PATH="$PATH:/new_path"
# 1. 路径之间用英文:分隔,中间不需要加空格。
# 2. 加双引号可以避免潜在的解析错误(空格、特殊字符)。
# 3. $PATH放在前面,避免新增路径覆盖掉之前定义的路径,减少潜在的冲突。系统查找命令时按照冒号分割顺序从前向后依次查找。
配置路径的文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19sudo updatedb # 更新数据库
sudo gedit ~/.bashrc
source ~/.bashrc
sudo gedit ~/.zshrc
source ~/.zshrc
sudo gedit /etc/profile # 此文件涉及系统的环境,即环境变量相关。这里修改会对所有用户起作用。
# 不能对zsh直接生效?需要在命令行里运行一遍source ~/.zshrc才能生效。
source /etc/profile # 让环境变量生效
sudo gedit /etc/ld.so.conf.d/opencv.conf
sudo ldconfig # 运行配置
sudo gedit /etc/ld.so.conf
sudo ldconfig # 运行配置
sudo gedit /etc/bash.bashrc
source /etc/bash.bashrc -
Ubuntu快捷方式图标的存放位置:
/usr/share/applications
/usr/share/icons/Mojave-CT-Night/mimes/scalable
-
打开回收站:
1
cd ~/.local/share/Trash/files
-
wine软件安装路径:
/home/lll25655/.wine/drive_c/'Program Files (x86)'
-
打开eDiary:
1
wine /home/lll25655/.wine/drive_c/'Program Files (x86)'/eDiary-4.2.2-win64/eDiary.exe
-
第三方库库默认安装路径
-
/usr/include
-
/usr/local/include
-
-
字体安装路径:
/usr/share/fonts
命令
软件、库的安装、卸载和升级
常用命令
1 |
|
优先级:
- < 0:永远不会安装,
- 1..99:仅当尚未安装其他版本的软件包时才会安装,
- 100..499:仅当其他发行版中没有安装或提供其他更新版本时才会安装,
- 500....989:仅当目标发行版中没有安装或没有更新的版本时才会安装,
- 990..1000:将安装,除非安装的版本较新,
- > 1000:将始终安装,即使它强制 APT 降级到旧版本。
默认情况下,每个已安装的软件包版本的优先级为 100,未安装的软件包的优先级为 500。同一软件包可能有多个不同优先级的版本。APT 会安装优先级较高的版本,除非安装的版本较新。
deb
安装路径
在 Ubuntu 下,使用 *.deb
包安装的软件,其主要文件会分散安装在系统的标准目录,而不是集中在某一个“专属”文件夹。具体来说:
- 可执行文件(程序主文件)
- 通常安装在
/usr/bin/
、/usr/sbin/
、/bin/
、/sbin/
等目录。 - 例如:
/usr/bin/vim
、/usr/bin/git
- 通常安装在
- 配置文件
- 一般安装在
/etc/
目录下的子目录。 - 例如:
/etc/nginx/
、/etc/mysql/
- 一般安装在
- 库文件
- 通常安装在
/usr/lib/
或/usr/lib64/
。 - 例如:
/usr/lib/libreoffice/
- 通常安装在
- 共享数据文件
- 通常安装在
/usr/share/
下。 - 例如:
/usr/share/doc/
(文档)、/usr/share/applications/
(桌面快捷方式)
- 通常安装在
- 日志文件
- 如果有日志,通常在
/var/log/
下。 - 例如:
/var/log/nginx/
- 如果有日志,通常在
- 卸载脚本、服务文件等
- 可能会分布在
/etc/init.d/
、/lib/systemd/system/
等与服务相关的位置。
- 可能会分布在
如何查看某个 .deb 包都装了哪些文件?
1 |
|
卸载使用deb安装的软件
操作前确保备份重要数据,以防误删。
-
卸载软件包:
1
2
3
4# apt list --installed | grep -i possible_package_name # 模糊搜索
sudo apt remove package_name
# or
sudo dpkg -r package_name -
彻底卸载并删除配置文件:
1
2
3sudo apt purge package_name
# or
sudo dpkg --purge package_name -
(可选)自动清理无用依赖:
1
2sudo apt autoremove
sudo apt autoclean该操作好像挺危险的,说不定会误删。
-
删除用户数据和用户信息:
有的软件在用户目录下会有隐藏文件夹或配置(如
~/.config/package_name
、~/.package_name
等),你可以手动删除这些目录:1
2
3rm -rf ~/.config/package_name
rm -rf ~/.package_name
rm -rf ~/package_name如果软件为所有用户创建了专用的系统用户(比如
/home/someuser
或/var/lib/package_name
),你还可以:1
2sudo deluser someuser
sudo rm -rf /home/someuser以及:
1
2sudo rm -rf /var/lib/package_name
sudo rm -rf /etc/package_name软件在以上各文件夹内的命名不一定就是
package_name
,可能有大小写的区别,可能是缩写,等等。最好亲自去看看各文件夹内的内容来筛选和删除。 -
查找和删除残余文件:
1
sudo find / -name "*package_name*"
删除搜索出的软件文件。
-
完成。
查找查看
辅助搭配
Linux
grep
(global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。
1
ls -l /usr/local | grep cuda # 查询`/usr/local`路径下的软链接,且要求包括`cuda`字符串。
常用选项::
-i
:忽略大小写进行匹配。-v
:反向查找,只打印不匹配的行。-n
:显示匹配行的行号。-r
:递归查找子目录中的文件。-l
:只打印匹配的文件名。-c
:只打印匹配的行数。
当前终端
1 |
|
环境变量
1 |
|
内存
1 |
|
文件系统和挂载点
1 |
|
文件(夹)大小
1 |
|
文件(夹)修改时间
1 |
|
文件(夹)权限
在使用 ls -l
命令时,第一列的其余 9 个字符表示文件或目录的访问权限,分别对应三个字符一组的 rwx 权限。例如:
- r 表示读取权限
- w 表示写入权限
- x 表示执行权限
- - 表示没有对应权限
前三个字符表示所有者的权限,中间三个字符表示所属组的权限,后三个字符表示其他用户的权限。
1 |
|
表示文件名为file.txt
的文件,所有者具有读写权限,所属组和其他用户只有读取权限。
版本信息
1 |
|
用户手册
Linux man 命令是 "manual" 单词的缩写,用于查看各种命令、函数和配置文件的手册页面。
1 |
|
查找文件
1 |
|
目录列表
1 |
|
文件内容
1 |
|
查找过去编辑的文件
1 |
|
历史命令
1 |
|
文件新建、复制、移动、重命名和删除
基本
处理(特别是包含众多小文件的)大文件夹推荐使用[rsync](# rsync)命令。
1 |
|
rsync
基本语法
1 |
|
-a
,--archive
: 归档模式,表示以递归的方式传输文件,并保持所有文件属性不变--delete
: 删除那些target中有而source没有的文件--exclude
: 指定排除不进行同步的文件,比如--exclude="*.iso"
。-h
: 以人类可读的格式输出。--progress
: 显示进度-v
: 详细输出模式
用法
rsync
命令不仅可以传输文件夹,还可以传输单个文件。
复制/移动大文件夹
本机使用 rsync 命令时,可以作为cp
和mv
命令的替代方法,将源目录同步到目标目录。
1 |
|
删除大文件夹
在删除包含许多小文件的大文件夹时,可以考虑使用rsync
命令,以提高删除速度。以下是具体步骤:
- 使用
rsync
将文件夹同步为空目录,达到快速删除文件的效果。 - 删除空目录。
具体命令如下:
1 |
|
请替换/path/to/your/folder/
为你要删除的文件夹的实际路径。
增量备份
rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件。
除了源目录与目标目录直接比较,rsync 还支持使用基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录。
具体做法是,第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。
--link-dest
参数用来指定同步时的基准目录。
1 |
|
上面命令中,--link-dest
参数指定基准目录/compare/path
,然后源目录/source/path
跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录/target/path
。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。
下面是一个脚本示例,备份用户的主目录。
1 |
|
上面脚本中,每一次同步都会生成一个新目录${BACKUP_DIR}/${DATETIME}
,并将软链接${BACKUP_DIR}/latest
指向这个目录。下一次备份时,就将${BACKUP_DIR}/latest
作为基准目录,生成新的备份目录。最后,再将软链接${BACKUP_DIR}/latest
指向新的备份目录。
复制时排除部分文件(夹)
示例:把某个文件夹(比如 /path/to/source
)下的所有内容完整复制到一个新文件夹(比如 /path/to/target
),但在复制过程中,排除掉所有叫 build
的文件夹(不管它们在什么层级)。
推荐方法:用 rsync
1 |
|
-
--exclude='build/'
:会排除所有名为build
的目录(在任何层级都会被排除)。--exclude=build
:排除根目录下的 build 文件夹(只排除 source 根下的 build,不影响子目录里的 build)
-
/path/to/source/
末尾的/
表示复制“内容”,而不是把source
文件夹本身也复制过去。 -
这样,
source
下所有内容(除了任何层级的build
文件夹)都会被复制到target
。
如果只能用 cp?
cp
的 --exclude
选项并不支持递归排除所有层级的某个名字,需要结合 find
和 cpio
或者 rsync
。如果必须用纯 Bash,可以这样:
1 |
|
如果只需要排除根目录下的build/
:
1 |
|
mkcd
将mkdir
和cd
命令合并为一个mkcd
命令:
1 |
|
这个函数接受一个参数($1
),首先使用mkdir -p
命令创建一个目录,然后使用cd
命令进入这个目录。-p
选项可以确保如果目录已经存在,mkdir
命令不会报错。
你可以将这个函数添加到你的bash配置文件(如~/.bashrc
或~/.bash_profile
)中,这样每次打开一个新的终端时,这个函数都会被定义。
使用这个函数的方式如下:
1 |
|
这将创建一个名为new_directory
的新目录,并立即进入这个目录。
下载
测试网络连接:
1ping www.baidu.com
wget
1 |
|
下载超时,尝试添加参数
--no-cookie --no-check-certificate
。
curl
1 |
|
目录(跳转)
1 |
|
-
把目录结构信息保存到文本中,树状图:
1
tree > /home/luke/tree.txt
-
在终端打开文件管理器:
nautilus
或xdg-open
[空格]目标路径。1
2
3
4
5nautilus /path/to/directory # or
xdg-open /path/to/directory
# 打开当前终端所在目录
nautilus . # or
xdg-open .
压缩解压缩
zip
1 |
|
tar
.tar.gz = .tgz
1 |
|
-z
: 使用 gzip 压缩归档文件-c
: 创建新的归档文件-x
:解开压缩文件-v
: 显示详细输出,列出被添加到归档中的文件-f
: 指定归档文件的名称
tar.xz
1 |
|
xz的参数:
-z, --compress
: 强制压缩-d, --decompress
: 强制解压-k, --keep
: 保留(不删除)输入文件
pigz
1 |
|
设置文件权限
chmod
指令名称:chmod
使用权限:所有使用者
使用方式:chmod [-cfvR] [--help] [--version] mode file...
参数格式:
u
:表示该档案的拥有者。g
:表示与该档案的拥有者属于同一个群体(group)者。o
:表示其他以外的人。a
:表示这三者皆是。+
:表示增加权限。-
:表示取消权限。=
:表示唯一设定权限。r
:表示可读取。w
:表示可写入。x
:表示可执行。X
:表示只有当该档案是个子目录或者该档案已经被设定过为可执行。R
:对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
1 |
|
此外chmod
也可以用数字来表示权限,语法为:chmod abc file
,其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
一般是三个数字:
- 第一个数字表示文件所有者的权限。
- 第二个数字表示与文件所有者同属一个用户组的其他用户的权限。
- 第三个数字表示其它用户组的权限。
权限分为三种:读(r=4),写(w=2),执行(x=1)。综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。
所以,chmod 755
设置用户的权限为:
- 文件所有者可读可写可执行
- 与文件所有者同属一个用户组的其他用户可读可执行
- 其它用户组可读可执行
777就是rwxrwxrwx,意思是该登录用户(可以用命令id查看)、他所在的组和其他人都有最高权限。
chmod 4755
与chmod 755
的区别在于开头多了一位,这个4表示其他用户执行文件时,具有与所有者相当的权限。具有root的权限。
chmod a=rwx file
和chmod 777 file
效果相同。
chmod ug=rwx,o=x file
和chmod 771 file
效果相同。
1 |
|
chown
用法
在 Linux/Unix 系统下,
chown
命令用于更改文件或目录的拥有者(user)和所属组(group)。
1 |
|
- user : 新的文件拥有者的使用者 ID
- group : 新的文件拥有者的使用者组(group)
- -c : 显示更改的部分的信息
- -f : 忽略错误信息
- -h :修复符号链接
- -v : 显示详细的处理信息
- -R : 处理指定目录以及其子目录下的所有文件
- --help : 显示辅助说明
- --version : 显示版本
1 |
|
user和group的区别
- user 指的是文件/目录的“所有者”(Owner),即一个具体的用户账号,比如
alice
、bob
、root
等。- 拥有者对文件有独立权限(如读、写、执行)。
- group 指的是文件/目录归属的“用户组”(Group),比如
staff
、wheel
、users
、developers
等。- 一个用户可以属于多个组,文件的 group 权限控制“同组成员”能否访问、修改文件。
1 |
|
chown和chmod的区别
命令 | 主要作用 | 控制内容 | 典型命令 |
---|---|---|---|
chown | 更改拥有者和用户组 | user/group | chown bob:staff file.txt |
chmod | 更改文件访问权限 | r/w/x权限 | chmod 755 file.txt |
chown
= 谁“拥有”这个文件/文件夹chown
只是更改文件的拥有者(user)和用户组(group),并不会自动更改文件的读、写、执行权限设置。- 文件原有的权限(rwx)不会改变,只是“谁”享有这些权限的身份发生了变化。
chmod
= “拥有者/组/其他人”各自拥有哪些读/写/执行权限
root用户把某个文件权限给到普通用户
1 |
|
软/硬链接
区别
- 硬链接:
- 对源文件创建硬链接,修改源文件,被硬链接的文件也会被修改;修改被硬链接的文件,源文件也会被修改。
- 删除源文件,被硬链接的文件不受影响,因为硬链接和源文件指向相同的文件数据,只有当所有指向该数据的链接都被删除时,文件数据才会被删除。
- 不允许给目录创建硬链接。
- 硬链接只有在同一个文件系统中才能创建。(例如,电脑文件硬链接不到 U 盘)
- 软链接:
- 对源文件创建软链接,类似于对源文件创建快捷方式。
- 删除源文件,软链接会失效,因为软链接只是指向源文件路径的引用。
- 软链接可以对目录进行链接。
- 软链接可以跨文件系统 ,硬链接不可以。
总结:
- 硬链接:多个文件名指向同一个文件数据,删除其中一个文件名不会影响文件数据的存在。
- 软链接:一个文件名指向另一个文件名,删除源文件会导致软链接失效。
创建
1 |
|
-s
: 软链接(符号链接)-v
: 显示详细的处理过程
1 |
|
如果为源文件创建的目标(硬)链接是文件夹,则会在该文件夹下创建于源文件同名的文件。
你可以使用 find
命令结合 ln
命令来为指定目录下的所有文件在另一个目录下创建硬链接。以下是一个示例脚本,假设你要为 source_dir
目录下的所有文件在 target_dir
目录下创建硬链接:
1 |
|
以下是如何在Python中创建硬链接和软链接的示例代码:
创建硬链接:
1 |
|
创建软链接:
1 |
|
查看
-
软链接:
1
ll
-
硬链接。在Linux终端中,可以使用ls命令配合-i选项来查看文件的inode号,从而识别硬链接。所有具有相同inode号的文件都是同一个文件的硬链接。以下是具体步骤:
1
2
3
4
5# 使用ls -i命令查看文件的inode号:
ls -i file1
# 使用find命令查找具有相同inode号的所有文件:
find . -inum <inode_number> # . 表示载当前目录及其子目录下进行查找,可以换成其它指定目录。
# 这样,你就可以看到所有指向同一个inode的硬链接文件。
硬盘
挂载硬盘
1 |
|
其中,
/dev/sdX1
是U盘的设备名,你可以使用lsblk
或fdisk -l
命令来查找U盘的设备名。例如,插入硬盘前后,使用
lsblk
发现新增:
1
2sdc 8:32 0 7.3T 0 disk
└─sdc1 8:33 0 7.3T 0 part
硬盘类型
在Linux系统上,可以使用以下命令来查看硬盘是机械硬盘(HDD)还是固态硬盘(SSD):
1 |
|
将sdX
替换为硬盘的设备名,比如sda
。如果输出是1
,则表示是机械硬盘;如果输出是0
,则表示是固态硬盘。
除了查看/sys/block
目录下的信息外,你还可以使用lsblk
命令结合-o
选项来获取更多详细信息,包括硬盘类型:
1 |
|
lsblk
列出所有块设备。-d
选项只显示磁盘本身,不显示其分区。-o
选项指定要显示的列,其中name
表示设备名,rota
表示是否是旋转设备(0表示固态硬盘,1表示机械硬盘)。
通过这种方式,你可以在一个命令中看到所有硬盘的类型。
模拟鼠标键盘
https://github.com/jordansissel/xdotool
作用:xdotool
允许您以编程方式(或手动)模拟键盘输入和鼠标活动、移动窗口和调整窗口大小等。
用户文档:https://github.com/jordansissel/xdotool/blob/master/xdotool.pod
安装
- Debian and Ubuntu:
apt-get install xdotool
- Fedora:
dnf install xdotool
- FreeBSD:
pkg install xdotool
- macOS:
brew install xdotool
orsudo port install xdotool
- OpenSUSE:
zypper install xdotool
使用
xdotool 支持在一次调用中运行多个命令。
在 GNOME 终端中使用
xdotool key Ctrl+c
是成功的,使用xdotool key Ctrl+C
是失败的(xdotool key ctrl+c
在 ROS 下失败),关键在于字母c
要小写。在 Terminator 窗口下没有此现象。因此,干脆没有特殊要求就直接用小写吧。
帮助
1 |
|
键盘
1 |
|
模拟打字并按回车键:
1
2
xdotool type "s
"
1 |
|
1 |
|
鼠标
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
窗口
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
sleep
Linux sleep命令可以用来将目前动作延迟一段时间。
1 |
|
--help
: 显示辅助讯息--version
: 显示版本编号number
: 时间长度,后面可接 s、m、h 或 d。其中 s 为秒,m 为 分钟,h 为小时,d 为日数
1 |
|
后台运行
有时,您需要执行一个即使在您注销终端会话后也会继续运行的命令。nohup
(无挂起)命令允许您在后台运行进程而不会中断。例如,使用nohup long_running_command &
在后台启动命令,即使在关闭终端后也能保持其运行。此功能对于执行需要在没有持续监督的情况下持续存在的冗长任务或脚本特别有价值。
并行运行
1 |
|
定时关机
https://www.runoob.com/linux/linux-comm-shutdown.html
1 |
|
参数说明:
- -t seconds : 设定在几秒钟之后进行关机程序。
- -k : 并不会真的关机,只是将警告讯息传送给所有使用者。
- -r : 关机后重新开机。
- -h : 关机后停机。
- -n : 不采用正常程序来关机,用强迫的方式杀掉所有执行中的程序后自行关机。
- -c : 取消目前已经进行中的关机动作。
- -f : 关机时,不做 fsck 动作(检查 Linux 档系统)。
- -F : 关机时,强迫进行 fsck 动作。
- time : 设定关机的时间。
- message : 传送给所有使用者的警告讯息。
1 |
|
1 |
|
Shebang
在Linux或Unix系统中,Shebang(亦称为释伴)是一个由井号(#)和叹号(!)组成的字符序列,通常位于脚本文件的第一行。Shebang指明了执行该脚本文件的解释器路径,使得脚本可以像普通的可执行文件一样被调用。
shebang(如 #!/usr/bin/zsh
) 只有在你直接执行脚本(如 ./test.sh
)时才决定用哪个解释器。当你用bash test.sh
运行时,系统会:
- 启动你命令里写明的
bash
。 bash
再去读取test.sh
的内容并执行,不会理会 shebang。
所以,无论 test.sh
开头写什么 shebang,bash test.sh
都是用 bash
解释运行。
特性 | ./test.py |
python test.py |
---|---|---|
依赖 shebang | 是,shebang 必须正确指定解释器 | 否,解释器由用户显式调用 |
文件可执行权限 | 需要(chmod +x test.py ) |
不需要 |
解释器版本选择的灵活性 | 固定,由 shebang 指定 | 用户可以自由选择解释器 |
适用场景 | 脚本自动化、作为独立命令运行 | 开发和调试脚本,或需要指定特定解释器版本 |
小贴士
Linux顺序执行多行命令
- 分号
;
- 没有任何逻辑关系的连接符。当多个命令用分号连接时,各命令之间的执行成功与否彼此没有任何影响,都会一条一条执行下去。
- 逻辑或
||
- 当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行。
- 逻辑与
&&
- 当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与
||
正好相反。
- 当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与
- 管道符
|
- 当用此连接符连接多个命令时,前面命令执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面命令的输出,也会报错。
在Linux中使用AppImage
-
使其可执行。右键-属性-权限-允许将文件作为程序执行;或,命令行执行:
1
2
3
4chmod u+x <AppImage File>
# u user 文件所有者
# + 为指定的用户类型增加权限
# x 执行权限 设置为可执行权限 -
运行 AppImage 文件。使 AppImage 文件可执行后,只需双击它即可运行它。它将看到该软件正在运行,就像您在系统上安装它一样;或,命令行执行:
1
./app.appimage # sudo
-
卸载 AppImage 软件。由于从未安装过该软件,因此无需“卸载”它。只需删除关联的 AppImage 文件,您的软件就会从系统中删除。
其它
-
Linux diff 命令用于比较文件的差异。
diff
以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff
会比较目录中相同文件名的文件,但不会比较其中子目录。 -
指令需要root权限,要么命令前加
sudo
进行提权,要么以root
身份执行。1
2
3
4
5
6
7
8
9
10
11
12
13
14# Ubuntu 首次进入 root 用户模式
# 开启一个新的终端
# 设置 root 用户密码(Linux下输入的密码默认不会显示出来)
sudo passwd root
# 输入一个新的密码: yourpassword
# 请在确认一遍密码: yourpassword
# 切换到root用户
su root
# 输入刚刚设置的密码
# 退出root用户
exit -
$
表示普通用户,#
表示root用户。 -
定义环境变量:
1
2sudo gedit ~/.bashrc
export OPENAI_API_KEY={Your OpenAI API Key here} -
timeout
是用来控制程序运行的时间,运行指定的命令。如果在指定时间后仍在运行,则杀死该进程。1
2
3
4
5timeout 5s ping www.baidu.com # 5分钟之后终止ping操作
s : 秒 (默认)
m : 分钟
h : 小时
d : 天 -
等等。
小贴士
- 直接在当前文件夹窗口打字,可以搜索该目录及子目录下的文件(夹)。按
ESC
键退出。 Application
键即位置在键盘上右Ctrl
键左边的那个键,作用相当于单击鼠标右键。- 误按
Ctrl+Alt+F7
(进入文字界面)黑屏后按Ctrl+Alt+F1
回到图形界面。 - 直接将"文件管理器"中的文件拖到"终端"中就可以在终端中得到完整的路径名。
终端Terminal
命令行解释器Shell
终端负责是从用户这里接收输入(键盘、鼠标等输入设备),扔给 Shell,然后把 Shell 返回的结果展示给用户(比如通过显示器)。而 Shell 负责从终端那里拿到用户输入的命令,解析后交给操作系统内核去执行,并把执行结果返回给终端。
Bash
快捷键 | 作用 |
---|---|
Tab | zsh自动补全 |
Ctrl+C | 终止进程/命令 |
Ctrl+V | 插入特殊字符。当你按下Ctrl+V后,终端会等待你输入下一个字符,然后将其ASCII值插入到当前位置。例如,如果你按下Ctrl+V然后按Enter,终端将插入一个表示换行的特殊字符。 |
Shift+Ctrl+C | 复制 |
Shift+Ctrl+V | 粘贴 |
Shift+Ctrl+F | 查找 |
Shift+Ctrl+T | 新建标签页 |
Shift+Ctrl+N | 新建同路径窗口 |
Shift+Ctrl+W | 关闭标签页 |
Shift+Ctrl+Q | 关闭窗口 |
Ctrl+A | 光标移动到开始位置 |
Ctrl+E | 光标移动到最末尾 |
Ctrl+K | 删除此处至末尾的所有内容 |
Ctrl+U | 删除此处至开始的所有内容 |
Ctrl+W | 当在控制台或一个xterm窗口敲入文本时, CTRL+W 会删除从在光标处往后(回)的第一个空白符之间的内容。在某些设置里, CTRL+W 删除光标往后(回)到第一个非文字和数字之间的字符。 |
Ctrl+L | 类似于clear ,即清屏。其实只是把光标位置移动到屏幕顶部,仍保留了之前的终端内容。 |
Ctrl+Y | 将之前已经清除的文本粘贴回来(主要针对CTRL+U或CTRL+W)。 |
Ctrl+S | 冻结终端 |
Ctrl+Q | 解冻终端 |
Ctrl+T | 将光标位置的字符和前一个字符进行位置交换 |
Ctrl+R | 以交互方式搜索命令历史记录 |
Ctrl+PGUP/PGDN | 切换到上/下一个标签页 |
Ctrl+Shift+↑/↓ | 向上/下滚动内容 |
Shift+PageUp/PageDown | 向上/下翻页 |
Terminator
更方便的终端,区别于默认GNOME终端。
快捷键 | 作用 |
---|---|
Ctrl+Shift+E | 垂直分割窗口 |
Ctrl+Shift+O | 水平分割窗口 |
F11 | 全屏 |
Ctrl+Shift+C | 复制 |
Ctrl+Shift+V | 粘贴 |
Shift+Ctrl+W | 关闭(当前)终端 |
Shift+Ctrl+Q | 关闭窗口 |
Ctrl+Shift+N/Ctrl+Tab | 在分割的各窗口之间切换 |
Alt+Up/Down/Left/Right | 移动到上/下/左/右边的终端 |
Ctrl+Shift+Up/Down/Left/Right | 在水平/垂直分割的终端中将分割条向上/下/左/右移动 |
Ctrl+Shift+X | 将分割的某一个窗口放大至全屏使用 |
Ctrl+Shift+Z | 从放大至全屏的某一窗口回到多窗格界面 |
选中即复制,鼠标中键粘贴。对于单词,双击即可选中,三击选中一行。
tips
终端程序静默运行
- 在 Linux(以及类 Unix 系统)的终端(shell)中,命令末尾加上
&
,表示让该命令在“后台”运行。这就是常说的“后台进程”(background process)。 - 默认情况下,你在终端执行一个命令,shell 会等待该命令执行完毕,期间终端会被该进程“占用”。
- 加上
&
,shell 会让这个命令在后台运行,立即把控制权还给你,你可以继续在终端输入其它命令,甚至直接关闭终端窗口(如果进程没有依赖终端,则不会被终端关闭而退出)。 - 图形界面(GUI)程序(如 VS Code)通常加
&
就足够,不会因为关闭终端而退出(但在某些特殊终端或远程 SSH 下还是建议用nohup
)。
Shell脚本一次性启动多个程序(对应多个终端)
经常开发ros环境的应该知道,当节点太多难以控制的时候,不如写个脚本直接启动多个节点(对应多个终端)。
先介绍一下gnome-terminal
命令的使用:
1 |
|
了解上面后我们可以创建属于自己的脚本了:
-
在ROS工作空间(例如,
catkin_ws
文件夹)下创建一个脚本文件,例如runROS.sh
。 -
写入内容,例如:
1
2
3
4
5
6#!/bin/bash
gnome-terminal --window -- bash -c "source ./devel/setup.bash && roslaunch PACKAGE_NAME *.launch; exec bash"
sleep 3s
gnome-terminal --window -- bash -c "source ./devel/setup.bash && rosrun PACKAGE_NAME NODE_NAME *.yaml; exec bash"
sleep 3s
gnome-terminal --window -- bash -c "rosbag play /yourfolder/*.bag; exec bash"需要什么节点按照这个模块添加即可。
对于使用Terminator终端和zsh shell,修改文件内容为:
1
2
3
4
5
6#!/bin/zsh
terminator -e "zsh -c 'source ./devel/setup.zsh && roslaunch PACKAGE_NAME *.launch; exec zsh'"
sleep 3s
terminator -e "zsh -c 'source ./devel/setup.zsh && rosrun PACKAGE_NAME NODE_NAME *.yaml; exec zsh'"
sleep 3s
terminator -e "zsh -c 'source ./devel/setup.zsh && rosbag play /yourfolder/*.bag; exec zsh'"这里播放
rosbag
前面需要加上source ./devel/setup.zsh
,否则会报错zsh:1: command not found: rosbag
。如果
exec zsh
命令未能在命令运行完成后保持终端窗口打开,可以尝试修改terminal的配置,在terminal点右键,选择Profiles->Profile Preferences,然后找到Title and Command,里面有一项When command exits,后面选择为Hold the terminal open。因为
roscore
和roslanuch
打开ROS节点后不会自行关闭,需要使用快捷键Ctrl+C
手动关闭,所以不会运行到exec zsh
这一步。而且,使用快捷键
Ctrl+C
手动关闭ROS节点后,终端会直接退出,也就是关闭窗口(这个BUG?反而能自动关闭终端窗口,减少了自己的操作?)。如果
Ctrl+C
后不想关闭终端,可以在terminal点右键,选择Profiles->Profile Preferences,然后找到Title and Command,里面有一项When command exits,后面选择为Hold the terminal open。不过即使这样,当前终端也不再能输入命令,只能使用Terminator的功能水平分割/数值分割另起一个终端。当我手动 Ctrl + C 关闭 gnome-terminal + zsh,时,程序完全退出后才会关闭终端窗口。但当我使用 xdotool 模拟 Ctrl + C时,就算保持窗口常开,程序也会直接退出(留下一个临时文件),而不像手动时会处理完临时文件后再退出。相反,当我使用 gnome-terminal + bash 时,程序总会完全退出并保持窗口。这在有些情况下反而是可取的。
-
给脚本文件授予权限:
1
sudo chmod 755 runROS.sh
chmod 755
设置用户的权限为:- 文件所有者可读可写可执行。
- 与文件所有者同属一个用户组的其他用户可读可执行。
- 其它用户组可读可执行。
-
运行脚本文件:
1
2cd catkin_ws
./runROS.sh -
完成。
Shell脚本在语句报错后终止运行
set命令
-
set -e
:启用错误检测,命令返回非零状态时脚本立即退出。set -e
命令的作用域是全局的,也就是说,一旦执行了set -e
命令,它会影响整个脚本中所有后续的命令,无论它是在if
语句内还是外面。 -
set +e
:禁用错误检测,命令返回非零状态时脚本继续执行。 -
set -x
:启用调试模式,执行命令前打印命令。 -
set +x
:禁用调试模式,执行命令前不打印命令。
1 |
|
继续执行
shell
脚本在语句报错后默认仍会继续向下执行,解决方法为:
1 |
|
Shell脚本自动输入密码
1 |
|
Shell脚本按下Ctrl+C后仍可以执行功能
How to handle ctrl+c in bash scripts
1 |
|
trap
命令允许捕获信号(Ctrl+C是SIGINT信号)并在捕获后执行命令,trap
语法如下:
1
trap function_command_to_execute SIGNAL
- 为什么你使用 echo 两次?
- 按 ctrl+c 而不输入换行符会弄乱输出。
- 为什么将 stderr 重定向到
/dev/null
?
/dev/null
是一个特殊的设备名称,充当黑洞!你扔在那里的所有东西都会消失!这样,如果我们尝试删除的文件已经被删除,则屏幕上不会显示错误,这可能会无缘无故地让用户感到困惑!- 为什么用
exit 1
退出脚本?
- 退出代码非常有用!退出代码 0 表示程序/脚本按预期完成,其他任何值都可能表示因异常方式或错误退出。
- 这使得故障排除更加容易,而且还允许控制流,我们可以使用 $? 读取脚本或程序的退出状态。这允许 bash 脚本决定如果另一个脚本或程序异常退出时该怎么做。
为Shell脚本中的文本着色
Linux: How to colorize text in bash scripts
Shell脚本调试
在 Shell 脚本中,可以使用 exit
命令来终止脚本的执行。exit
命令会立即停止脚本的运行,并可以选择性地返回一个状态码。
你可以选择性地提供一个状态码,例如 exit 1
,表示脚本以错误状态退出。
文件备份与同步
-
使用操作系统的文件同步工具
-
Windows: 使用
robocopy
命令。创建一个批处理脚本来定期同步文件:
1
2
3
4
5
6
7@echo off
set src_file="C:\path\to\your\file.txt"
set dest_file="D:\path\to\backup\folder\file.txt"
:loop
robocopy %src_file% %dest_file% /MIR
timeout /t 60
goto loop -
Linux: 使用rsync命令。
创建一个Shell脚本来定期同步文件:
1
2
3
4
5
6
7#!/bin/bash
src_file="/path/to/your/file.txt"
dest_file="/path/to/backup/folder/file.txt"
while true; do
rsync -av --delete "$src_file" "$dest_file"
sleep 60
done
-
-
使用文件系统监控工具
你可以使用Python中的watchdog库来监控文件的更改,并在文件发生更改时自动复制到备份文件夹。
1
pip install watchdog
编写Python脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31import time
import shutil
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class FileChangeHandler(FileSystemEventHandler):
def __init__(self, src_path, dest_path):
self.src_path = src_path
self.dest_path = dest_path
def on_modified(self, event):
if event.src_path == self.src_path:
shutil.copy2(self.src_path, self.dest_path)
print(f"File {self.src_path} has been backed up to {self.dest_path}")
def monitor_file(src_path, dest_path):
event_handler = FileChangeHandler(src_path, dest_path)
observer = Observer()
observer.schedule(event_handler, path=src_path, recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
src_file = "path/to/your/file.txt"
dest_file = "path/to/backup/folder/file.txt"
monitor_file(src_file, dest_file) -
使用云存储服务。你可以使用云存储服务(如Dropbox、Google Drive、OneDrive等)来自动同步文件。将文件放在云存储的同步文件夹中,云存储服务会自动同步文件到云端和其他设备。
在bash终端窗口查看上一个命令的开始位置
在 Linux 的终端中,没有直接的命令可以一键跳转到上一个命令的开始位置,因为终端主要是一个输出流,并没有内置的“标记位置”或“跳转到输出开头”的功能。然而,可以通过以下方法间接实现类似的功能:
使用终端滚动功能
大多数终端(例如 Ubuntu 的默认终端 gnome-terminal
)支持滚动查看之前的输出:
- 快捷键:
- Ctrl + Shift + ↑/↓:向上或向下滚动内容。
- Shift + PageUp/PageDown:快速向上或向下翻页。
- 鼠标滚轮:
- 使用鼠标滚轮向上滚动查看之前的输出内容。
提前清屏
在运行耗时较长、输出较多的命令之前,手动清屏以标记起始位置。
- 在终端窗口执行
clear
命令会清空屏幕,运行命令后,输出内容从清空后的顶部开始。 - 当你想回到命令开头时,只需向上滚动到屏幕顶部。
“Ctrl+L”类似于
clear
命令,但并不会真正删除屏幕后面的内容,只是将光标移到屏幕顶部,并清空可见区域。
标记开始位置
-
在运行命令之前,打印一个明显的分隔符,方便在输出中快速找到起点。
1
echo "========== Start =========="
-
打开终端的搜索功能“Ctrl+Shift+F”并输入关键字(例如
========== Start ==========
),快速定位到命令开头。 -
完成。
将输出重定向到文件
如果你执行的命令输出非常多,可以提前将其输出保存到文件中,方便后续查看。
1 |
|
Windows
快捷键
快捷键 | 作用 | 自定义 |
---|---|---|
虚拟桌面 | ||
Win+Ctrl+D | 创建新的虚拟桌面,并切换到它 | |
Win+Ctrl+<-/-> | 切换桌面 | Ctrl+Alt+↑/↓ |
Win+Tab(或Alt+Tab且按住Alt) | 打开任务视图 | |
窗口 | ||
Ctrl+N | 新建当前窗口 | |
Ctrl+Shift+N | 新建文件夹 | |
Win+D | 将所有打开的窗口最小化,并转到桌面,再次按下即刻恢复所有内容 | |
Win+<-/-> | 可以自动将应用窗口完全贴靠到屏幕两侧 | |
Win+ ↑ | 可以将应用窗口最大化 | |
Win+ ↓ | 可以将应用窗口最小化。若是当前窗口处于最大化状态,则按住 Win 键不放,连续按两下 ↓ 键即可将窗口最小化。 | |
Win+V | 查看剪切板历史 |
其它一些可参考Linux快捷键。
其它:
- 将窗口移动到另一个虚拟桌面(不幸的是,Windows不包括直接用于在虚拟桌面之间移动窗口的键盘快捷键):Win+Tab打开任务视图后,使用鼠标拖动应用窗口到另一个虚拟桌面。
- Windows 10 系统 Win+<-/-> 分屏失效处理方法:控制面板-外观和个性化-轻松使用设置中心-使鼠标更易于使用-取消勾选"将窗口移动到屏幕边缘时不要自动排列窗口"。
- 设置快捷键:开始菜单-找到“Anaconda Powershell Prompt”-右键:打开文件位置-属性-快捷方式-快捷键:Ctrl+Alt+T。
Powershell
-
Powershell 配置 alias:
-
打开 Powershell,执行
echo $PROFILE
命令,确定新建文件的名称和位置。 -
例如:在
C:\Users\username\Documents\WindowsPowerShell
文件夹下新建Microsoft.PowerShell_profile.ps1
文件。 -
按格式输入命令:
1
2function 别名 { 需要替代的命令 }
Set-alias 's' 'Select-Object' -
以管理员身份打开Powershell 执行命令:
1
2Set-ExecutionPolicy RemoteSigned
# `Set-ExecutionPolicy RemoteSigned` 是一个 Windows PowerShell 命令,用于设置 PowerShell 执行策略。执行策略用于控制是否允许在系统上运行脚本,以及允许哪些来源的脚本运行。 -
重启Powershell。
-
-
Powershell 执行多条命令:
1
2
3# 在powershell7上已经支持&&操作,如低于该版本请继续往下看
(mkdir test) -and (cd test)
mkdir test;cd test -
将cmd/powershell中的打印信息输出保存为txt文本文件:
1
ping www.baidu.com >D:/log.txt
保存界面上已经执行过的输出内容:点击powershell左上角的下三角形,或直接
Ctrl+Shift+P
打开命令面板,找到“导出文本”选项,确认保存位置。 -
打开网址:
1
2
3
4# starts with default browser and adds to open browser
Start-Process -FilePath www.google.com
# starts with a specific browser
Start-Process -FilePath iexplore -ArgumentList www.google.com -
等等。
命令
复制文件(夹)
robocopy
发现如果直接在桌面拖动文件夹进行复制,如果被复制的文件夹内有不正常的文件,整个复制过程就不会被执行。因此,使用命令行执行复制操作。原意是查看是哪个文件破坏了整个复制过程,结果发现可以直接跳过不正常的文件。
1 |
|
最好以管理员方式启动终端?以保证复制过程没有文件权限问题。
无论文件夹路径最后加不加
\
,都是将 source 文件夹下的内容复制进 destination 文件夹,而不是复制进 source 文件夹本身。所以要提前新件号 destination 文件夹。
source
: 指定源目录的路径。destination
: 指定目标目录的路径。file
: 指定要复制的一个或多个文件。支持通配符( *或? )。如果不指定此参数,则使用*.*
作为默认值。options
:指定与robocopy命令一起使用的选项,包括copy 、 file 、 retry 、 logging和job选项。/s
: 复制子目录。此选项自动排除空目录。/e
: 复制子目录。此选项自动包含空目录。/v
: 生成详细输出,并显示所有跳过的文件。/mt:<n>
: 创建具有n 个线程的多线程副本。 n必须是 1 到 128 之间的整数。n的默认值为 8。为了获得更好的性能,请使用/log选项重定向输出。(慎用,如果遇到复制错误的文件,会卡在那里重复尝试)
1 |
|
复制大量小文件
如果你要复制的文件夹内包含大量小文件,可以考虑以下几种方法来提高复制效率:
-
使用 robocopy 的多线程选项
robocopy
支持多线程复制,可以显著提高复制大量小文件的速度。1
robocopy "C:\source_folder" "D:\destination_folder" /e /mt:16
就算不用多线程也很快。
-
压缩文件夹再复制
将文件夹压缩成一个压缩文件(如
.zip
),然后复制压缩文件,最后在目标位置解压。这种方法可以减少文件系统的开销。1
2
3Compress-Archive -Path "C:\source_folder" -DestinationPath "C:\source_folder.zip" # 使用 PowerShell 压缩文件夹
copy "C:\source_folder.zip" "D:\destination_folder.zip" # 复制压缩文件
Expand-Archive -Path "D:\destination_folder.zip" -DestinationPath "D:\destination_folder" # 使用 PowerShell 解压文件夹 -
使用第三方工具
一些第三方工具如
FastCopy
或TeraCopy
专门优化了文件复制过程,特别是对于大量小文件的复制。1
2
3# 下载并安装 FastCopy。
# 使用命令行进行复制
fastcopy.exe /cmd=diff /auto_close "C:\source_folder" /to="D:\destination_folder" -
使用 rsync(适用于 Windows Subsystem for Linux)
如果你在 Windows 上安装了 WSL,可以使用
rsync
,它在处理大量小文件时表现良好。1
rsync -av --progress /mnt/c/source_folder /mnt/d/destination_folder
选择适合你的方法来提高复制大量小文件的效率。
定时关机
https://learn.microsoft.com/de-de/windows-server/administration/windows-commands/shutdown
Win11怎么设置自动关机?Win11使用shut down命令自动关机的方法
允许您一次关闭或重新启动一台本地计算机或远程计算机。
1 |
|
还可以按 Win+R 快捷键后,在“打开”处输入
at 16:00 shutdown -s
。(TODO)
小贴士
设置/重映射快捷键
-
添加快捷方式,右键快捷方式-属性-快捷键。参考链接
解决快捷键反应延迟问题:
下载
-
Windows系统下也可以运行Linux系统下的
*.sh
脚本/命令。网上有解决办法,例如;或者把shell脚本语言转为Powershell脚本语言。- 在Powershell下使用
Invoke-WebRequest
命令下载文件很慢。网上有解决方法,例如。 - Powershell下可以使用
wget
和curl
等命令。
- 在Powershell下使用
-
使用IDM、迅雷等下载器。
-
IDM
-
优点:(分块)下载速度快(比浏览器默认下载快);定时下载;(使用通配符)添加批量任务;运行站点抓取;资源嗅探
-
缺点:收费;(大文件)分块下载后合并下载块慢(解决:设置单线程下载;下载的临时文件夹和“保存至”文件夹不要在同一块硬盘上;高配电脑(CPU和SSD))
- 改成单线程的话,该文件下载速度会变慢。当然,如果你同时下载许多个文件,那么可以这么做,不影响。
- 同盘剪切一定快于跨盘剪切,但同盘复制一般慢于跨盘复制。
-
-
迅雷
- 优点:定时下载;下载速度快
- 缺点:国产软件……想要速度快需要开会员
-
其它
-
Anaconda Prompt与Anaconda PowerShell Prompt与系统cmd与powershell的区别:
- cmd
- 优点:无
- 缺点:Python不行;
ls
不行
- Powershell
- 优点:
ls
行 - 缺点:Python不行
- 优点:
- Anaconda Prompt
- 优点:Python 行
- 缺点:
ls
不行
- Anaconda Powershell Prompt【完美】
- 优点:Python 行、
ls
行 - 缺点:无
- 优点:Python 行、
- cmd
-
导入环境变量:搜索“环境变量”——新建。
-
在 Windows PowerShell 终端中打开当前终端所在的文件夹:
1
explorer .
-
等等。
其它
3-2-1备份规则
3-2-1 备份规则是一种简单、有效的策略,可确保数据安全。它建议您将数据的三份副本保存在两个不同的介质上,其中一份副本保存在异地。让我们来分解一下:
- 数据的三份副本:您的三份副本包括原始数据或生产数据以及另外两份副本。
- 在两种不同的介质上:您应该将数据存储在两种不同形式的介质上。这在今天意味着与 2000 年代末有所不同。我稍后会详细讨论这一点。
- 一份异地副本:您应该在异地远程位置保存一份数据副本,最好距离其他两份副本几英里远。
如果您想保护您的个人信息、照片、工作文件或其他重要数据,3-2-1 备份策略是您的最佳选择。它可以帮助您避免出现容易受到人为错误、硬盘驱动器崩溃、盗窃、自然灾害或勒索软件影响的单点故障。``
文件(夹)命名
命名规范
为了确保日常使用的方便与系统兼容性,个人电脑上的文件夹和文件命名应遵循一定的规范。以下是一些通用的指导原则和最佳实践:
- 简洁明了:命名应简单且直接表达文件内容或文件夹用途,避免过长或含糊不清的名称。
- 避免使用特殊字符:一般来说,文件名中不应包含如下字符:
\/:*?"<>|
。这些特殊字符在多数操作系统中有特定用途,可能导致错误或不被识别。 - 使用合适的文件扩展名:文件扩展名反映了文件的类型,如
.txt
表示文本文件,.jpg
表示JPEG图像文件。正确的扩展名有助于操作系统正确识别和打开文件。 - 利用日期和版本控制:在文件名中包含日期(如
2023-03-15
)可以帮助管理文件版本。对于频繁更新的文档,可能还需要添加版本号(如v1.0
、v2.0
)。 - 避免空格:虽然大多数现代操作系统可以很好地处理文件名中的空格,但在某些情况下(如命令行操作或网络传输)可能会引起问题。可以使用下划线(_)或破折号(-)来代替空格。
- 区分大小写:虽然Windows系统的文件名不区分大小写,但Linux和macOS区分大小写。为了兼容性,最好在命名时注意大小写的一致性。
- 组织性和易读性:对于包含多个文件的文件夹,可以采用有组织的命名体系,如按功能、日期或项目分类。
- 国际化和本地化:如果你的文件可能会被不同语言的用户访问,避免使用特定语言的字符,尽量使用英文和国际通用的符号。
遵循这些基本原则可以帮助提升文件管理的效率和降低因命名不当引起的问题。如果有特定的组织或项目命名规则,也应优先遵守这些专业指导标准。
命名方法
整词用驼峰或下划线
_
命名,整词间用-
分隔。
在个人电脑上命名文件夹和文件时,虽然没有像编程语言那样严格的命名规范,但仍可以借鉴一些编程中的命名方法来组织文件,使其更加有序和易于管理。以下是一些常见的命名方法,以及如何将它们应用于文件和文件夹的命名:
- 小驼峰式命名法 (lowerCamelCase):
- 应用: 适用于文件名,尤其是在需要保持名称简洁且连贯的情况下。
- 示例:
personalBudget.xlsx
,summerVacationPhotos.jpg
- 大驼峰式命名法 (UpperCamelCase):
- 应用: 适合用于较重要的文件和项目文件夹,特别是在编程项目中。
- 示例:
ProjectReport2023.docx
,TaxDocuments2023
- 下划线命名法 (snake_case):
- 应用: 适用于需要强调易读性的情况,也有助于避免在使用某些操作系统和环境时出现问题。
- 示例:
final_report_2023.pdf
,holiday_photos_2022
- 破折号命名法 (kebab-case):
- 应用: 更常见于网页文件和资源,但也可以用于普通文件和文件夹。
- 示例:
end-of-year-summary-2023.pdf
,project-budget-2023.xlsx
- 注意: 文件系统如Windows和记录系统通常对破折号支持良好,但在某些命令行环境中可能会遇到解释上的问题。
- 日期前缀命名:
- 应用: 对于需要按日期管理的文档或文件,如财务文件或定期报告。
- 示例:
2023-01-30_MeetingNotes.docx
,2023-03-15_Invoice.pdf
选择哪种命名方法取决于个人偏好、所处的工作环境以及是否需要跨平台交互。例如,如果在一个环境中主要用Python编程,那么使用snake_case可能更自然。而如果是在处理法律或业务文档,使用UpperCamelCase或日期前缀可能更为合适。
无论选择哪种命名方法,重要的是保持一致性,这样可以减少寻找和管理文件的时间,也能使文件系统更加有序。
下划线_与短划线-的对比
特点 | 下划线 _ |
短划线 - |
---|---|---|
命名风格 | 常用于变量名、文件名(snake_case)。 | 常用于文件名、URL(kebab-case)。 |
双击选中行为 | 双击时会选中整个包含下划线的字符串。 | 双击时只选中单个单词。 |
可读性 | 下划线在代码中更容易识别为分隔符。 | 短划线在命令行或文件名中更直观。 |
使用场景 | 编写代码(变量名、函数名)。 | 文件名、URL 或配置文件中的键。 |
键盘输入 | 需要按住 Shift 键(Shift + - )。 |
直接输入,无需按住 Shift 键。 |
技术限制 | 不适用于某些文件系统或 URL(下划线合法但不常用)。 | 短划线在变量名中不被编译器支持(如 C++)。 |
- 在很多编程语言中,
_
是合法的变量名分隔符,而-
不是。 - 在文件系统中,
_
通常比-
更常用,尤其是在需要跨平台(Windows、Linux、macOS)兼容的情况下:- 某些旧系统可能会错误解析
-
。 -
在命令行中容易被误解为选项前缀(例如ls -a
)。
- 某些旧系统可能会错误解析
- 短划线更适合文件名和 URL,因为它们在视觉上更易分辨。
- 如果你更倾向于使用下划线
_
但希望解决双击选中全部字符串问题,可以通过配置编辑器的行为来优化。
表示存放未修改的源文件的文件夹
如果一个文件夹存放的是未修改的源文件(例如来自第三方库或外部依赖),常见的命名方式包括:
vendor/
:- 常见于包含第三方库的代码,例如在前端项目或后端依赖管理中。
- 例如:
vendor/react
,vendor/bootstrap
.
third_party/
或thirdparty/
:- 表示存放来自第三方的代码或库。
- 例如:
third_party/libpng
,third_party/zlib
.
external/
:- 用于存放外部依赖项,强调这些文件是外部的而且未修改。
- 例如:
external/protobuf
,external/sqlite
.
original/
或src/
:- 如果这些源文件是项目的一部分,但未经过修改,
original/
表示它们是原始版本。 - 例如:
original/images
,src/original_code
。
- 如果这些源文件是项目的一部分,但未经过修改,
表示额外的、杂的、不属于其他文件夹分类的文件
在软件开发中,如果需要一个文件夹存放一些 额外的、杂的、不属于其他文件夹分类的文件,通常会使用以下命名方式:
-
misc/
(最常见)-
含义:表示 "miscellaneous"(杂项、其他)。
-
用途:存储那些不容易归类到其他文件夹的文件。
-
-
miscellaneous/
- 含义:
miscellaneous
是 "misc" 的完整拼写形式。 - 用途:与
misc/
类似,但更正式。
- 含义:
-
other/
- 含义:表示 "other files"(其他文件)。
- 用途:存储那些不属于其他分类的文件。
-
extra/
- 含义:表示 "extra files"(额外文件)。
- 用途:表示一些附加文件,通常是非核心文件或附加的内容。
-
temp/
- 含义:表示临时文件(temporary)。
- 用途:如果这些杂项文件是临时性的或供短期使用,可以存放在
temp/
文件夹。
表示一个文件是另一个文件的备份
备份文件的命名方式通常遵循几个规则,以清晰地表示其来源和目的:
- 使用后缀
.bak
(常见于备份文件):- 例如:
config.json.bak
- 表示
config.json
文件的备份版本。
- 例如:
- 在文件名中添加
backup
:- 例如:
config_backup.json
- 清楚地表明这是一个备份文件。
- 例如:
- 添加时间戳:
- 例如:
config_20250423.json
或config_backup_20250423.json
- 通过时间戳标记备份的创建时间,方便管理多个备份。
- 例如:
- 命名模板:
original_filename.bak
,original_filename.timestamp
:- 例如:
data.csv.bak
data_20250423.csv
- 例如:
中文文本中夹用英文时,是否要留有空格
推荐留空,方便整词选择。如果不留空,选择时可能会选择夹杂中英文的整行而不是单个英文单词。
中文文本中夹用英文时,应根据所选用的中英文字体、字符间距以及排版的视觉效果决定英文词句与中文文字之间是否留有空格间距。如留空格,应保证体例的统一。——中华人民共和国新闻出版行业标准CY/T 154—2017号《中文出版物夹用英文的编辑规范》第8.1节
- 但同时我更鼓励各类排版引擎自动在用户没有显式输入空格字符的情况下,也在中英文词汇间产生适当的间距。现在有一些已经做到了,比如 iOS 系统、微信、Microsoft 办公软件等。
浏览器搜索操作符
可以直接用此网址,不需要记命令,它自动组装为命令:
-
GitHub高级搜索:https://github.com/search/advanced
语法:
- 整词搜索:双引号。示例:"关键词"
- 逻辑与:空格。示例:关键词1 关键词2
- 逻辑或:空格OR空格。示例:关键词1 OR 关键词2
- 逻辑非:空格-(减号前面必须是空格,减号后面没有空格,要紧跟着需要排除的词)。示例:关键词 -排除词
- 模糊搜索:*(通配符,匹配任意词或短语)。示例:
国家* 匹夫*
- 指定网站:关键词 site:网站地址。注意:“site:”后面跟的站点域名,不要带“http://”。site:和站点名之间,不要带空格。示例: 编程教程 site:blog.csdn.net
- 排除指定网站:关键词 -site:网站地址。示例:编程教程 -site:blog.csdn.net
中英文版本的简称
当描述一个文件是中文版本时,通常使用的语言代码有几种不同的形式,主要取决于具体的语境和标准。最常见的是“zh”,这是ISO 639-1标准下的代码,用于表示中文。然而,如果需要指明具体是简体中文还是繁体中文,人们可能会使用“zh-CN”(中国大陆使用的简体中文)和“zh-TW”(台湾地区使用的繁体中文)。这些是基于IETF语言标签(由ISO 639和ISO 3166国家代码组合而成),广泛用于网站和软件本地化中。
对于英文版本,通常使用的语言代码为“en”,这同样遵循ISO 639-1标准。如需进一步区分不同地区的英语,例如美国英语和英国英语,则分别使用“en-US”和“en-GB”。
这些缩写在多语言处理、软件本地化、网页语言标签等方面非常重要。选择正确的代码有助于正确设置语言环境,确保内容正确呈现给目标用户群体。如果有更具体的用途,如编程、文件标签或其他,请提供详细信息,以便提供更精确的建议。
命令行参数设计
在命令行参数设计中,使用一个短划线(-v
)还是两个短划线(--v
)取决于参数的用途和常见的命令行约定。以下是它们的区别和使用场景:
- 单短划线(
-v
)- 使用一个短划线通常表示短选项。
- 短选项通常是单个字母,简洁易用,例如:
-v
(verbose,启用详细输出)-h
(help,显示帮助信息)
- 短选项可以组合在一起。例如,
-abc
相当于-a -b -c
。 - 短选项适合经常使用的参数,因为打字很快。
- 双短划线(
--v
或--verbose
)- 使用两个短划线表示长选项。
- 长选项通常是一个完整的单词或短语,便于理解,例如:
--verbose
(启用详细输出)--help
(显示帮助信息)
- 长选项通常不允许组合,必须单独列出。
- 长选项更适合不常用的参数,或者需要更清晰语义的场景。
- 最佳实践是同时支持短选项和长选项,为用户提供灵活性。
截取屏幕的固定区域
1 |
|
使用以下命令运行脚本,并传递截图的区域坐标和输出文件路径:
1 |
|