Linux系统指令
title: Linux系统指令 id: cb6702313f9816912c4807ee5bc76baa tags: [] date: 2000/01/01 00:00:00 updated: 2023/04/10 16:00:31 isPublic: true --#|[分隔]|#--
Linux系统指令
下面是一个github开源项目,Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。
里面gh-pages分支是可以下载后直接双击打开可以使用的页面项目。
项目地址:https://github.com/jaywcjlove/linux-command
作者开放的浏览页面地址:https://wangchujiang.com/linux-command/
which、type 指令信息查看
which:从环境变量 PATH 中查找某个命令,并显示位置
a:将所有PATH目录中可以找到的命令均列出,而不仅仅是第一个
V:或者v,显示可执行文件的版本信息
type:用来显示指定命令的类型
t:显示指令类型
p:如果给出的指令为外部指令,则显示其绝对路径
a:在环境变量 PATH 指定的路径中,显示给定指令的信息,包括命令别名
不同指令类型的意义:
alias:别名
keyword:关键字,Shell保留字
function:函数,Shell函数
builtin:内建(内嵌)命令,Shell内建命令
file:文件,磁盘文件,外部命令
unfound:未找到
举例
# 查看 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
ps 查看某软件或工具的进程
常用指令组合
# 展示进程中的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
输入指令说明
-e:展示所有进程
-f:展示进程的更详细信息
|:linux的管道功能,会把|左侧输出的内容,传给|右侧的指令再处理加工
grep:linux的过滤指令,这里是过滤nginx
输出说明
UID:程序被该 UID 所拥有
PID:就是这个程序的 ID
PPID:则是其上级父程序的ID
C:CPU使用的资源百分比
STIME:系统启动时间
TTY:登入者的终端机位置
TIME:使用掉的CPU时间。
CMD:所下达的是什么指令
lsof 查看占用端口的进程们
# 查看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)
kill 杀死进程
需要提供要杀死进程的pid
# 杀死pid为1857的node服务
kill 1857
查看所有shell+当前shell+切换 shell
切换完成后,需要退出当前 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
终端 shell 的配置文件们
以下针对的都是 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
全局环境变量的目录$PATH
安装的工具 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 [参数][源文件或目录][即将要生成的链接]
链接分为软链接和硬链接,正常比较常用的是软链接,以下两个场景下很适合使用:
安装软件,把软件指令创建到 bin 目录。
某个文件夹位置比较难找,又经常需要进入。
软链接:
软链接,以路径的形式存在,类似于Windows操作系统中的快捷方式。
软链接可以 跨文件系统 ,硬链接不可以。
软链接可以对一个不存在的文件名进行链接。
软链接可以对目录进行链接。
硬链接:
硬链接,以文件副本的形式存在。但不占用实际空间。
不允许给目录创建硬链接
硬链接只有在同一个文件系统中才能创建
无
创建硬链接
ln ~/less /usr/local/bin/less
-s
软链接(符号链接)
ln -s ~/less /usr/local/bin/less
-b
删除,覆盖以前建立的链接
-d
允许超级用户制作目录的硬链接
-f
强制执行
-i
交互模式,文件存在则提示用户是否覆盖
-n
把符号链接视为一般目录
-v
显示详细的处理过程
netstat -ntulp 查看端口占用情况
**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
alias 给指令设置别名
使用一些封装过的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修改的话,可能会出现各种提示各种阻止,无法修改,我的做法是把文件复制到桌面,使用编辑器修改后,再替换回去。
其他一些想要简化的命令,也是这样操作。
shutdown 关机/重启
参数
-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 修改/设置密码
直接输入,回车。
如果没有设置过密码,会让设置密码,输入两次。
如果已经设置了密码,会让先输入旧密码,再输入两次新密码。
passwd
hostname 查看计算机名
hostname
# 输出
localhost
查看当前linux是什么系统,ubuntu还是别的
cat /etc/issue
# 输出
Ubuntu 18.04 LTS \n \l
uname 查看内核/操作系统/CPU信息
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: 查看当前用户名
whoami
# 输出
root
find: 查找文件
结构: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: 查看当前设备的ip
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: 查看当前用户信息
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 查看内存使用情况
free -h
# 打印如下,应该不用又多余的说明
total used free shared buff/cache available
Mem: 1.9G 570M 862M 2.8M 560M 1.2G
Swap: 0B 0B 0B
top 实时查看系统信息
会全屏实时展示系统情况。
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 查看磁盘空间大小
df 和 du 相关命令:
df -hl:查看磁盘剩余空间
df -h:查看每个根路径的分区大小
du -sh [目录名]:返回该目录的大小
du -sm [文件夹]:返回该文件夹总M数
du -h [目录名]:查看指定文件夹下的所有文件大小(包含子文件夹)
# -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
显示内容参数说明:
Filesystem:文件系统
Size: 分区大小
Used: 已使用容量
Avail: 还可以使用的容量
Use%: 已用百分比
Mounted on: 挂载点
# 显示当前目录所占空间
du -sh
252M .
其他非常常用的指令
cd: 进入文件夹
# eg: 进入dir文件夹
cd ./dir
ls: 罗列当前文件夹下所有非隐藏的文件和文件夹名字
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: 显示当前所处的路径
pwd
# 输出
/root/Desktop
mkdir: 创建文件夹
# eg: 创建名为dir的文件夹
mkdir ./dir
mv: 移动和重命名
# eg: 把当前目录下的dir文件夹,移动到上级目录下
mv ./dir ../dir
# eg: 把当前目录下的dir更名为dir2
mv ./dir ./dir2
rm: 删除文件和文件夹
# eg: 删除文件 fileName.js
rm ./fileName.js
# eg: 删除文件夹 dir(添加参数 -r)
rm -r ./dir
date 查看当前系统时区和时间
date -R
# 输出值类似下面
# Wed, 03 Feb 2021 15:09:41 +0800
Last updated
Was this helpful?