set
命令
显示、设置或取消设置shell属性和位置参数的值。
显示shell变量的名称和值:
set
标记为导出而修改或创建的变量:
set -a
立即通知工作终止:
set -b
设置各种选项,如启用“vi”样式行编辑:
set -o vi
iptables
允许配置由Linux内核防火墙提供的表、链和规则的程序。
查看所有表的链、规则和包/字节计数器:
sudo iptables -vnL
设置链策略规则:
sudo iptables -P chain rule
为IP的链策略添加规则:
sudo iptables -A chain -s ip -j rule
在考虑协议和端口的IP链策略中附加规则:
sudo iptables -A chain -s ip -p protocol --dport port -j rule
删除链式法则:
sudo iptables -D chain rule_line_number
将给定表的iptables配置保存到文件中:
sudo iptables-save -t tablename > path/to/iptables_file
从文件中恢复iptables配置:
sudo iptables-restore < path/to/iptables_file
sysctl
访问内核状态信息.
显示所有可用的变量及其值:
sysctl -a
显示Apple模型标识符:
sysctl -n hw.model
显示CPU模型;
sysctl -n machdep.cpu.brand_string
显示可用的CPU特性(MMX、SSE、SSE2、SSE3、AES等):
sysctl -n machdep.cpu.feature
设置一个可变的内核状态变量:
sysctl -w section.tunable=value
swapoff
禁用设备或文件的交换.
禁用给定的交换分区:
swapoff /dev/sdb7
禁用给定的交换文件:
swapoff path/to/file
禁用所有交换区域:
swapoff -a
通过设备或文件的标签禁用交换:
swapoff -L swap1
unset
删除shell变量或函数
-删除变量foo和bar:
unset foo bar
删除函数my_func:
unset -f my_func
where
类似命令 which whereis whatis
报告一个命令的所有已知实例。
它可以是PATH环境变量中的可执行文件、别名或shell内建文件。
- 查找命令的所有实例:
where command
nvm
node . js版本管理。
在NodeJS版本之间切换:系统,节点,0.10,0.12,4.2等等.
安装指定版本的NodeJS:
nvm install node_version
在当前shell中使用指定版本的NodeJS:
nvm use node_version
设置默认的NodeJS版本:
nvm alias default node_version
列出所有可用的NodeJS版本并打印默认版本:
nvm list
运行特定版本的NodeJS REPL:
nvm run node_version --version
在特定版本的NodeJS中运行app:
nvm exec node_version node app.js
nrm
NPM注册中心管理。
有助于在不同的npm注册中心之间轻松切换。
- 列出所有注册:
nrm ls
npm -------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
cnpm ------- http://r.cnpmjs.org/
* taobao ----- https://registry.npm.taobao.org/ (*号表示当前npm使用的地址)
nj --------- https://registry.nodejitsu.com/
npmMirror -- https://skimdb.npmjs.com/registry/
edunpm ----- http://registry.enpmjs.org/
更改为特定的注册表:
nrm use registry
nrm use taobao 和 nrm use npm 来互相切换
显示所有注册表的响应时间:
nrm test
添加自定义注册中心:
nrm add registry url
删除一个注册表:
nrm del registry
webpack
将web项目的js文件和其他资产打包到一个输出文件中。
从入口点文件创建单个输出文件:
webpack app.js bundle.js
从js文件中加载css文件(这将css加载器用于.css文件):
webpack app.js bundle.js --module-bind 'css=css'
传递一个配置文件。输入脚本和输出文件名),显示编译进度:
webpack --config webpack.config.js --progress
对项目文件的更改自动重新编译:
webpack --watch app.js bundle.js
http
HTTP客户端,一个用户友好的cUrll替代品。
将URL下载到文件:
http -d example.org
发送表单编码的数据:
http -f example.org name='bob' profile_picture@'bob.png'
发送JSON对象:
http example.org name='bob'
指定HTTP方法:
http HEAD example.org包含额外的标题:
http example.org X-MyHeader:123
为服务器身份验证传递用户名和密码:
http -a username:password example.org
通过stdin指定原始请求体:
cat data.txt | http PUT example.org
curl
从服务器或向服务器传输数据。
支持大多数协议,包括HTTP、FTP和POP3.
将URL的内容下载到文件中:
curl http://example.com -o filename
下载一个文件,将输出保存在URL指示的文件名下:
curl -O http://example.com/filename
下载一个文件,遵循定位重定向,并自动继续(恢复)以前的文件传输:
curl -O -L -C - http://example.com/filename
发送表单编码的数据(类型为“application/x-www-form-urlencoded”的POST请求):
curl -d 'name=bob' http://example.com/form
使用自定义HTTP方法发送带有额外标头的请求:
curl -H 'X-My-Header: 123' -X PUT http://example.com
以JSON格式发送数据,指定适当的内容类型头:
curl -d '{"name":"bob"}' -H 'Content-Type: application/json' http://example.com/users/1234
为服务器身份验证传递用户名和密码:
curl -u myusername:mypassword http://example.com
通过客户端证书和资源密钥,跳过证书验证:
curl --cert client.pem --key key.pem --insecure https://example.com
wget
从网上下载文件。
支持HTTP、HTTPS和FTP.
将URL的内容下载到一个文件中(在本例中名为“foo”):
wget https://example.com/foo
将URL的内容下载到文件中(在本例中名为“bar”):
wget -O bar https://example.com/foo
下载单个web页面及其所有资源(脚本、样式表、图像等):
wget --page-requisites --convert-links https://example.com/somepage.html
下载一个完整的网站,每个请求之间间隔3秒:
wget --mirror --page-requisites --convert-links --wait=3 https://example.com
下载目录及其子目录中列出的所有文件(不下载嵌入的页面元素):
wget --mirror --no-parent https://example.com/somepath/
通过认证的FTP下载URL的内容:
wget --ftp-user=username --ftp-password=password ftp://example.com
继续未完成的下载:
wget -c https://example.com
启用静音模式来抑制输出:
wget -q https://example.com
babel
npm 全局安装 babel-cli
一个将代码从JavaScript ES6/ES7语法转换为ES5语法的编译器
将指定的输入文件和输出转换为标准输出:
babel path/to/file
将指定的输入文件和输出转换为特定的文件:
babel path/to/input_file --out-file path/to/output_file
每次更改输入文件时,都要转换它:
babel path/to/input_file --watch
转换整个文件目录:
babel path/to/input_directory
忽略目录中指定的逗号分隔的文件:
babel path/to/input_directory --ignore ignored_files
转换和输出为缩小的
JavaScript
:
babel path/to/input_file --minified
为输出格式选择一组预置:
babel path/to/input_file --presets presets
输出所有可用选项:
babel --help
diff
命令
比较文件和目录.
比较文件:
diff file1 file2
比较文件,忽略空白:
diff -w file1 file2
比较文件,并排显示差异:
diff -y file1 file2
比较文件,以统一格式显示差异(如“git diff”所使用的格式):
diff -u file1 file2
递归地比较目录:
diff -r directory1 directory2
比较目录,只显示不同文件的名称:
diff -rq directory1 directory2
patch
命令
用差异文件修补一个或多个文件。
注意,diff文件包含目标文件名和更改列表。
应用一个补丁:
patch < patch_file.diff
对当前目录应用补丁:
patch -p1 < patch_file.diff
应用补丁的反面:
patch -R < patch_file.diff
对指定文件应用补丁:
patch -p1 file patch_file.diff
fdupes
在给定的目录集中查找重复的文件。
搜索单个目录:
fdupes directory
搜索多个目录:
fdupes directory1 directory2
递归搜索所有目录:
fdupes -r directory
搜索多个目录,递归地搜索一个:
fdupes directory1 -R directory2
xargs
命令
使用来自另一个命令、文件等的管道参数执行命令。
输入被视为一个单独的文本块,并被分割成空格、制表符、换行符和文件结束符上的单独参数。
主要使用模式:
arguments_source | xargs command
Delete all files with a
.backup
extension.-print0
on find uses a null character to split the files, and-0
changes the delimiter to the null character (useful if there's whitespace in filenames):
find . -name '*.backup' -print0 | xargs -0 rm -v
对每个输入行执行一次命令,用输入行替换任何占位符(这里标记为“_”):
arguments_source | xargs -I _ command _ optional_extra_arguments
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
cat url-list.txt | xargs wget -c
NPM注册管理人
有助于在不同的npm注册中心之间轻松切换。
列出所有注册:
nrm ls
更改为特定的注册表:
nrm use registry
显示所有注册表的响应时间:
nrm test
添加自定义注册中心:
nrm add registry url
删除注册表:
nrm del registry
npx
npx使用介绍
从“npm”包执行二进制文件。
从给定的npm模块执行二进制代码:
npx module_name
如果一个包有多个二进制文件,请指定包名和二进制文件:
npx -p package_name module_name
查看帮助内容:
npx --help
locate
命令
快速找到文件名。
在数据库中查找模式。注:数据库定期重新计算(通常每周或每天):
locate pattern
根据文件名查找文件(不包含通配符的模式被解释为“pattern”):
locate */filename
再计算数据库。如果你想找到最近添加的文件,你需要这样做:
sudo /usr/libexec/locate.updatedb
ripgrep
使用命令rg
一个快速的命令行搜索工具.
递归地在当前目录中搜索regex模式:
rg pattern
搜索包括所有。gitignored和隐藏文件的模式:
rg -uu pattern
仅在特定文件类型(如html、css等)中搜索模式:
rg -t filetype pattern
仅在目录的子集中搜索模式:
rg pattern set_of_subdirs
在匹配glob的文件中搜索模式(例如,' README.* '):
rg pattern -g glob
只列出匹配的文件——当管道连接到其他命令时非常有用:
rg --files-with-matches pattern
fd
比find
命令更快
一个简单,快速和用户友好的选择找到。
查找当前目录下与模式匹配的文件:
fd pattern
查找以foo开头的文件:
fd '^foo'
查找具有特定扩展名的文件:
fd --extension .ext pattern
查找特定目录下的文件:
fd pattern path/to/dir
包括忽略和隐藏的文件在搜索:
fd --hidden --no-ignore pattern
paste
命令
合并文件行.
将所有的行连接成一行,使用TAB作为分隔符:
paste -s file
使用指定的分隔符将所有行连接成一行:
paste -s -d delimiter file
并排合并两个文件,每个文件在其列中,使用TAB作为分隔符:
paste file1 file2
使用指定的分隔符并排合并列中的两个文件:
paste -d delimiter file1 file2
合并两个文件,交替添加行:
paste -d '\n' file1 file2
tee
从标准输入读取,然后写入标准输出和文件(或命令)。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
将标准输入复制到每个文件,也复制到标准输出:
echo "example" | tee FILE
附加到给定的文件,不要覆盖:
echo "example" | tee -a FILE
将标准输入打印到终端,并将其输入到另一个程序中进行进一步处理:
echo "example" | tee /dev/tty | xargs printf "[%s]"
创建一个名为“example”的文件夹,计算“example”中的字符数,并将“example”写入终端:
echo "example" | tee >(xargs mkdir) >(wc -c)
tree
命令
以树的形式显示当前目录的内容。
显示文件和目录到深度的“num”级别(其中1表示当前目录):
tree -L num
只显示目录:
tree -d
也显示隐藏文件:
tree -a
打印没有缩进的树,显示完整的路径(使用' -N '来避免转义空格和特殊字符):
tree -i -f
以人类可读的格式打印它旁边每个节点的大小,并在文件夹中显示它们的累积大小(如' du '命令所示):
tree -s -h --du
使用通配符(glob)模式在树层次结构中查找文件,并删除不包含匹配文件的目录:
tree -P '*.txt' --prune
在树层次结构中查找目录,删除非所需目录的祖先目录:
tree -P directory_name --matchdirs --prune
ss
命令
用于研究套接字的实用程序。
显示所有TCP/UDP/RAW/UNIX套接字:
ss -a -t|-u|-w|-x
过滤TCP套接字的状态,只/排除:
ss state/exclude bucket/big/connected/synchronized/...
显示所有连接到本地HTTPS端口的TCP套接字(443):
ss -t src :443
显示所有TCP套接字以及连接到远程ssh端口的进程:
ss -pt dst :ssh
显示所有UDP套接字连接在特定的源和目标端口:
ss -u 'sport == :source_port and dport == :destination_port'
显示在子网192.168.0.0/16上本地连接的所有TCP IPv4套接字:
ss -4t src 192.168/16
swapon
启用设备或文件交换.
获得交换信息:
swapon -s
启用给定的交换分区:
swapon /dev/sdb7
启用给定的交换文件:
swapon path/to/file
启用所有交换区域:
swapon -a
通过设备或文件的标签启用交换:
swapon -L swap1
mkswap
命令 用于在一个文件或者设备上建立交换分区。在建立完之后要使用sawpon命令开始使用这个交换区。最后一个选择性参数指定了交换区的大小,但是这个参数是为了向后兼容设置的,没有使用的必要,一般都将整个文件或者设备作为交换区。
在设备或文件中设置Linux交换区域.
将给定的分区设置为交换区:
sudo mkswap /dev/sdb7
使用给定的文件作为交换区域:
sudo mkswap path/to/file
在创建交换区域之前,检查分区是否有坏的块:
sudo mkswap -c /dev/sdb7
为文件指定一个标签(允许swapon使用标签):
`sudo mkswap -L swap1 path/to/file
dd
命令
if=文件名:输入文件名
of=文件名:输出文件名
bs=字节大小
count=个数
转换和复制文件.
从一个isohybrid文件(比如archlinux-xxx.iso)中创建一个可引导的usb驱动器,并显示进程:
dd if=file.iso of=/dev/usb_drive status=progress
克隆一个驱动器到另一个驱动器与4MB块,忽略错误,并显示进展:
dd if=/dev/source_drive of=/dev/dest_drive bs=4M conv=noerror status=progress
使用内核随机驱动程序生成一个100个随机字节的文件:
dd if=/dev/urandom of=random_file bs=100 count=1
测试磁盘的写性能::
dd if=/dev/zero of=/swapfile bs=1M count=1024
检查正在进行的dd操作的进度(从另一个shell运行此命令):
kill -USR1 $(pgrep ^dd)
groupdel
从系统中删除现有的用户组.
- 删除现有组:
groupdel group_name
userdel
删除一个用户。
- 删除用户及其主目录:
userdel -r name
lsmod
显示linux内核模块的状态。
请参见modprobe,它加载内核模块。
- 列出所有当前加载的内核模块:
lsmod
seq
命令
输出一串数字到标准输出。
从1到10的序列:
seq 10
每3个数字从5到20:
seq 5 3 20
用空格而不是换行分隔输出:
seq -s " " 5 3 20
file
命令
确定文件类型.
***如果是纯字符文本则是 ASCII Text 含有中文的话则就是 unicode Text
描述指定文件的类型。适用于没有文件扩展名的文件:
file filename
查看压缩文件的内部,并确定其中的文件类型:
file -z foo.zip
-允许文件处理特殊文件或设备文件:
file -s filename
不要在第一个文件类型匹配时停止;一直读到文件末尾:
file -k filename
确定文件的mime编码类型:
file -I filename
whereis
命令
- 定位命令的二进制、源代码和手动页文件。
whatis
命令
显示手册页中的一行描述。.
显示来自手册页的描述:
whatis command
不要在一行的末尾删去描述:
whatis --long command
显示与一个glob匹配的所有命令的描述:
whatis --wildcard net*
使用正则表达式搜索手册页描述:
whatis --regex 'wish[0-9]\.[0-9]'
查看文件的权限
方式1: stat file
方式2:la -alh
(a
显示隐藏文件 l每行列出一个文件 h使用人类可读单元(KB、MB、GB)显示大小的长格式列表)
显示内容
drwx------ 2 root root 4.0K 4月 8 13:28 .ssh
r [r]ead
读 w ([w]rite)
写权限 x (e[x]ecute)
可执行权限
用户管理
使用who命令,可以查看目前已登陆的用户。要查看系统上的用户,以 root 执行 passwd -Sa 输出的数据格式可以参考 passwd(1)。
使用useradd命令添加用户:
useradd -m -g "初始组" -G "附加组" -s "登陆shell" "用户"
-
-m
:创建用户主目录/home/[用户名]
;在自己的主目录内,即使不是root用户也可以读写文件、安装程序等等。(当登录 当前的用户的时候。目录名就是用户名 只有在自己的主目录才有操作权限) -
-g
:设置用户初始组的名称或数字ID;该组必须是存在的;如果没有设置该选项,useradd
会根据/etc/login.defs
文件中的USERGROUPS_ENAB环境变量进行设置。默认(USERGROUPS_ENAB yes
) 会用和用户名相同的名字创建群组,GID
等于UID
. -
-G
:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。 -
-s
:用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定;请确保使用的shell已经安装,默认是 Bash。
**警告: **为了登录,登录 shell 必须位于
/etc/shells
中, 否则 PAM 的pam_shell
模块会阻止登录请求。不要使用/usr/bin/bash
替代/bin/bash
, 除非这个路径已经在/etc/shells
中正确配置.
- 有时候需要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将shell设置成
/usr/bin/nologin
就可以禁止用户登录。(nologin(8)
).
用户信息存储
本地用户信息储存在`/etc/passwd`文件中。要查看系统上所有用户账户:
cat /etc/passwd
一行代表一个用户,格式如下,每行分七个部分,用英文冒号“:”分开:
account:password:UID:GID:GECOS:directory(用户主目录 保存在环境变量$HOME):shell(环境变量$SHELL中)
此处:
* `account`:用户名,不能为空,而且要符合标准的*NIX命名规则。
* `password`:加密的密码,可以使用一个小写的"x"(不带括号)表示密码保存在`/etc/shadow`文件里。
* `UID``GID`:每个用户和组有一个对应的UID和GID(用户ID和组ID)。Arch里面,第一个非root用户的默认UID是1000,后续创建的用户UID也应大于1000,特定用户的GID应该属于指定的首要组,组的ID数值列在`/etc/group`文件里。
* `GECOS`:可选的注释字段,通常记录用户全名
* `directory`:用于登录命令设置`$HOME`环境变量。某些服务的用户主目录设置为"/"是安全的,但不建议普通用户设置为此目录。
* `shell`:是用户默认登录的shell,通常是[Bash](https://wiki.archlinux.org/index.php/Bash_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) "Bash (简体中文)"),还可选择其他的命令解释器,默认是"/bin/bash"(不带括号),如果你用的是别的shell,在这里设置其路径,此部分是可选的,可留空。
示例:
jack:x:1001:100:Jack Smith,some comment here,,:/home/jack:/bin/bash
示例分解说明:用户登录名为jack,密码保存在`/etc/shadow`,UID为1001,首要组的ID是100 (users组),全名Jack Smith并加了一些注释,主目录是`/home/jack`,使用Bash作为默认shell。
ssh-keygen
生成ssh密钥用户以进行身份验证、无密码登录和其他操作.
Generate a key interactively:
ssh-keygen
Specify file in which to save the key:
ssh-keygen -f ~/.ssh/filename
生成一个ed25519密钥,包含100个密钥派生函数轮:
ssh-keygen -t ed25519 -a 100
生成一个RSA 4096位密钥,并将您的电子邮件作为注释:
ssh-keygen -t rsa -b 4096 -C "email"
从主机检索密钥指纹(用于在首次通过SSH连接到主机时确认主机的真实性):
ssh-keygen -l -F remote_host
检索MD5十六进制密钥的指纹:
ssh-keygen -l -E md5 -f ~/.ssh/filename
更改密钥的密码:
ssh-keygen -p -f ~/.ssh/filename
service
通过运行init脚本管理服务。
应该省略完整的脚本路径(/etc/init.d 假设)。
启动/停止/重启/重新加载服务(启动/停止应该总是可用的):
service init_script start|stop|restart|reload
完全重新启动(使用start和stop运行脚本两次):
service init_script --full-restart
显示服务的当前状态:
service init_script status
列出所有服务的状态:
service --status-all
useradd
创建一个新用户.
创建新用户:
useradd name
创建具有默认主目录的新用户:
useradd --create-home name
使用指定的shell创建新用户:
useradd --shell /path/to/shell name
创建属于其他组的新用户(注意没有空格):
useradd --groups group1,group2 name
创建没有主目录的新系统用户:
useradd --no-create-home --system name
groupmod
修改系统中现有的用户组.
- 更改组名称:
groupmod -n new_group_name old_group_name
-更改组id:
groupmod -g new_group_id old_group_name
gpasswd
管理“/etc/group”和“/etc/gshadow”。
定义组管理员:
sudo gpasswd -A user1,user2 group
设置组成员列表:
sudo gpasswd -M user1,user2 group
为指定的组创建密码:
gpasswd group
将用户添加到指定的组:
gpasswd -a user group
从已命名组中删除用户:
gpasswd -d user group
groupadd
向系统添加用户组.
创建一个新的Linux组:
groupadd group_name
使用特定的groupid创建新组:
groupadd group_name -g group_id
id
显示当前用户和组标识.
显示当前用户id (UID)、组id (GID)和它们所属的组:
id
将当前用户标识显示为数字:
id -u
将当前组标识显示为数字:
id -g
显示任意用户的id (UID)、组id (GID)和它们所属的组:
id username
usermod
user model
修改用户帐户。
更改用户名:
usermod -l newname oldname
将用户加入 群组,用逗号分隔:
usermod -a -G group1,group2 user
为用户创建一个新的主目录并将其文件移动到其中,更改用户主目录:
查看 当前用户主目录 在环境变量 $HOME 中
usermod -m -d /path/to/home(新的目录) user
通过find命令查找属于某个用户或某个组的文件
find / -group "用户组"
find / -user "用户"
who
显示登录的用户和相关数据(进程、启动时间).
简洁的方式显示登录用户
whoami
显示当前登录的所有会话的用户名、行和时间:
who
仅显示当前终端会话的信息:
who am i
显示所有可用信息:
who -a
使用表头显示所有可用信息:
who -a -H
stat
显示文件和文件系统信息.
显示文件属性,如大小、权限、创建和访问日期等:
stat file
和上面一样,但是更简洁:
stat -t file
显示文件信息:
stat -f file
只显示八进制文件权限:
stat -c "%a %n" file
显示文件的所有者和组:
stat -c "%U %G" file
以字节为单位显示文件的大小:
stat -c "%s %n" file
link
创建到现有文件的硬链接。 (-s 是软链接)
有关更多选项,请参见ln
命令.
- 创建从新文件到现有文件的硬链接:
link path/to/existing_file path/to/new_file
unlink
从文件系统中删除到文件的链接。
如果链接是文件的最后一个链接,则文件内容将丢失
- 如果指定的文件是最后一个链接,则删除它:
unlink path/to/file
netstat
显示与网络相关的信息,如打开的连接、打开的套接字端口等。
输出跟nginx相关的端口信息
netstat -tnlup | grep nginx
列出所有端口:
netstat -a
列出所有监听端口:
netstat -l
列出监听TCP端口:
netstat -t
显示特定端口的PID和程序名:
netstat -p {PROTOCOL}
持续输出:
netstat -c
打印路由表:
netstat -nr
reboot
重启系统.
立即重新启动:
reboot
立即重启,而不是优雅地关闭:
reboot -f
chsh
更改用户的登录shell。
- 获取当前使用的shell
echo $SEHLL
orexport | grep SHELL
- 改变shell:
chsh -s 新的shell的路径 username
例如zsh 需要 which zsh/bin/zsh
cut
从STDIN或文件中删除字段.
剪掉每一行的前16个字符:
cut -c 1-16
删除给定文件每行的前16个字符:
cut -c 1-16 file
把从第三个字符到每行末尾的所有内容都剪掉:
cut -c 3-
使用冒号作为字段分隔符(默认分隔符是tab),删除每行中的第5个字段:
cut -d':' -f5
使用分号作为分隔符,删除每一行的第2和第10个字段:
cut -d';' -f2,10
使用空格作为分隔符,将字段3切到每一行的末尾:
cut -d' ' -f3-
sort
对文本文件行进行排序。
按升序排列文件:
sort filename
按降序排列文件:
sort -r filename
以不区分大小写的方式对文件排序:
sort --ignore-case filename
使用数字而不是字母顺序对文件排序:
sort -n filename
按第三个字段对passwd文件进行数字排序:
sort -t: -k 3n /etc/passwd
对只保留唯一行的文件进行排序: (有重复的行只保留一个)
sort -u filename
对人类可读的数字排序(在本例中是“ls -lh”的第5个字段):
(使用标准输出取代文件 管道符连接)
ls -lh | sort -h -k 5
uniq
从给定的输入或文件中输出唯一的行。
因为它不会检测重复的行,除非它们是相邻的,所以我们需要首先对它们进行排序。
每一行显示一次:
sort file | uniq
只显示唯一的行:
sort file | uniq -u
只显示重复的行:
sort file | uniq -d
显示每一行的出现次数:
sort file | uniq -c
显示每行出现的次数,按最频繁的次数排序:
sort file | uniq -c | sort -nr
w
命令
显示谁已登录以及他们正在做什么。
打印用户登录、TTY、远程主机、登录时间、空闲时间、当前进程。
显示已登录的用户信息:
w
显示登录的用户信息,没有标题:
w -h
显示登录用户的信息,按空闲时间排序:
w -i
watch
命令
定期执行程序,显示全屏输出。.
反复运行命令并显示结果:
watch command
每60秒重新运行一个命令:
watch -n 60 command
监视目录的内容,在它们出现时突出显示差异:
watch -d ls -l
make
命令
用于Makefile中描述的目标的任务运行器。
主要用于控制从源代码编译可执行文件。
调用Makefile中指定的第一个目标(通常名为“all”):
make
调用特定目标:
make target
调用一个特定的目标,同时执行4个作业:
make -j4 target
使用特定的Makefile:
make --file file
从另一个目录执行make:
make --directory directory
强制生成目标,即使源文件没有更改:
make --always-make target
ifconfig
命令
网络接口配置器.
查看以太网适配器的网络设置:
ifconfig eth0
显示所有接口的详细信息,包括禁用的接口:
ifconfig -a
禁用eth0接口:
ifconfig eth0 down
使eth0接口:
ifconfig eth0 up
将IP地址分配给eth0接口:
ifconfig eth0 ip_address
chkconfig命令
管理CentOS 6上的服务运行级别。
列出带有运行级别的服务:
chkconfig --list
显示服务的运行级别:
chkconfig --list ntpd
启动时启用服务:
chkconfig sshd on
在启动时为运行级别2、3、4和5启用服务:
chkconfig --level 2345 sshd on
在启动时禁用服务:
chkconfig ntpd off
在启动时禁用运行级别3的服务:
chkconfig --level 3 ntpd off
systemctl
命令
Linux systemctl
是一个系统管理守护进程、工具和库的集合,用于取代System V
、service
和chkconfig
命令)
注意,一般先杀死nginx进程再去开启 systemctl 管理 nginx
控制系统和服务管理。
列出失败的服务:
systemctl --failed
启动/停止/启动/重新加载一个服务: (这里是立刻启动服务)
systemctl start/stop/restart/reload unit
显示一个单元的状态:
systemctl status unit
egsystemctl status nginx|mysqld
开机启动时(启用)和(禁用)要启动的模块:
systemctl enable/disable unit
屏蔽/解压一个单元,防止它在启动时启动:
systemctl mask/unmask unit
重新加载systemd,扫描新的或更改的模块:
systemctl daemon-reload
adduser
命令
添加用户命令.
创建一个具有默认主目录的新用户,并提示用户设置密码: (会创建一个主目录)
adduser username
创建没有主目录的新用户:
adduser --no-create-home username
使用指定路径上的主目录创建一个新用户:
adduser --home path/to/home username
创建一个新用户,并将指定的shell设置为登录shell:
adduser --shell path/to/shell username
创建属于指定组的新用户:
adduser --ingroup group username
users
命令
显示已登录用户的列表.
显示已登录用户的列表:
users
显示根据特定文件登录的用户列表:
users /var/log/wmtp
chown
命令
更改文件和文件夹的用户和组所有权.
更改文件/文件夹的所有者用户:
chown user path/to/file
更改文件/文件夹的所有者、用户和组:
chown user:group path/to/file
递归地更改文件夹的所有者及其内容:
chown -R user path/to/folder
更改符号链接的所有者:
chown -h user path/to/symlink
更改文件/文件夹的所有者以匹配引用文件:
chown --reference=path/to/reference_file path/to/file
rename
命令
重命名多个文件.
直接重新命名
rename originName newName originName
使用Perl公共正则表达式重命名文件(在找到的地方用bar替换foo):
rename 's/foo/bar/' \*
显示哪些重命名将在不执行它们的情况下发生:
rename -n 's/foo/bar/' \*
强制重命名,即使该操作将覆盖现有文件:
rename -f 's/foo/bar/' \*
将文件名转换为小写(在不区分大小写的文件系统中使用' -f ',以防止"already exists"错误):
rename 'y/A-Z/a-z/' \*
用下划线替换空格:
rename 's/\s+/_/g' \*
main
命令
格式化和显示手册页。
显示命令的手册页:
man command
显示来自第7节的命令的手册页:
man command.7
搜索手册页的显示路径:
man --path
显示手册页的位置,而不是手册页本身:
man -w command
对包含搜索字符串的手册页进行关键字搜索:
man -k keyword
dirname
命令
计算给定文件或目录路径的父目录.
计算给定路径的父目录:
dirname path/to/file_or_directory
计算多个路径的父目录:
dirname path/to/file_a path/to/directory_b
用NUL字符而不是换行符分隔输出(在与' xargs '结合时非常有用):
dirname --zero path/to/directory_a path/to/file_b
basename
返回路径名的非目录部分.
只显示路径中的文件名:
basename path/to/file
只显示路径中的文件名,并删除后缀:
basename path/to/file suffix
test
命令
评估条件。
如果为真,返回0退出状态,否则返回1。
测试给定的变量是否等于给定的字符串:
test $MY_VAR == '/bin/zsh'
测试给定变量是否为空:
test -z $GIT_BRANCH
测试文件是否存在:
test -e filename
测试目录是否不存在:
test ! -d path/to/directory
if - else语句:
test condition && echo "true" || echo "false"
nginx
命令
Nginx web服务器.
使用默认配置文件启动服务器:
nginx
path:/etc/nginx/nginx.conf
使用自定义配置文件启动服务器:
nginx -c config_file
显示版本并配置选项,然后退出:
nginx -V
使用配置文件中所有相对路径的前缀启动服务器:
nginx -c config_file -p prefix/for/relative/paths
在不影响正在运行的服务器的情况下测试配置:
nginx -t
通过发送一个没有停机的信号来重新加载配置:
nginx -s reload
通过发送一个没有停机的信号来重新打开配置:
nginx -s reopen
停止nginx:
nginx -s stop
退出nginx:
nginx -s quit
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/share/nginx/)
-c filename : set configuration file (default: /etc/nginx/nginx.conf)
-g directives : 从配置文件中设置全局指令
supervisorctl
Supervisor是一个客户机/服务器系统,它允许用户在类unix操作系统上控制多个进程。
监督者ctl是监督者的命令行客户端,它提供了一个类似shell的接口.
启动/停止/启动一个过程:
supervisorctl start|stop|restart process_name
启动/停止/重启组中的所有进程:
supervisorctl start|stop|restart group_name:*
显示最后100字节的流程stderr:
supervisorctl tail -100 process_name stderr
保持在进程外显示stdout:
supervisorctl tail -f process_name stdout
重新加载进程配置文件,根据需要添加/删除进程:
supervisorctl update
查看进程状态
supervisorctl status
supervisord
Supervisor是一个客户机/服务器系统,用于控制类unix操作系统上的一些进程。
监控器是监控器的服务器部分;它主要通过配置文件进行管理。
用指定的配置文件启动督导员: 默认在
/etc/supervisord.conf
下面
supervisord -c path/to/file
在前台运行督导员:
supervisord -n
使用默认的配置文件 /etc/supervisord.conf
supervisord
明确指定配置文件
supervisord -c /etc/supervisord.conf
使用 user 用户启动 supervisord
supervisord -u user