sudo <另一指令>
用于以高权限执行指定指令,使用当前用户的用户密码即可。需要注意的是,这不等于以root执行指令;sudo可能导致奇怪的环境变量问题。
su -
登录root用户。需要root密码。使用该命令时请谨慎,root权限意味着可以进行任何可以由用户进行的操作。也因此,不建议在远程服务器上开放root连接权限,也不要随意向你的员工提供root密码。
shell千万行,谨慎第一行。root不规范,运维两行泪。
passwd
这个指令可用于修改root密码。务必谨慎。由于很多ubuntu版本上sudo passwd就可以成功执行修改密码操作,请避免轻易向不确定是否可靠的人员提供任何用户密码。
cat /proc/version
cat指令可以用于显示文件内容。该条指令的本质即是显示/proc/version的内容。
<包名> --version
很多包都有这种格式的版本查看选项,也有的是-v,也有些需要使用cat。
<包名> --help
很多包支持这样的帮助选项,或者是–h选项显示帮助。也有些包在没有选项时显示帮助信息。但也有些包在没有选项时也会正确执行,尽管你可能不希望它执行,务必注意。
man <目标>
该指令用于提供目标的帮助文档。例如,man pthread_exit指令可以显示官方的pthread_exit的posix文档。
help <目标>
用于获取关于目标的帮助。shell内建指令结构等适用该格式。
本文中包管理器主要指的是npm和apt-get。
<包管理器名> install <包名>
pip,apt-get,npm都适用这个选项。其中,pip用于python,npm常用于nodejs,apt-get则用于绝大多数常用的linux包。
此外,网上可以下载到cnpm,使用cnpm下载国内镜像可以提高下载速度。例如apt-get install byobu就可以安装byobu包。
<包管理器名> upgrade <包名>
npm和apt-get适用。
apt-get update
可以用来升级ubuntu系统。
pwd
显示当前所在目录(即工作目录)。
cd <目标目录>
切换至一个已存在的目录。目标目录可以是绝对或相对目录。
mkdir <新文件夹名>
在当前操作位置创建一个新的文件夹。在某些ubuntu下是md指令。
ll <目标目录>
列出已存在的目标目录下的文件和文件夹细节,可能需要安装另外的包。没有递归。
未指定目标目录时,缺省为当前目录。
ls <目标目录>
列出已存在的目标目录下的文件和文件夹,没有细节,没有递归。
未指定目标目录时,缺省为当前目录。
tree <目标目录>
列出已存在的目标目录下的文件和文件夹,没有细节,递归地显示所有子目录。一般需要安装另外的包。
未指定目标目录时,缺省为当前目录。
rm -f <文件或目录名列表>
用于删除文件。目标文件或目录以空格分开。-f选项用于忽略列表中不存在的项目。
该指令较为危险,任何涉及rm指令的应用环境都应当再三检查。尤其是删除当前目录下全部文件的指令rm -f ./*,如果点后意外加入了空格,则会按照通配符匹配,尝试删除硬盘上的任何文件,包括部分系统关键文件。
mv <源> <目标>
用于把源所指定的文件或文件夹移动到目标所指定的位置,可以指定另外的名称。也可用于重命名文件或文件夹。也即,两个参数作为文件时都是完整参数。
cp <源> <目标>
用于把源所指定的文件复制到目标所指定的目录,也可指定为另外的名称,加上文件名即可。笔者的ubuntu上,源不能是目录。
vim <文件名>
用于编辑已有文件和新建文件。当文件名指定的文件不存在时,使用保存功能就能新建一个。尽管也可以打开文件夹,但不建议随意编辑文件夹。小规模编辑时,不带插件的vim用起来比绝大多数文本编辑器还要方便许多。
以上只是基本操作,要深入了解vim,建议读者阅读陈皓前辈创作和翻译的文章。若要大规模编辑文档、代码等,建议加上插件,或者直接选用vscode、sublime等编辑器。gedit也可用一用,但gedit可以说是笔者见过的仅次于notepad的最简陋编辑器(微软:人在家中坐,锅从天上来)。
file <文件名>
该指令可以用来查看文件类型。对于可执行文件还会显示其所适用的CPU架构。
ln -s <目标项目> <软链接名字>
该指令可以创建一个软链接,其中,软链接名字可以附带目录,不附带目录的话会直接生成在工作目录。
chmod <选项> <文件名>
用于修改指定文件的访问权限。linux默认访问权限控制的粒度很粗,只有读、写、执行三种主要权限(但是还有SUID和EUID的概念,本质上也还是这三类权限,这里不作详述),采用4读2写1执行作为对应权限的代号。很明显,越敏感的权限,对应数字越小。综合权限以开放权限的总和表示。例如,7表示完全访问权限,5表示可读可执行。常用选项为755表示所有人可以读可以执行,但只有sudoer权限和root能修改;777表示所有用户有完全权限。
objdump -D <文件名>
用于检查目标文件和elf文件的内容。对于初学者来说其实没什么用。
make <选项>
用于Makefile辅助编译链接等。笔者会在其他文章中详述用法。
gcc <选项>
g++ <选项>
用于C和C++的编译链接等。笔者会在其他文章中详述用法。
pkg-config <选项> <库名>
pkg-config是一种辅助开发的工具。常见用法:
选项为–libs时,输出指定库的C++链接选项。
选项为–cflags时,输出指定库的C++预编译选项。
此外还有一种不使用库名的选项–list-all,它列出所有可用的C++库。如果安装了库但这里没列出来,应该是缺失.pc文件导致的。
exit
用于退出终端。也可以用于退出其他部分包。也有的包用的是quit,或二者都不支持。
clear
用于清空当前终端上的显示内容。
echo <内容>
输出指定内容到屏幕上。
echo <内容> > <文件名>
将输出重定向至文件。大多数形式的输出都可以用类似方法。但是请避免echo aaa > ttyUSB0这样的操作,虽然确实可以向usb口成功发出信息,但会对usb口属性信息造成破坏。其实它根本就不是文件来着。笔者初学时被坑过。
git <选项>
git指令用于版本管理。笔者会在其他文章中介绍其用法。
ssh <选项>
ssh指令用于和远程主机建立ssh连接。笔者会在其他文章中介绍其用法。
ssh-keygen <选项>
生成用于ssh连接的rsa密钥。笔者会在其他文章中简述其用法。
uname -a
获取当前架构名称、系统名称等。
which <指令名>
查询指令名对应的文件位置,如果是内置指令的话不会输出任何东西。
dirname <路径>
这个指令会把每个参数当成路径,然后分别输出最后一个斜杠之前的内容。表面上是输出父目录,但是对于.和…两个特殊目录都输出.。对…/…的输出也不是其父目录。
true
总返回真(0)。
false
总返回假(1)。这里和C++的逻辑正相反。
grep <正则表达式>
用于以正则表达式从文件中选取指定内容。常与管道共同使用。
xargs
可以用管道将另一个文件的输出分解成供其他指令使用的token。
find <查找的根目录> <指定特性和值>
#下面是一个例子
find /usr -name src -type d
这个指令用于查找文件系统中的项目。例子中,-name指定项目名称src,-type指定项目类型为目录(另一个常用的是f,表示普通文件),它会输出找到的项目(但也可以不输出)。
expr <表达式>
输出数学表达式的值。写脚本很有用。需要注意的是,表达式中token之间需要空格。
mount <设备文件> <挂载点>
挂载点必须是已经存在、已经挂载的文件夹。设备文件通常是/dev目录下一个块设备。该指令可以将尚未挂载的磁盘挂载到指定挂载点,挂载后就可以通过挂载点来访问。
umount <设备文件>
卸载指定磁盘。
$0
这个参数的内容是脚本被调用时输入的指令首个token。
$?
这个参数返回上条指令返回值。
$#
这个参数返回脚本参数token数。不含$0本身。
$<数字>
返回指定位置上的token。
../test/cmdname arg1 "arg 2"
它的$0是…/test/cmdname(不会跟据工作目录自行形成绝对路径,而是完全保留文本),$1是arg1,$2是arg 2(保留空格,不含双引号。其他影响tokenization的语法类同),$#是2。
> echo a #b
a
> echo a#b
a#b
> echo #b