leelongcrazy's blog

Linux Just For Fun

用户权限

查看当前用户组

$ groups

sudo 免密码

echo "username ALL=(ALL)NOPASSWD:ALL" >> /etc/sudoers.d/010_username_nopasswd
# 对指定命令免密码, 将ALL替换为命令的绝对路径即可
echo "username ALL=(ALL)NOPASSWD:/bin/apt" >> /etc/sudoers.d/010_username_nopasswd

目录/文件操作

查找文件位置

# 方法1
find path -name fileName
# 方法2   从数据库中查找, 速度更快
locate fileName

对目录下文件内容中的指定字符进行替换

grep -rl  'windows' ./path | xargs sed -i 's/windows/linux/g'

# 将列出文件的文件名中的空格替换为?
ls ./ | tr " " "\?"

查找指定字符串

grep -r -e "patch_string" path

使用sed获取文件中指定的内容

cat test.txt| sed -r 's/.*(bit.*[0-9]{1,2}).*/\1/'

\1 代表第一个配置结果,括号内的匹配内容

如遇空格,用\转义

sed 查看文件指定行的内容

sed -n -i "66p" $file_name  # 查看文件file_name第66行的内容

sed 替换指定行内容

sed -i "66c${value}" $file_name # 将文件file_name第66行的内容用value变量替换

文件树目录显示

tree -L 1 一级目录显示,相比tree 直接显示,显示的信息少一些,更美观,不至于屏幕一下子下拉太多完全看不过来。数字可以更改。

示例:

➜  vscode git:(main) tree -L 1
.
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── SECURITY.md
├── ThirdPartyNotices.txt
├── build
├── cglicenses.json
├── cgmanifest.json
├── extensions
├── gulpfile.js
├── package.json
├── product.json
├── remote
├── resources
├── scripts
├── src
├── test
├── tsfmt.json
└── yarn.lock

网络配置

防火墙配置

# 显示防火墙状态
ufw status

# 禁止服务
ufw deny serviceName

# 禁止端口
ufw deny portName/tcp(or udp)

# 只允许从某IP端访问主机指定端口
ufw allow from 192.168.1.1/24 to any port portName

# 删除防火墙规则
ufw status nubmered
ufw delete number
ufw delete deny serviceName(or portName)

Ubunut20.04 设置静态IP地址

编辑文件/etc/netplan/00-network-manager-all.yaml

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.1.111/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [114.114.114.114]

查看监听端口

netstat -ntl
# netstat -l

# 查看占用端口的进程

netstat -tunlp |grep 端口号

开机启动

1. 记录一个和操作系统有关的问题,Ubuntu20 增加开机脚本到启动项

#1. 编辑文件
sudo vi /lib/systemd/system/rc-local.service
#在末尾增加内容
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

#2.新增 /etc/rc.local 文件在文件中添加启动项脚本文件或命令

#赋予 rc.local 执行权限
sudo chmox +x /etc/rc.local

#3. 创建软链接
ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/

【参考文章: 为Ubuntu Server 20.04设置开机自启】

2. 在 /etc/init.d/目录下编辑启动脚本

示例脚本:

#!/bin/bash
### BEGIN INIT INFO
#
# Provides:  location_server
# Required-Start:   $local_fs  $remote_fs
# Required-Stop:    $local_fs  $remote_fs
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
# Short-Description: cups-server  stopscript
# Description:  This file should be used to construct scripts to be placed in /etc/init.d.
#
### END INIT INFO


sudo systemctl stop cups
sudo systemctl stop avahi-daemon
sudo systemctl stop avahi-daemon.socket

然后:

sudo update-rc.d stop_cups.sh defaults 90 

90表示优先级,越高表示执行的越晚。优先级范围:0~90

删除启动项

sudo update-rc.d -f apache2 remove
sudo update-rc.d -f nginx remove

curl用法

curl -L 会让HTTP请求跟随服务器的重定向,默认不跟随。

-o , 小写,将服务器回应保存成文件,相当于 wget命令

-O ,大写,将服务器回应保存成文件,并将URL最后部分作为保存文件名

【更多参考:curl 的用法指南】

服务进程

查看全部服务

sudo service --status-all

关闭服务

# 停止服务
sudo systemctl disable service.name

 # 停止服务
 sudo service service.name stop

关闭杀不掉进程,服务 的另一种办法

  1. /etc/init.d/下新建一个脚本文件,比如:stop.sh
 #!/bin/bash
 ### BEGIN INIT INFO
 #
 # Provides:  location_server
 # Required-Start:   $local_fs  $remote_fs
 # Required-Stop:    $local_fs  $remote_fs 
 # Default-Start:    2 3 4 5
 # Default-Stop:     0 1 6
 # Short-Description: cups-server  stopscript
 # Description:  This file should be used to construct scripts to be placed in /etc/init.d.
 #
 ### END INIT INFO

sudo systemctl stop cups
sudo systemctl stop avahi-daemon
sudo systemctl stop avahi-daemon.socket
  1. 对脚本赋予执行权限

  2. 将脚本增加到开机启动项中

    sh sudo upate-rc.d stop.sh defaults 90

终端 shell 相关

定义变量,等号附近不能有空格

shell判断文件是否存在

-e filename 如果 filename存在,则为真 
-d filename 如果 filename为目录,则为真 
-f filename 如果 filename为常规文件,则为真 
-L filename 如果 filename为符号链接,则为真 
-r filename 如果 filename可读,则为真 
-w filename 如果 filename可写,则为真 
-x filename 如果 filename可执行,则为真 
-s filename 如果文件长度不为0,则为真 
-h filename 如果文件是软链接,则为真

参考文章

终端光标移动

ctrl + a : 行首

ctrl + e : 行尾

ctrl + u : 删除光标位置至行首

ctrl + K : 删除光标位置至行尾

ctrl + <-/-> : 按单词左右移动

ctrl + p : 上一条命令

ctrl + n : 下一条命令

ctrl + r : 命令搜索

ctrl + f : 光标向后移动一个字符

ctrl + b : 光标向前移动一个字符

!?string? : 执行含有string字符串的最新命令

参考资料

$0 : 代表当前执行文件

$1 : 执行文件后面的紧跟的第一个文件名

dirname : 获取文件的绝对路径

2>/dev/null : 将标准错误信息隐藏

将指定路径注册进path环境

# .zshrc
export PATH=your_path:${PATH}

in fedora terminal tmux

ctrl + b, % : 竖直分屏
ctrl + b, " : 垂直分屏

相关资料

ssh代理转发

本地端口转发
* 本地主机执行:
ssh -L localHostPort:RemoteHost:RemoteHostPort -fN sshServer

* 然后再本地主机执行:
举例:
ssh 127.0.0.1 localHostPort 
远程转发
* 中转主机执行:
ssh -R sshServerPort:RemoteHost:RemoteHostPort -fN sshServer

* 上一条命令中的sshServer主机执行:
telnet 127.0.0.1 sshServerPort
动态转发
ssh -D localPort -fN sshServer

# 使用代理
curl --socks5 http://remotehost

ss 命令

是socket statistics 的缩写,可以获取socket统计信息,显示内容和netstat相似
  • -t, -tcp
  • -u, -udp
  • -x, -unix 显示unix domain sockets, 与 -f 选项相同
  • -n, -numeric 不解析服务的名称, 如“22”端口不会显示成“ssh”
  • -l, -listening 只显示处于监听状态的端口
  • -p, -processes 显示监听端口的进程
  • -a, -all
  • -r, -resolve 把IP解释为域名, 把端口解释成协议名称