下面是一个github开源项目,Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。
里面gh-pages分支是可以下载后直接双击打开可以使用的页面项目。
项目地址:https://github.com/jaywcjlove/linux-command
作者开放的浏览页面地址:https://wangchujiang.com/linux-command/
which:从环境变量 PATH 中查找某个命令,并显示位置
type:用来显示指定命令的类型
不同指令类型的意义:
举例
# 查看 node
which -a node
# 输出
/root/.nvm/versions/node/v14.4.0/bin/node
# 查看一个指令的类型
type -t node
# 输出
file
# 查看一个指令全部路径
type -a node
# 输出
node is /root/.nvm/versions/node/v14.4.0/bin/node
node is /usr/bin/node
常用指令组合
# 展示进程中的nginx相关进程
ps -ef | grep nginx
# 输出
# UID PID PPID C STIME TTY TIME CMD
501 2974 1 0 6:05下午 ?? 0:00.00 nginx: master process nginx
501 2975 2974 0 6:05下午 ?? 0:00.00 nginx: worker process
501 32619 796 0 10:48上午 ttys000 0:00.00 grep nginx
输入指令说明
输出说明
# 查看8080端口占用情况
lsof -i :8080
# 输出
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 53177 majun 23u IPv6 0x6e8e87fcf2e474b9 0t0 TCP *:samsung-unidex (LISTEN)
需要提供要杀死进程的pid
# 杀死pid为1857的node服务
kill 1857
切换完成后,需要退出当前 shell 再重新打开,即可使用刚刚切换的 shell
# 查看当前所有支持的 shell
more /etc/shells
# 输出以下
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
# 查看当前使用的 shell
echo $SHELL
# 如果使用的是 zsh,则输出以下
/bin/zsh
# 切换shell,比如切换为 bash
chsh -s /bin/bash
# 之后重启终端,会发现使用的 shell 变成了 bash
以下针对的都是 bash 这个 shell,但很多人平时使用的可能不是它,而是 zsh 或其他的 shell。
所以把下面文件的文件名中的 bash 换成对应的 shell 就行,比如 /etc/bashrc 对应 /etc/zshrc。
下面最常用的是 ~/.bash_profile 和 ~/.bashrc 两个文件,其他文件可能不同的 shell 会有不同。
/etc/profile:系统级,每个用户登录时都会读取。
/etc/bashrc:系统级,每个用户打开 bash shell 时,该文件都会被读取。
/etc/bash.bash_logout:系统级,每个用户退出登录是读取一次。
~/.bash_profile:用户级,此用户登录系统时,读取一次(常用)。
~/.bashrc:用户级,此用户打开 bash shell 时,该文件都会被读取。
~/.bash_logout:用户级,此用户每次关闭 bash shell 或退出系统时,该文件读取一次。
注意,像系统级别的配置文件,和 ~/.bash_profile 这种只用户登录时才执行一次的配置文件,在用户使用过程中如果修改了这些文件,需要下次执行文件,文件的修改才会被应用。
如果像立即应用,需要在终端中使用 source 指令执行一下,比如修改 ~/.bash_profile 后,在终端执行:
source ~/.bash_profile
这样一来,就不需要用户重新登录,就能应用修改了。
此外,可以在其他 shell 的某一配置文件中,也可以添加这行代码,去引入其他 shell 的配置文件中的配置,比如:
# 在 ~/.bash_profile 中添加下面一行。
# 那么在每次执行 ~/.bash_profile 时,~/.zsh_profile 也会被执行。
source ~/.zsh_profile
安装的工具 git、node、brew等,我们可以打开终端直接使用,是因为系统设定了一些目录,这些目录下的脚本文件或软链接(快捷方式)都被自动添加到了全局,所以我们才可以在全局使用。
我们安装的那些工具,脚本文件或脚本文件的软链接(快捷方式),就放在系统的指定的那些目录下中的某一个。
这些目录就设置在 $PATH 这个全局变量中,可以在终端中打印这个变量,查看目录:
echo $PATH
# 输出
/Users/xiaoming/.avn/bin:/Users/xiaoming/.nvm/versions/node/v16.18.1/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/usr/local/go/bin
输出的字符串,使用 : 冒号分隔开,每一段就是一个文件夹,就是我们上面说的目录。
所以我们安装了新的工具,或者自己制作的脚本,想全局使用,有俩个办法。
方法一(推荐):把工具创建一个软链接,放在上面的目录中(一般新安装的工具,会自动添加)。
比如要把 /Users/xiaoming/myBin/set 的这个 set 指令做成全局的,要把他放到 /usr/local/bin 中:
ln -s /Users/xiaoming/myBin/set /usr/local/bin/set
设置完成后,就可以使用 set 这个全局指令了。
方法二:修改 $PATH 这个全局变量,把我们想添加的文件夹添加进去。
这样这个文件夹下的脚本,就变成全局可用的了。
比如我们存放脚本的文件夹是 /Users/xiaoming/myBin,具体操作就是在 shell 启动脚本中,比如 ~/.zshrc 中添加一下一行:
export PATH=$PATH:/usr/local/myBin
然后在输入以下并回车,让系统重新载入此文件,来使里面的修改生效:
source ~/.zshrc
格式:ln [参数][源文件或目录][即将要生成的链接]
链接分为软链接和硬链接,正常比较常用的是软链接,以下两个场景下很适合使用:
软链接:
硬链接:
参数 | 说明 | 例子:ln [参数] [源文件或目录] [即将要生成的链接] |
---|---|---|
无 | 创建硬链接 | ln ~/less /usr/local/bin/less |
-s | 软链接(符号链接) | ln -s ~/less /usr/local/bin/less |
-b | 删除,覆盖以前建立的链接 | |
-d | 允许超级用户制作目录的硬链接 | |
-f | 强制执行 | |
-i | 交互模式,文件存在则提示用户是否覆盖 | |
-n | 把符号链接视为一般目录 | |
-v | 显示详细的处理过程 |
**Mac系统中执行,需要把 -ntulp 换为 -nat **
# 查看所在端口的占用情况
netstat -ntulp
# 输出
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 478/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 606/sshd
# 以下省略
# 筛选出80端口的占用情况
netstat -ntulp | grep 80
# 输出
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 726/nginx: master p
tcp6 0 0 :::8080 :::* LISTEN 1054/java
使用一些封装过的SHELL的都知道,以列表的形式查看文件,指令为ll
。
但bash环境下使用ll
会报错,只能使用ls -l
ll
# 输出
bash: ll: command not found
这时就可以使用Linux的给指令设置别名的功能。
# 在普通bash环境下
# 设置别名
alias ll='ls -l'
# 执行
ll
# 后面就会执行 ls -l
不过这样设置的话,当退出shell再重新打开,上面设置的别名就没有了。
如果想永久生效,需要写入到文件~/.bash_profile
中,直接编辑此文件。
建议添加下面两个指令(如果他本来就有,可以修改他的)。
alias ll="ls -lhF"
alias la="ls -AlhF"
说明
- -l:列表的形式展示
- -h:列表中展示文件或文件夹所占空间的值,使用K/M/G的形式
- -F:如果是文件夹类型,则最后加一个斜杠用来表示
- -a:展示所有文件,主要包括隐藏文件
- -A:同-a,但不列出 "." (目前目录) 及 ".." (父目录)
直接使用终端的vim修改的话,可能会出现各种提示各种阻止,无法修改,我的做法是把文件复制到桌面,使用编辑器修改后,再替换回去。
其他一些想要简化的命令,也是这样操作。
参数
指令 | 说明 |
---|---|
-t sec | -t 后面加秒数,亦即『过几秒后关机』的意思 |
-k | 不要真的关机,只是发送警告信息出去! |
-r | 在将系统的服务停掉之后就重新启动(常用) |
-h | 将系统的服务停掉后,立即关机。 (常用) |
-n | 不经过 init 程序,直接以 shutdown 的功能来关机 |
-f | 关机并启动之后,强制略过 fsck 的磁盘检查 |
-F | 系统重新启动之后,强制进行 fsck 的磁盘检查 |
-c | 取消已经在进行的 shutdown 命令内容。 |
例子:
shutdown -h now
# 立刻关机
shutdown -h 20:25
# 系统在今天的 20:25 分会关机,若在21:25才下达此命令,则隔天才关机
shutdown -h +10
# 系统再过十分钟后自动关机
shutdown -r now
# 系统立刻重新启动
shutdown -r +30 'The system will reboot'
# 再过三十分钟系统会重新启动,并显示后面的信息给所有在在线的使用者
shutdown -k now 'This system will reboot'
# 仅发出警告信件的参数!系统并不会关机啦!吓唬人!
cat a.txt
# 输出
aaaaaaaa
# 直接执行下面这个,会清空a.txt的内容
> a.txt
# 再cat a.txt时,什么也不会打印,因为a.txt的内容是空的
cat a.txt
# 输出
aaaaaaa
cat b.txt
# 输出
bbbbbbb
# 把a.txt的内容,覆盖到b.txt中
cat a.txt > b.txt
# 查看b.txt的内容
cat b.txt
# 输出
aaaaaaa
cat a.txt
# 输出
aaaaaaa
cat b.txt
# 输出
bbbbbbb
# 把a.txt的内容,追加到b.txt中的最后面
cat a.txt >> b.txt
# 查看b.txt的内容
cat b.txt
# 输出
aaaaaaa
bbbbbbb
直接输入,回车。
如果没有设置过密码,会让设置密码,输入两次。
如果已经设置了密码,会让先输入旧密码,再输入两次新密码。
passwd
hostname
# 输出
localhost
cat /etc/issue
# 输出
Ubuntu 18.04 LTS \n \l
uname -a
# 输出
Linux localhost 4.19.81-perf-g453ac5d #1 SMP PREEMPT Tue May 19 03:00:27 CST 2020 aarch64 aarch64 aarch64 GNU/Linux
whoami
# 输出
root
结构:find <path> -name '<name>'
paht: 查找的路径,查找当前目录下就是
.
或者./
name: 要查找的文件的名称,支持正则表达式
# 查找当前目录下(包含子目录),所有以'.js'结尾的文件和文件夹
find ./ -name '*.js'
# 输出
./.os/OS.js/node_modules/yaml/scalar.js
./.os/OS.js/node_modules/yaml/util.js
./.os/OS.js/node_modules/yaml/types.js
./temp.js
参数指定层级 -maxdepth
# 查找当前目录下(不含子目录),所有以'.js'结尾的文件和文件夹
find ./ -maxdepth 1 -name '*.js'
# 输出
./temp.js
ifconfig
# 输出
Warning: cannot open /proc/net/dev (权限不够). Limited output.
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
rmnet_data1: flags=65<UP,RUNNING> mtu 1410
inet 10.98.126.154 netmask 255.255.255.252
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.8 netmask 255.255.255.0 broadcast 192.168.1.255
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 3000 (UNSPEC)
id
# 输出
uid=0(root) gid=0(root) 组=0(root),3002,3003,9997,20318,50318,99909997
使用 tree 指令,如果当前系统没有这个指令,可以使用系统软件安装工具来安装一下,比如 Mac 的 brew,Ubuntu 的 apt 等等。
或者,可以使用指令,直接打印,但这是使用系统自带命令组装出来的,可能不太美观。
find . -print | sed -e 's;[^/]*/;|__;g;s;__|; |;g'
free -h
# 打印如下,应该不用又多余的说明
total used free shared buff/cache available
Mem: 1.9G 570M 862M 2.8M 560M 1.2G
Swap: 0B 0B 0B
会全屏实时展示系统情况。
top 的具体参数意义参考:https://blog.csdn.net/qq_31666147/article/details/51557300
查看僵死程序,请阅读本文的 ps 的用法,有查找僵死程序和杀死的命令。
top
# 按 q 退出
# 全屏实时展示面板如下
top - 16:54:56 up 17 min, 1 user, load average: 0.02, 0.32, 0.37
Tasks: 81 total, 3 running, 50 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.7 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2040912 total, 878644 free, 587860 used, 574408 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1303124 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
750 root 10 -10 140508 12360 9360 S 0.7 0.6 0:06.59 AliYunDun
644 root 20 0 33204 3152 2520 S 0.3 0.2 0:00.53 AliYunDunUpdate
1054 root 20 0 2536000 251232 26940 S 0.3 12.3 1:43.32 java
1 root 20 0 77732 8760 6612 S 0.0 0.4 0:01.15 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:00.15 ksoftirqd/0
8 root 20 0 0 0 0 I 0.0 0.0 0:00.34 rcu_sched
df 和 du 相关命令:
# -h 选项为根据大小适当显示
df -h
Filesystem Size Used Avail Use% Mounted on
udev 975M 0 975M 0% /dev
tmpfs 200M 2.8M 197M 2% /run
/dev/vda1 40G 8.0G 30G 22% /
tmpfs 997M 0 997M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 997M 0 997M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/0
显示内容参数说明:
# 显示当前目录所占空间
du -sh
252M .
# eg: 进入dir文件夹
cd ./dir
ls
# 输出
Desktop test
# 过滤显示以.js结尾的文件和文件夹
ll *.js
参数 -l 和 -h: 以「列表」的形式列出「带K/M/G形式占用的空间大小」详细信息
ls -l
# 输出
总用量 63K
drwx------. 2 root root 3.5K 5月 30 04:00 Desktop
-rwx------. 1 root root 9.2K 4月 11 15:43 test
参数 -al: 以列表的形式,列出包括隐藏文件和文件夹的详细信息
ls -al
# 输出
总用量 63K
drwx------. 2 root root 3.5K 5月 30 04:00 Desktop
-rwx------. 1 root root 9.2K 4月 11 15:43 test
drwx------. 2 root root 3.5K 5月 29 16:57 .vim
pwd
# 输出
/root/Desktop
# eg: 创建名为dir的文件夹
mkdir ./dir
# eg: 把当前目录下的dir文件夹,移动到上级目录下
mv ./dir ../dir
# eg: 把当前目录下的dir更名为dir2
mv ./dir ./dir2
# eg: 删除文件 fileName.js
rm ./fileName.js
# eg: 删除文件夹 dir(添加参数 -r)
rm -r ./dir
date -R
# 输出值类似下面
# Wed, 03 Feb 2021 15:09:41 +0800