Linux杂项

发布时间 2023-11-09 14:02:05作者: 潜行1

groups 可以查看用户组 具体的用法可以参考终端的指南。

usermod -aG sudo <用户名> 将用户添加到sudo组。 将用户添加到指定组,这样就拥有了权限。

scp传输文件:
我自己使用成功的案例:
scp -r C:\zzk\env\video\ test@192.168.3.222:/home/test/zzk/video

kagami@47.109.128.128:/home/kagami/zenglg
nimamasilajideliyive4000+
-r 递归复制
-P(大写) 指定端口号
-p 保留源文件属性(可能是用户组之类的)

alias相关的

单用户反正是

ddd 直接打开 .bashrc
zzk标记alias命令的位置

然后常用的命令就写到那里

特定用户写入到 .bashrc中;
全局配置则是 /etc/bashrc中;

alias命令的使用:
直接绑定常用的命令:

如果需要参数的话: 代办

运行通过ssh登录到root账户

使用pass 修改了root的密码但是ssh还是无法登入进root:
原因是因为ssh不允许通过root用户进行登录;

sudo vim /etc/ssh/sshd_config

将 PermitRootLogin without-password 注释掉
然后添加 PermitRootLogin yes

然后重启 sshd:

【知识点】配置 linux文件连接

是的,你可以通过配置SSH密钥来实现免密码SSH登录,这样你就不必每次都输入密码。以下是实现免密码SSH登录的步骤:

1. **生成SSH密钥对:** 在本地计算机上生成SSH密钥对,包括公钥和私钥。你可以使用`ssh-keygen`命令来执行此操作。默认情况下,它会将密钥文件保存在用户的家目录下的`.ssh`目录中。
    
    bashCopy code
    
    `ssh-keygen -t rsa`
    
    这将生成RSA密钥对。你可以按照提示输入密钥保存的位置和密码,或者直接按Enter来使用默认选项。
    
2. **将公钥复制到远程服务器:** 将你的公钥添加到你想要免密码登录的远程服务器上的`~/.ssh/authorized_keys`文件中。你可以使用`ssh-copy-id`命令来简化这个过程。
    
    bashCopy code
    
    `ssh-copy-id username@remote_server_ip`
    
    这将把你的公钥复制到远程服务器上,允许你使用私钥进行身份验证。
    
3. **测试SSH连接:** 现在,你应该能够通过SSH连接到远程服务器而无需输入密码:
    
    bashCopy code
    
    `ssh username@remote_server_ip`
    
    如果一切设置正确,你将可以无密码登录到远程服务器。
    

注意事项:

- 请确保你的私钥文件(通常为`~/.ssh/id_rsa`)在本地计算机上具有适当的权限,通常为`-rw-------`(只有所有者可读可写)。
- 在复制公钥到远程服务器之前,确保远程服务器上的`~/.ssh`目录和`~/.ssh/authorized_keys`文件具有适当的权限。通常,`~/.ssh`目录权限应为`700`,`~/.ssh/authorized_keys`文件权限应为`600`。
- 如果你之前使用密码登录到服务器,现在应该能够使用SSH密钥登录。如果出现问题,你可以尝试使用`ssh -v`选项进行详细的调试。

实际操作就是:
ssh-keygen -t rsa 在你的操作端生成秘钥;
然后进入~/.ssh中找到pub后缀的公钥,传输到远程服务器中。
然后在远程服务器中 通过 cat 将秘钥添加到 ~/.ssh/aut 什么文件里面。
大功告成。

文本处理三剑客

grep

标准格式是: grep -i "pattern" file.txt

pattern 默认就是正则表达式。
-i 不区分大小写
-v 反向过滤
-C 3 显示匹配行以及上下文 -A就是上,-B就是下,很好理解。

使用函数我觉得更好应该;

环境变量

环境变量是都可以访问到的变量。

使用 export 就可以导出变量。

然后添加到环境变量的path,里面就可以直接访问到。
格式为: PATH=/path1:/path2:/path3

位置变量

相当于函数获取参数
一到九 直接为 $9, 更多的参数需要是 ${10},一般没有这么多参数

$* 会把所有参数看成一个整体;
$@ 同样获取所有的参数,但是不会将他们拼成一个字符串。

预定义变量

预先定义好的变量,一般是一些状态、常用的值。

$$ 当前执行的进程 id
$! 最后执行的后台进程的pid
$? 上一个命令的执行状态
``

【知识点】使用 netstat 查看网络端口情况和对应的 process

使用命令 netstat -anp

【知识点】用户级别切换默认级别的shell

这个就是直接选择用户目录下的 某一个shell,这里用fish举例子
chsh -s /usr/bin/fish

【知识点】使得 Screen启动的程序可以查看日志:

screen是支持的,只不过默认没有打开。

gpt说的是有效的。

在你的用户目录下创建 .screenrc文件

termcapinfo xterm* ti@:te@
termcapinfo xterm-color* ti@:te@
defscrollback 10000

保存重启 screen 就可以看到效果了。

apt删除之前安装过的软件

sudo apt-get list --installed
```
这将显示系统中已经安装的所有软件包列表。
  1. 使用以下命令删除指定的软件包(将 <package_name> 替换为要删除的软件包的实际名称):

    shell

    复制

    sudo apt-get remove <package_name>
    ```
    这将卸载指定的软件包,并删除其相关的文件和配置。
    
sudo apt-get autoremove
```
这将自动删除不再需要的软件包和依赖项。

ps aux

STAT的缩写

ps -aux 命令的输出中,STAT 表示进程的状态,通常以单个字符的形式显示。这些状态字符的含义如下:

  1. R:运行 (Running)

    • 进程当前正在执行或在可运行队列中等待执行。
  2. S:睡眠 (Sleeping)

    • 进程当前正在休眠,等待某些事件的发生,例如等待输入、磁盘操作等。
  3. D:不可中断休眠 (Uninterruptible Sleep)

    • 进程正在进行不可中断的休眠,通常是等待磁盘I/O操作完成。这些进程通常不会响应中断信号。
  4. T:已停止 (Stopped)

    • 进程已经停止运行,通常是由用户发送 SIGSTOP 信号或者由系统发送 SIGTSTP 信号造成的。
  5. Z:僵尸 (Zombie)

    • 进程已经终止,但其父进程还没有等待收集其退出状态。僵尸进程通常会在其父进程收集完退出状态后被清理。
  6. I:空闲 (Idle)

    • 内核进程,通常是系统的空闲进程。
  7. <:高优先级 (High Priority)

    • 优先级较高的进程。
  8. N:低优先级 (Low Priority)

    • 优先级较低的进程。
  9. W:换出 (Paging)

    • 进程被换出到磁盘。
  10. L:锁定 (Lock)

    • 进程被锁定到内存。
  11. s:会话的领导 (Leader)

    • 进程是会话的领导。
  12. l:多线程 (Multi-threaded)

    • 进程包含多个线程。
  13. +:前台进程组 (Foreground Process Group)

    • 进程是前台进程组的一部分。

这些状态字符提供了关于每个进程当前状态的信息,有助于管理员和用户了解系统上正在运行的进程的状态。