用户权限
查看当前用户组
$ 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最后部分作为保存文件名。
服务进程
查看全部服务
sudo service --status-all
关闭服务
# 停止服务
sudo systemctl disable service.name
# 停止服务
sudo service service.name stop
关闭杀不掉进程,服务 的另一种办法
- 在
/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
-
对脚本赋予执行权限
-
将脚本增加到开机启动项中
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解释为域名, 把端口解释成协议名称