侧边栏壁纸
博主头像
Blog博主等级

行动起来,活在当下

  • 累计撰写 211 篇文章
  • 累计创建 94 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

linux使用技巧

一、避免执行类似于 curl | sh 的命令

$ curl -fsSL https://101.lug.ustc.edu.cn/Ch02/wordpress.sh | sudo bash

它的功能是从对应的 URL 获取脚本内容后,直接用 sudo bash 去执行。但是从安全性的角度这是不恰当的,因为网络上的脚本有可能包含恶意内容,直接执行可能会对系统带来安全风险。因此相关命令修改为了首先下载脚本到文件中(wordpress.sh 文件),然后再执行。如果对脚本内容有疑虑,则可以阅读脚本内容,检查其是否和你的预期相一致。

所以可以将以下命令更改为:

$ curl -fsSL https://101.lug.ustc.edu.cn/Ch02/wordpress.sh > wordpress.sh

然后执行

bash  wordpress.sh

二、流行的 Linux 发行版包管理器命令以及命令操作内容的对应关系

https://wiki.archlinuxcn.org/wiki/Pacman/Rosetta

三、tldr 软件

通常,软件手册中的内容十分繁多,如果只是希望能够快速了解软件的常用用法,可以使用 tldr 软件。

tldr 软件中包含有一个由社区维护的精简版文档,通过几个简单的例子让用户可以快速地一窥软件的使用方法。

安装

$ sudo apt install tldr
$ # 更新 tldr pages
$ tldr --update

使用

输入 tldr tar 的样例:

root@peng-VirtualBox:~# tldr tar 
tar

归档实用程序。
通常与压缩方法结合使用,例如 gzip 或 bzip2.
更多信息:https://www.gnu.org/software/tar.

 - 创建存档并将其写入文件:
   tar cf 目标文件.tar 路径/到/文件1 路径/到/文件2 ...

 - 创建一个 gzip 压缩文件并将其写入文件:
   tar czf 目标文件.tar.gz 路径/到/文件1 路径/到/文件2 ...

 - 使用相对路径从目录创建一个 gzip 压缩文件:
   tar czf 目标文件.tar.gz --directory=路径/到/目录 .

 - 详细地将(压缩的)存档文件提取到当前目录中:
   tar xvf 源文件.tar[.gz|.bz2|.xz]

 - 将(压缩的)存档文件解压缩到目标目录中:
   tar xf 源文件.tar[.gz|.bz2|.xz] --directory=目标目录

 - 创建压缩存档并将其写入文件,使用文件扩展名自动确定压缩程序:
   tar caf 目标文件.tar.xz 路径/到/文件1 路径/到/文件2 ...

 - 详细列出 tar 文件的内容:
   tar tvf 源文件.tar

 - 从存档文件中提取与模式匹配的文件:
   tar xf 源文件.tar --wildcards "*.html"

四、非对称加密

GPG 签名是非对称密码体系的一个例子。这里,软件包发布者有两把密钥:公钥(供用户公开下载)和私钥(必须妥善保存,不能让别人知道)。发布者使用私钥对软件包签名后,用户可以用公钥验证软件包确实为该发布者发布,且未被篡改。

五、进程

优先级:

nice(NI)

范围:[-20,19]

默认值:0

数值越大,优先级越低。

priority(PRI)

计算公式:PRI = NI + 20

nice值调整:

$ nice -n 10 vim # 以 10 为 nice 值运行 vim
$ renice -n 10 -p 12345 # 设置 PID 为 12345 的进程的 nice 值为 10

在正常运行的 Linux 系统中,我们可能会发现有些进程的 PRI 值是 RT,或者是负数。这表明对应的进程有更高的实时性要求(例如内核进程、音频相关进程等),采用了与普通进程不同的调度策略,优先级也相应更高。

     11 root      rt   0       0      0      0 S   0.0   0.0   2:07.06 migration/0                                                           

进程状态表:

状态

缩写表示

说明

Running

R

正在运行/可以立刻运行

Sleeping

S

可以被中断的睡眠

Disk Sleep

D

不可被中断的睡眠

Traced / Stopped

T

被跟踪/被挂起的进程

Zombie

Z

僵尸进程

后台运行进程不受signup影响

nohup

$ nohup ping 101.lug.ustc.edu.cn &
[1] 19258
nohup: ignoring input and appending output to '/home/ustc/nohup.out'

在需要屏蔽 SIGHUP 的程序前添加 nohup,则运行时的输出将被重定向到 nohup.out,也可以通过重定向手段自定义输出的文件。

孤儿进程:父进程先于子进程退出,此时子进程为孤儿进程(orphan)。

僵尸进程:子进程先退出,父进程未作出回应(wait),此时子进程为僵尸进程(zombie)。

孤儿进程(即留下的子进程)由操作系统回收,交给 init「领养」。

僵尸进程的进程资源大部分已释放,但占用一个 PID,并保存返回值。系统中大量僵尸进程的存在将导致无法创建进程。

六、定时任务

crontab配置教程:

https://crontab.guru/

七、日志

使用 journalctl 查看日志。

  1. 某个服务的日志

    journalctl-u 参数可以指定 unit,例子如下:

    $ sudo journalctl -u ssh  # 查看 ssh 服务的日志
    
  2. 某个正在运行的服务正在输出的日志

    在第一条的基础上,可以指定 -f 参数,以获取正在输出的日志:

    $ sudo journalctl -u ssh -f
    

    按下 Ctrl + C 退出输出即可。

  3. 系统正在输出的日志

    $ sudo journalctl -f
    

    系统日志对于调试系统状态来说是非常有用的信息。

  4. 上一次启动到关机的所有日志

    $ sudo journalctl -b -1
    

    -b 参数表示 boot(启动),-1 表示上一次启动。如果不添加 -1 参数,则默认为当前启动的日志。

八、下载工具

wget

批量下载 filelist.txt 中给出的链接:

$ wget -i filelist.txt

安装 oh-my-zsh:

$ sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

curl

输出必应主页的代码:

$ curl "http://cn.bing.com"

使用重定向把必应页面保存至 bing.html 本地:

$ curl "http://cn.bing.com" > bing.html

也可以使用 -o 选项指定输出文件:

$ curl -o bing.html "http://cn.bing.com"

下载 USTCLUG 的 logo:

$ curl -O "https://ftp.lug.ustc.edu.cn/misc/logo-whiteback-circle.png"

只展示 HTTP 响应头内容:

$ curl -I "http://cn.bing.com"

九、文本处理

sed

对于大多数用户来说,最常用 sed 的场合是替换软件源的时候。在阅读了上面的示例之后,以下例子就很简单了。

$ sudo sed -i 's/cn.archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
$ sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
$ sudo sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

十、在linux下编译windows程序

hello.c

#include <stdio.h>

int main() {
    puts("Hello, world!");
    return 0;
}

这里使用 mingw 来进行交叉编译。

$ sudo apt install gcc-mingw-w64  # 安装 mingw 交叉编译器
$ sudo apt install wine  # 安装 wine Windows 兼容层(默认仅安装 64 位架构支持)
$ x86_64-w64-mingw32-gcc -o hello.exe hello.c  # 编译为 64 位的 Windows 程序
$ file hello.exe  # 确认为 Windows 程序
hello.exe: PE32+ executable (console) x86-64, for MS Windows
$ wine hello.exe  # 使用 wine 运行
it looks like wine32 is missing, you should install it.
as root, please execute "apt-get install wine32"
wine: created the configuration directory '/home/ubuntu/.wine'
(忽略首次配置的输出)
wine: configuration in L"/home/ubuntu/.wine" has been updated.
Hello, world!

十一、history中不记录用户操作

需求:

使用下面命令更改test用户密码时,history中默认会存储明文密码,这样不安全。

echo "qwepoi.." | sudo passwd test --stdin

解决方式:

在修改密码时,先设置:

set +o history

然后再修改密码,这样就不会再看到密码了。

修改密码后想恢复记录操作输入以下命令就可以了。

set -o history 

注意:set 设置的效果只对当前窗口有效,对于别人打开的窗口是无效的。

完整操作如下:

peng@peng-VirtualBox:~$ echo "qpwoasd.." | sudo passwd --stdin test 
peng@peng-VirtualBox:~$ history | grep test 
   66  echo "qpwoasd.." | sudo passwd --stdin test 
   67  history | grep test 
peng@peng-VirtualBox:~$ set +o history 
peng@peng-VirtualBox:~$ echo "qpwoasd.." | sudo passwd --stdin test 
peng@peng-VirtualBox:~$ history | grep echo 

十一、vim下快速删除列

删除特定列的快捷方法(逐行删除)

如果你知道你需要删除哪一列的内容,并且该列的内容每行都是相同长度的,可以通过以下方法快速删除:

  • 移动到第一行,按 Ctrl + v 进入可视块模式。

  • 使用方向键选中你想删除的列。

  • d 删除。

vim模式下快速选中数据,替换文字。

ctrl + v 进入VISUAL 模式,方向键选中文字。按英文冒号“:” s/原文字/替换后的文字。然后按enter。替换完成。

vim 显示下一个搜索结果

在 Vim 中,使用 /80 进行搜索后,想要跳转到下一个匹配的结果,可以使用以下快捷键:

按 n:跳转到下一个匹配项。
按 N:跳转到上一个匹配项(与 n 相反)。
所以,在搜索 /80 后,按 n 就可以找到下一个 80 的匹配结果。

十二、ssh免密登录(交换密钥方式)

服务端:

私钥 id_rsa

公钥: id_rsa.pub

生成公私钥

ssh-keygen

将公钥拷贝给客户端。

ssh-copy-id root@10.10.10.36

客户端:

公钥: id_rsa.pub

客户端收到公钥默认在用户目录的.ssh中

十三、iptables保存规则并导入定义好的规则

使用如下命令保存当前规则:

iptables-save > /etc/iptables/rule.v4

下次开机可以导入规则:

iptables-restore < /etc/iptables/rule.v4

十四、递归当前文件夹内文件从大到小排序

[root@jx-gateway-254 opt]# du -h --max-depth=1 | sort -hr
236M	.
14M	./kylin-sm-package
80K	./scirpt
0	./kyanos

十五、yum安装软件包时,保存rpm包到本地。

我们使用yum install 命令安装软件包后,默认不会保留安装的rpm包。如果需要保留我们需要开启`keepcache=1`参数

vim /etc/yum.conf
keepcache=1

然后保存的rpm文件路径

cd /var/cache/yum/x86_64/7
find . -name *.rpm 

将找到的rpm包拷贝到/tmp目录下

f

十六、同一台机器启动多个tomcat

tomcat启动后会监听5个端口,分别是8000、80、8005、8999、8009。

端口分析过程

[root@jx-ops-81 bin]# netstat -anop | grep java 
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      5303/java            off (0.00/0/0)
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      5303/java            off (0.00/0/0)
tcp6       0      0 :::41253                :::*                    LISTEN      5303/java            off (0.00/0/0)
tcp6       0      0 :::8999                 :::*                    LISTEN      5303/java            off (0.00/0/0)
tcp6       0      0 :::8009                 :::*                    LISTEN      5303/java            off (0.00/0/0)
tcp6       0      0 :::80                   :::*                    LISTEN      5303/java            off (0.00/0/0)
tcp6       0      0 :::39635                :::*                    LISTEN      5303/java            off (0.00/0/0)
unix  2      [ ]         STREAM     CONNECTED     74179    5303/java            
unix  2      [ ]         STREAM     CONNECTED     74182    5303/java            

使用命令筛选端口分别在哪个配置文件中,改掉就可以启动了。如果有端口冲突会抱以下错误:

[root@jx-ops-81 tomcat8]# cd /mnt/tomcat8
[root@jx-ops-81 tomcat8]# grep 8999  -rwn

ERROR: transport error 202: bind failed: Address already in use

可以发现80、8005、8009在同一个文件。在conf/server.xml内。

8000和8999在bin/catalina.sh。都改成和上一个tomcat不同端口后就可以启动成功了。

0

评论区