【Linux】Linux基础命令


用户

切换用户

完全模拟{username}登录,运行其个性化配置的程序

1
sudo -i -u {username}

临时使用以{username}身份,在当前目录执行一个命令,环境变量无所谓

1
sudo -u {username} -s

创建用户

1
sudo useradd -m -s /bin/bash {username}
  • -m:创建用户的同时,创建用户的/home/{usrname}目录
  • -s /bin/bash:指定用户的默认登入shell为Bash

如果不用-s /bin/bash会出现无法使用上下左右方向键的问题
使用cat /etc/passwd可以看到{username}的登入shell是/bin/sh
使用ls -l /bin/sh,发现/bin/sh -> dash
修改连接目录sudo ln -sf /bin/bash /bin/sh,重新登入账户就可以了

1
sudo passwd {username}

为新用户设置密码,需要输入两次

删除用户

1
sudo userdel -r {username}

删除用户及其相关的文件,包括/home/{username}文件

给新用户root权限

通过将新用户添加到sudo组来给予root权限

1
sudo usermod -aG sudo {username}

验证:执行sudo ls /root,需要输入用户密码确认权限

注意:

如果使用的是VSCode连接的服务器,可能会出现每次连接后该用户的分组(输入Gropos查看)不是最新的问题。

原因:

VSCode Remote SSH 会:

  • 保持长连接

  • 复用 ssh control master

  • 后台常驻 vscode-server

你以为重新连接了,其实还是原来的ssh session

解决方法:

原因清楚之后,就很好解决了,只需要将VSCode Remote SSH完全断开就好了

  • 在VSCode中使用快捷键Ctrl+Shift+p
  • 输入Remote-SSH: Kill VS Code Server on Host
  • 选择你的服务器,并输入密码
  • 重新启动VSCode

另外,如果你使用VSCode,你可能会随时出现__vsc_prompt_cmd_original: command not found报错,所以在使用VSCode之前,建议将VSCode设置中的terminal.integrated.shellIntegration.enabled关闭。但是如果你此时已经使用VSCode登录过的话,那只能在.bashrc文件中添加unset PROMPT_COMMAND再使用source ~/.bashrc使应用更改

即使给了sudo权限之后,该用户在第一次使用sudo的时候后需要输入密码,比较不方便,解决方法:

  • 使用sudo visudo -f /etc/sudoers.d/wordswar进入nano编辑器界面
    • visudo 是专门用来编写sudoers的,防止语法错误导致不能再使用sudo命令了
  • 然后输入{username} ALL=(ALL) NOPASSWD:ALL
    • All任意主机
    • (ALL)以任意用户身份执行
    • NOPASSWD:不需要密码
    • ALL所有命令
  • Ctrl+O,底部会出现File Name to Write: /etc/sudoers.d/wordswar.tmp
  • 直接回车Enter即可保存
  • Ctrl+X退出nano
  • 如果没有问题会直接返回shell,如果有问题会提示syntax error

此时{username}就可以不用再输入密码直接使用sudo命令了

查看用户和组

命令 解释
cat /etc/passwd 列出所有用户信息,每一行对应一个用户
who或者w 查看当前登入的用户
id {username} 查看指定用户

/etc/passwd文件内容:

1
2
root:x:0:0:root:/root:/bin/bash
steam:x:1000:1000::/home/steam:/bin/sh

使用:分割

  • steam:用户名
  • x:加密的密码字段(为了安全不再存在该文件下,而是存在/etc/shadow下)
  • 1000:用户ID(UID)
  • 1000:组ID(GID)
  • **:用户描述信息,一般为空
  • /home/steam:用户的主目录
  • /bin/sh:用户登入的shell
命令 解释
cat /etc/group 查看所有组,每一行对应一个组
groups {username} 查看{username}所在组

防火墙

基础命令

基础命令 效果
systemctl start firewalld.service 开启防火墙
systemctl status firewalld.service 查看防火墙状态
systemctl stop firewalld.service 关闭防火墙
systemctl enable firewalld.service 开启时自启
systemctl disable firewall.service 关闭开机自启
systemctl is-enable firewall.service 查看服务是否开机自启
systemctl --failed 查看启动失败的服务列表

配置防火墙

命令 效果
firewall-cmd --zone=public --list-ports 查看开放的端口
firewall-cmd --reload 重新载入防火墙
firewall-cmd --zone=public --add-port=80/tcp --permanent 开放80端口,--premanent表示永久开放,重启后也依然开放

每次在配置完防火墙之后需使用firewall-cmd --reload更新配置


文件操作

快捷方式

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

实时查看log文件

1
tail -f /path/to/your/logfile.log
1
less +F /path/to/your/logfile.log

常用命令

cat 查看文件
touch 创建文件
mkdir -p 创建文件夹(-p 创建缺失的父目录)
cp fileName 复制文件(后面的地址,不用加文件名)
mv 移动文件
mv 修改文件名称
rm 删除文件
rm -r 删除空文件夹 -f 强制删除,不用确认
find / -name “Log.Develop.20260514??.Debug.log” 查找文件
cd
pwd 显示当前所在路径
cd - 返回上一次所在路径

文件详情

1
-rwxrw-r--   1 ubuntu root 1249 May 22 01:09 init.vim
  1. 第一个字符:表示类型

    • -:普通文件
    • d:目录
    • l:软链接
  2. 后续9个字符:表示权限

    • rwx:所有者可读可写可执行
    • rw-:所属组可读可写
    • r–:其他用户仅可读

    文件权限

    r:4 w:2 x:1

    owner = rwx = 4+2+1 =7

    chmod [-R] xyz

    将owner/group/others及其子文件都设置为可读可写可执行

    chmod -R 777 fileName

    • -R:递归所有子目录和文件

    修改文件所有者:注意两个不一样,一个是chmod一个是chown

    chown -R ubuntu:ubuntu /data/wordswar-fantasy

    • 设置为ubuntu用户,和ubuntu用户组
  3. 硬链接数

    • 表示该文件的硬链接数量为1(即无其他硬链接指向此文件)
    • 如果是目录,此数字表示子目录数(至少为2,含 ...

    硬链接是同一个文件的多个名称(类似于一个人的多个别名)。

    删除原始文件或任一硬链接,只要还存在至少一个硬链接,文件数据就不会被真正删除。

    用途:

    1. 备份与冗余:通过硬链接保护重要文件(删除一个不影响其他)。
    2. 节省空间:多个硬链接共享同一份数据,不占用额外磁盘空间。
    3. 版本控制:某些工具(如 Git)内部使用硬链接优化存储。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 创建硬链接
    echo "Hello" > original.txt
    ln original.txt hardlink.txt # 创建硬链接

    # 查看 inode(确认是否相同)
    ls -i original.txt hardlink.txt
    # 输出示例:12345 original.txt 12345 hardlink.txt

    # 删除原始文件后,硬链接仍可访问
    rm original.txt
    cat hardlink.txt # 正常输出 "Hello"
  4. 所属者和所属组

    • 所有者为ubuntu(所有者(Owner):当前拥有文件控制权的用户(不一定是创建者)。)
    • 所属组为root
  5. 文件大小

    • 1240字节(默认单位是字节,使用ls -lh可显示易读单位)
  6. 最后修改时间


端口

netstat -lntp 查看网络连接状态和端口情况
netstat -tlnp | grep :20000 查看20000端口网络状态
lsof -i :5000 查看5000端口的进程PID,然后可以使用sudo kill 关闭这个进程

进程

top 查看系统实时状态,可以使用top -b -d 10 -n 10 > top_log.txt 来将内容保存下来(每十秒保存一次,共保存10次)
ps -ef 查看所有进程可以通过 ps -ef | grep 来筛选
ps aux | grep nginx 查看nginx的进程

解压/压缩

.tar tar xvf FileName.tar 解压
tar cvf FileName.tar DirName 压缩 tar cvf {newname.tar} {path/to/name}
.tar.xz tar xvf FileName.tar.xz
tar cvf FileName.tar DirName
.tar.gz tar zxvf FileName.tar.gz
tar zcvf FileName.tar.gz DirName
zip unzip FileName.zip
zip FileName.zip DirName

在重装linux系统后,vscode无法连接,可能是ssh秘钥变了

报错内容,提示C:\\Users\\coffeeofnosugar/.ssh/known_hosts:10第10行,那就删掉这一行。如果还是不行,那就删除掉有相同ip的行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
> Please contact your system administrator.
> Add correct host key in C:\\Users\\coffeeofnosugar/.ssh/known_hosts to get rid of this message.
> Offending ECDSA key in C:\\Users\\coffeeofnosugar/.ssh/known_hosts:10
> Host key for 42.192.110.49 has changed and you have requested strict checking.
> Host key verification failed.
> The process tried to write to a nonexistent pipe.
[23:47:27.438] "install" terminal command done
[23:47:27.438] Install terminal quit with output: Host key verification failed.
[23:47:27.438] Received install output: Host key verification failed.
[23:47:27.438] WARN: $PLATFORM is undefined in installation script output. Errors may be dropped.
[23:47:27.439] Failed to parse remote port from server output
[23:47:27.439] Resolver error: Error
at y.Create (c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:722235)
at t.handleInstallOutput (c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:720316)
at t.tryInstall (c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:842913)
at async c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:801927
at async t.withShowDetailsEvent (c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:805164)
at async A (c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:798392)
at async t.resolve (c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:802578)
at async c:\Users\coffeeofnosugar\.vscode\extensions\ms-vscode-remote.remote-ssh-0.123.0\out\extension.js:2:1095407
[23:47:27.443] ------


swap

什么是 swap

当机器所需内存突然膨胀到超出最大内存,linux 会启动 Out Of Memort Killer 直接干掉一个服进程,服务器就会挂掉。如果有 swap, linux 就会把一些不常用的内存页写到磁盘,这样服务器就还能继续运行。但 swap 的速度可能会比内存的速度慢1000~10000倍。

大小选择

  • 4G服务器 –> Swap 1~2GB
  • 8G服务器 –> Swap 2~4GB
  • 16G+服务器 –> Swap 2GB

创建步骤

1
2
3
4
5
6
7
8
9
10
// 创建
sudo fallocate -l 2G /swapfile
// 设置权限
sudo chmod 600 /swapfile
// 格式化
sudo mkswap /swapfile
// 启用
sudo swapon /swapfile
// 查看
free -h

开机自动挂载

1
sudo nano /etc/fstab

末尾加入

1
/swapfile none swap sw 0 0

保存即可

或者使用echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab


ncdu

安装

1
sudo apt install ncdu

基本使用

1
2
3
4
5
6
7
8
# 分析当前目录
ncdu

#分析指定目录
ncdu /home/user

#分析整个跟目录(需要sudo)
sudo ncud /

快捷键

按键 功能
上下箭头 选择文件/目录
Enter 进入选中的目录
左箭头 返回上级目录
d 删除选中的文件/目录(会确认)
n 按文件名排序
s 按文件大小排序(默认)
g 按文件大小排序(显示百分比条)
t 切换是否显示目录总大小
c 显示/隐藏子项目数量
r 刷新/重新扫描当前目录
q 退出 ncdu
? 显示帮助菜单
i 显示选中文件/目录的详细信息

truncate命令

truncate 是 Linux 中用于调整文件大小的命令。

它最大的特点是:

  • 可以快速清空文件内容
  • 可以把文件截断到指定大小
  • 可以扩展文件到指定大小
  • 不会删除文件本身及其权限

例如日志文件太大:

1
truncate -s 0 access.log

执行后:

1
ls -lh app.log

显示:

1
-rw-r--r-- 1 ubuntu ubuntu 0 Jun 19 11:00 app.log

文件还在,但内容被清空了。

这相当于:

1
> app.log

或者:

1
echo "" > app.log

truncate 更直观。


定时任务

1
2
3
4
// sudo的定时任务
sudo crontab -e
// 用户自己的定时任务
crontab -e

第一次使用时可能会出现

1
2
3
4
5
6
7
8
9
10
ubuntu@VM-1-7-ubuntu:~$ crontab -e
no crontab for ubuntu - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed

Choose 1-4 [1]:

是让你选择编辑文件的方式,选1或2都可以

进入后,可以在文件的最后添加

1
2
// 每天的凌晨3点执行 /usr/bin/truncate -s 0 /home/ubuntu/nginx/logs/access.log
0 3 * * * /usr/bin/truncate -s 0 /home/ubuntu/nginx/logs/access.log
1
2
3
4
5
6
7
8
9
10
┌──────── 分钟 (0 - 59)
│ ┌────── 小时 (0 - 23)
│ │ ┌──── 日期 (1 - 31)
│ │ │ ┌── 月份 (1 - 12)
│ │ │ │ ┌ 星期 (0 - 7)
│ │ │ │ │
│ │ │ │ │
0 0 * * *

分钟 小时 日 月 星期
1
2
3
4
5
6
7
8
9
0 0 * * *	// 每天0点执行
0 * * * * // 每小时执行
*/5 * * * * // 每5分钟执行
0 3 * * * // 每天凌晨3点执行
0 3 * * 1 // 每周一凌晨3点执行
0 3 1 * * // 每月1号凌晨3点执行s
0 0 1 1 * // 每年1月1日凌晨0点执行
0 1,13 * * * // 每天1点和13点执行
0 9-18 * * * // 9点到18点,每小时执行一次