Linux中偶尔用到的配置命令

本文涉及到的命令一般只会以普通用户处理问题的角度叙述, 仅起到基础导航作用; 可自行在终端查看其文档了解全部功能项, 或在浏览器中搜索针对自身所遇问题的功能项。

用户相关操作

通过客户端ssh链接到远程Linux的某个用户下

打开本地shell窗口输入命令:ssh 用户名@ip

用户名及ip,请根据自己远程Linux的实际情况填写

默认端口为22, 如有更换请使用ssh 用户名@ip -p 端口号

用户切换

命令:su 用户名

用户新建

命令:useradd 用户名

有两个参数,在某些发行版需要自己指定

  • -m 添加后会在/home/目录下创建对应新用户的家目录
  • -s shell种类 添加后在执行用户切换时可以正常切换至指定shell种类如-s /bin/bash

用户删除

命令:userdel -r 用户名

用户密码修改

命令:passwd 用户名

如果修改的是当前用户的密码, 直接输入passwd后回车即可

设置文件所有者和文件关联组的命令 chown

详细使用请移步->https://zhuanlan.zhihu.com/p/356054248

命令:chown -R 用户名:用户组 文件或文件夹 常用与更改目录的拥有者

  • chown更改每个给定文件的用户和/或组所有权。如果只提供了所有者(用户名或数字用户ID),则该用户将成为每个给定文件的所有者,并且不会更改文件组。如果所有者后跟冒号和组名(或数字组ID),且两者之间没有空格,则文件的组所有权也会更改。如果用户名后面有冒号,但没有组名,则该用户将成为文件的所有者,并且文件组将更改为该用户的登录组。如果给出了冒号和组,但省略了所有者,则只更改文件组;在这种情况下,chown执行与chgrp相同的功能。如果只给出一个冒号,或者如果整个操作数为空,则所有者或组已更改。

修改用户对文件的权限 chmod

详细使用请移步->https://cloud.tencent.com/developer/article/1823455?from=15425

命令: sudo chmod 权限 fileName

如: sudo chmod 777 aaa -> 最常用(此处只介绍该命令的此用法,其他用法自行谷歌)

  • 拥有者Ower=4+2+1=7、用户组Group=4+2+1=7、其他用户OtherUsers=4+2+1=7

数字4代表可读r,数字2代表可写w,数字1代表可执行x

图片中第一组数据对应文件权限,第二租数据对应文件的硬链接数…,第一组数据共9个字母位,它的第一个字母d代表文件夹,这个位置还可以是-代表文件、l代表链接,之后的9个字母按顺序分别表示OwerGroupOtherUsers对此文件的权限 -> rwx=7、r-x=5、r-x=5\

因此,我们若想通过命令将一个文件权限修改如图中所示, 命令是sudo chmod 755 fileName

压缩包相关操作

解压缩

解压到当前路径

1
tar -xzvf  压缩包名

解压到指定路径

1
tar -xzvf  压缩包名 -C 自定义路径

dep安装包安装与卸载

安装

1
sudo dpkg -i 安装包名.dep

卸载

1
sudo dpkg -r 安装包名

这里没有后缀, -r参数可以在任意路径, 全局地识别系统中所有通过此形式安装的应用, 你只需输入对应包名即可帮你卸载

进程任务与网络管理器相关

Ubuntu查看端口占用及关闭终端命令

参考->https://cloud.tencent.com/developer/article/1867784

  • Ubuntu查看端口使用情况,使用netstat命令:

    • 查看已经连接的服务端口(ESTABLISHED):

      netstat -a

    • 查看所有的服务端口(LISTEN,ESTABLISHED):

      netstat -ap

  • 查看指定端口,可以结合grep命令:

    netstat -ap | grep 8080

    也可以使用lsof命令:

    lsof -i:8888

  • 若要关闭使用这个端口的程序,使用kill + 对应的pid

    kill -9 PID号

  • 案例

    1.查看已连接的服务端口(ESTABLISHED)

    1
    2
    3
    $ ss -ntlp

    $ netstat -ntlp

    建议使用ss命令即可tip2

    2.查看所有的服务端口(LISTEN,ESTABLISHED)

    1
    2
    3
    $ ss -ap

    $ netstat -ap

    3.查看指定端口,可以结合grep命令

    1
    2
    3
    4
    5
    $ ss -apn | grep 8080

    $ netstat -apn | grep 8080

    $ lsof -i:8080

    lsof -> lsof是一个功能强大的命令行实用程序,它提供有关进程打开的文件的信息。常用与查看某个进程打开的文件、打开文件的进程、进程打开的端口等信息。

    4.查询进程详情,获得相关的pid信息

    1
    $ ps -aux | grep 进程名

    例如: ps aux|grep nginx查看nginx进程

    5.关闭使用这个端口的程序,使用kill + 对应的pid

    1
    kill -9 PID

实时查看进程的动态

参考 -> https://baike.baidu.com/item/top/16179030?fr=aladdin

1
top

top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如:前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。

df -h 命令 查看磁盘空间

1
df -h               # 用于显示系统上可使用的磁盘空间

du -h 命令 查看文件或目录所占据的磁盘空间

1
du -h --max-depth=1

远程链接相关

ssh登录容易断开链接

参考->”https://blog.51cto.com/u_15127632/4056947?b=totalstatistic”

1.命令: sudo vim /etc/ssh/sshd_config

2.找到下面两个配置:

1
2
#ClientAliveInterval 0
#ClientAliveCountMax 3

两个配置作用是

ClientAliveInterval -> 每隔多少秒检测一次客户端心跳数据
ClientAliveCountMax -> 客户端最大多少秒无心跳,服务器断连

3.因此可取消注释后,适当修改下参数修改参数

1
2
ClientAliveInterval 30
ClientAliveCountMax 300

4.重启sshdtip1服务

  • 命令:sudo service ssh restart

ssh客户端无法登录远程Linux服务

首先通过其他途径进入你需要远程的Linux系统,然后:

1.检查更新下载openssh-server

  • 命令:sudo apt-get install openssh-server

2.修改配置文件

  • 命令:sudo vim /etc/ssh/sshd_config

3.找到这三个配置,按自身需求更改即可

1
2
3
#Port 22
#PermitRootLogin prohibit-password
PasswordAuthentication no

三个配置的作用是

Port -> 设置ssh的端口号
PermitRootLogin -> 允许以root用户身份远程登录
PasswordAuthentication -> 密码验证登录

4.因此可取消注释后,配置为

1
2
3
Port 22                 # 若你当前是win下的Linux子系统,此处可改为任意无占用的其他端口
PermitRootLogin yes
PasswordAuthentication yes

4.重启sshdtip1服务

  • 命令:sudo service ssh restart

安装软件相关

nvm 及 nodejs安装

推荐使用nvm来安装nodejs并管理其版本。那么以Ubuntu22.04为例(其它发行版请自行切换与其对应的安装命令), 步骤如下:

  • sudo apt update
  • sudo apt upgrade
  • sudo apt-get install curl
  • curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

    至此 nvm 就安装完成了

  • nvm install node
  • node --version

对于如何使用nvm管理nodejs, 这里就不作扩展了。

自启动相关

可以通过创建 Systemd 服务单元来在系统启动时运行脚本。以下是具体步骤:

  • 首先,创建一个 Systemd 服务文件,例如我们将此文件存储为 /etc/systemd/system/your-service.service。在这个文件中,您需要包含以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    [Unit]
    After=network.target

    [Service]
    ExecStart=/path/to/your/script.sh

    [Install]
    WantedBy=default.target

    在这里,After=network.target 表示在网络连接后运行脚本。ExecStart 是您希望在系统启动时运行的脚本的完整路径(比如我的脚本路径一般是/home/srackhall/desktop/sh-script/***.sh, 故用此替换/path/to/your/script.sh, 你可以根据自己的喜好自行决定路径来创建)。WantedBy=default.target 表示将 Systemd 单元安装到默认的启动目标。

  • 创建要在 Ubuntu 系统启动时执行的脚本。如上一步所述,脚本的路径和名称在我们的示例中将是 /path/to/your/script.sh。以下是此类脚本的示例:

    1
    2
    3
    #!/bin/bash 
    # 上方指示系统使用 Bash shell 来执行这个脚本。
    # 在这里写下您希望在系统启动时执行的命令

    比如我想通过此脚本执行 python3 命令 来运行 路径在 /home/username/desktop/****/目录下的main.py文件。则.sh文件的内容可以如下:

    1
    2
    3
    4
    #!/bin/bash
    cd /home/username/desktop/****/
    pip3 #.... # 仅作为.sh脚本使用,可以不加此语句。 我把pip3写入脚本的原因是, 如果通过systemd使用的话, 由于和系统隔离, 可能会因此找不到一些第三方模块依赖(即使你的模块是在全局安装的)。
    python3 main.py
  • 为 Systemd 服务单元和脚本设置适当的权限:

    1
    2
    $sudo chmod 744 /path/to/your/script.sh
    $sudo chmod 664 /etc/systemd/system/your-service.service
  • 启用服务单元:

    sudo systemctl daemon-reload

    每当.service或者.sh文件更改后, 都需要执行此命令重新加载

    sudo systemctl enable your-service.service

    这个 enable 的作用是 使后面的uint(即your-service.service)(注:无需具体路径, 只需文件名), 在下次开机后自启动。

    如果想重新使用此命令, 需要先使用 disable 来删除原有的链接 即先执行sudo systemctl disable your-service.service

    enable的本质只是所谓的 enable 就是在 default.target.wants 下面创建了一个链接文件(至于为什么会链接到 multi-user.target.wants 目录下,则是由 prometheus.server 文件中的配置信息决定的。):

  • 检查服务的使能配置是否成功, 以及服务整体是否可以正常运转:

    • sudo systemctl start your-service.service 这个命令可以立即执行后面的 uint(即your-service.service)

    • 配合 sudo systemctl status your-service.service 命令, 即可快速验证 your-service.servicescript.sh等配置是否可以跑通。如下图所示:

现在,每次您的 Ubuntu 系统启动时,都会自动运行您指定的脚本。

tips:

  • 如果你想停止/关闭在systemctl中运行的某个脚本程序, 可使用stop, 即使用命令sudo systemctl stop your-service.service

    不过需要注意的时, 这个操作会影响下次自启动, 所以请在**关机前使用start**来重新启动此任务, 以免下次自启动的enable受到stop的影响。

  • systemd在执行脚本时的环境, 与系统不完全一致

    举个例子: 比如你用python3命令执行一个main.py, 其代码中引入了一些第三方模块。 此时, 若你以及通过pip3全局地安装过这些模块(暂不考虑虚拟环境), 那么不管是你自己执行python3命令还是通过 .sh脚本执行 python3命令, 都没有问题。 但是,你通过systemd的话, 在.sh脚本执行时是找不到这些模块的, 因此, 你需要将 pip3下载模块的命令, 一并写入.sh脚本才行。

  • systemd服务不会加载用户的.bashrc文件。当你在systemd服务中运行程序时,它会使用一个非交互式的shell,这意味着它不会加载任何用户级别的bash配置文件(如.bashrc或.bash_profile)。 解决这个问题的一种方法是在systemd服务文件中设置环境变量。你可以在服务文件的[Service]部分中使用Environment字段来设置环境变量。例如:

    举个golang的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    After=network.target

    [Service]
    Environment="GOROOT=/usr/local/go"
    Environment="GOPATH=/home/srackhall/go"
    Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/home/username/go/bin"
    Environment="GO111MODULE=on"
    Environment="GOCACHE=/home/username/.cache/go-build"
    ExecStart=/home/srackhall/desktop/sh-scripts/auto-run-olive.sh

    [Install]
    WantedBy=default.target
    • 在 systemd 服务文件中,环境变量 $HOME $PATH 等没有被解析。你需要使用绝对路径来替换 $HOME $PATH 等环境变量。例如,如果你的用户名是 username,那么你应该将 $HOME/go 替换为 /home/username/go(或者你的实际用户目录)
    • Go 1.11 及以上版本需要一个环境变量 GOCACHE 来指定构建缓存的位置。如果 GOCACHE 没有定义,Go 会尝试在 HOME 目录下创建缓存,但在 systemd 服务中,HOME 可能没有被设置。

关于systemctl命令的更多信息, 可参考此文章: linux的systemctl 命令用法

注释

tip1:{

sshd概念简介

参考->”https://blog.csdn.net/qq_39236849/article/details/111030074”

  • openssh

    在主机中开启了openssh服务,那么就对外开放了远程连接的接口

    openssh的服务端:sshd

    openssh的客户端:ssh

  • ssh

    ssh= secure shell

    可以通过网络访问远程主机的服务,开始一个安全shell,并对其进行操控

  • sshd

    sshd = ssh daemon

    可以通过网络在主机中开启shell的服务 就是后台进程的含义

return [ssh登录容易断开链接->tip1][ssh客户端无法登录远程Linux服务->tip1]

} //tip1结束

//////////////分割///////////////

tip2:{

建议使用ss即可

参考下列链接文章,netstat已经过时不建议使用:

https://baijiahao.baidu.com/s?id=1722457178512340315&wfr=spider&for=pc
https://blog.csdn.net/weixin_42816196/article/details/86580834
https://www.cnblogs.com/kevingrace/p/6211509.html

ss命令的相关参数如下:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$ ss -h
Usage: ss [ OPTIONS ]
ss [ OPTIONS ] [ FILTER ]
-h, --help this message
-V, --version output version information
-n, --numeric don't resolve service names
-r, --resolve resolve host names
-a, --all display all sockets
-l, --listening display listening sockets
-o, --options show timer information
-e, --extended show detailed socket information
-m, --memory show socket memory usage
-p, --processes show process using socket
-i, --info show internal TCP information
--tipcinfo show internal tipc socket information
-s, --summary show socket usage summary
--tos show tos and priority information
-b, --bpf show bpf filter socket information
-E, --events continually display sockets as they are destroyed
-Z, --context display process SELinux security contexts
-z, --contexts display process and socket SELinux security contexts
-N, --net switch to the specified network namespace name

-4, --ipv4 display only IP version 4 sockets
-6, --ipv6 display only IP version 6 sockets
-0, --packet display PACKET sockets
-t, --tcp display only TCP sockets
-S, --sctp display only SCTP sockets
-u, --udp display only UDP sockets
-d, --dccp display only DCCP sockets
-w, --raw display only RAW sockets
-x, --unix display only Unix domain sockets
--tipc display only TIPC sockets
--vsock display only vsock sockets
-f, --family=FAMILY display sockets of type FAMILY
FAMILY := {inet|inet6|link|unix|netlink|vsock|tipc|xdp|help}

-K, --kill forcibly close sockets, display what was closed
-H, --no-header Suppress header line
-O, --oneline socket's data printed on a single line

-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_stream|vsock_dgram|tipc}[,QUERY]

-D, --diag=FILE Dump raw information about TCP sockets to FILE
-F, --filter=FILE read filter information from FILE
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]

return Ubuntu查看端口占用及关闭终端命令 -> tip2

}

带桌面的

推荐的小软件工具

sudo apt install pavucontrol 是一个条件声音的应用, 也可以观测有无声音以及音量的大小(通过滑块条来观测即可)。

这个应用层用于帮助我在忘记带耳机的安静环境中, 调试过KeyTone应用。