记录一些简单我又记不住的linux命令的使用方法
服务器交互
SSH
Windows也可使用
连接到服务器
ssh -p <port> \ -i </path> \ -L <LocalPort>:localhost:<RemotePort> \ -R <RemotePort>:localhost:<RemotePort> \ <username>@<ip>
-p
:指定端口-i
:指定密钥文件位置-L
:将远程端口映射到本地端口-R
:将本地端口映射到远程端口
SSH 代理使用
在~/.ssh/
新建config
文件,配置如下
Host name1
User root
HostName 127.0.0.1
Port 22
IdentityFile ~/key.key
Host name2
User root
HostName 127.0.0.1
Port 23
IdentityFile ~/key.key
Host name3
User root
HostName 127.0.0.1
Port 24
IdentityFile ~/key.key
之后再使用ssh就可以简化命令就可以直接连接
ssh name1
echo -e "\032find config:\033[0m"
cat ~/.ssh/config | grep Host | grep -v HostName | awk '{print $2}' | nl
maxs=$(cat ~/.ssh/config | grep Host | grep -v HostName | awk '{print $2}' | wc -l) # | sed -n '3p' | nl
echo "chose you connetion config(number max $maxs):"
read nums
expr $nums "+" 10 &> /dev/null
if [ $? -ne 0 ];then
echo "$nums not a number or < 0"
exit 1
fi
num=$((nums))
max=$((maxs))
if [ $num -le $max ];then
echo "you chose:$num"
else
echo "$num too large"
exit 1
fi
line=$(cat ~/.ssh/config | grep Host | grep -v HostName | awk '{print $2}' | sed -n "$num p")
echo "connetion to $line..."
ssh $line
文件操作
SCP
Windows也可使用
scp命令用来交换服务器和本地文件
本地复制到远程
scp -P <port> </local/file/path> <username>@<ip>:</remote/dir/path>
可以使用
-r
参数递归复制文件夹从远程服务器到本地
scp -P <port> <username>@<ip>:</remote/file/path> </local/dir/path>
可以使用
-r
参数递归复制文件夹
SFTP
Windows也可使用
先连接到远程服务器
sftp -P <port> <username>@<IP>
进入命令行后则可以传输文件
put <本地文件路径> <远程文件路径,可选>
:将本地文件上传到远程服务器。get <远程文件路径> <本地文件路径,可选>
:从远程服务器下载文件到本地计算机。lcd <本地目录路径>
:更改本地计算机上的当前工作目录。cd <远程目录路径>
:更改远程服务器上的当前工作目录。ls
:列出远程服务器上的文件和目录。lls
:列出本地计算机上的文件和目录。
put
和get
会直接将要传世目录下的文件放到当前目录,可以使用mkdir新建文件夹后再放入文件夹。
命令辅助命令
grep
grep
命令用于在文本中搜索指定模式或字符串
cat file.txt | grep "pattern"
-E
:使用正则表达式
-v
:理想匹配,不显示指定行
awk
awk
可以对文本进行分隔、格式化和处理。你可以使用awk
来提取特定字段、计算总和、过滤数据等。
cat data.txt | awk -F ':' '$3 > 100 {print $1,$2}'
可以进行数学计算等
-F
:选项来指定自定义的字段分隔符。
sed
sed
是一个流编辑器,用于文本处理和替换。它可以自动编辑或转换文本数据。
# 正则替换`/`通过`\/`代替
cat file.txt | sed 's/old_text/new_text/g'
# 删除匹配行
cat data.txt | sed '/pattern/d'
cut
cut
命令用于从文本文件中剪切指定的字段或字符。
# 分割为,输出第一和第三段
cat data.txt | cut -d ',' -f 1,3
# 提取1-5段
cat data.txt | cut -c 1-5
# 提取1-3个字符
cat data.txt | cut -c 1-5
-f
:指定要提取的字段(以字段编号为准,从1开始计数)。-d
:指定字段的分隔符(默认是制表符\t
)。-c
:按字符而不是字段进行剪切。--complement
:剪切指定字段的补集。
sort
sort:
sort
命令用于对文本行进行排序。
cat data.txt | sort
-r
: 倒序
uniq
uniq:
uniq
命令用于从已排序的文本数据中删除重复的行。
cat sorted_data.txt | uniq
tr
tr:
tr
命令用于字符替换和删除。它可以用于字符转换、删除换行符等。
echo "Hello, World!" | tr '[:upper:]' '[:lower:]'
[:alnum:] all letters and digits
[:alpha:] all letters
[:blank:] all horizontal whitespace
[:cntrl:] all control characters
[:digit:] all digits
[:graph:] all printable characters, not including space
[:lower:] all lower case letters
[:print:] all printable characters, including space
[:punct:] all punctuation characters
[:space:] all horizontal or vertical whitespace
[:upper:] all upper case letters
[:xdigit:] all hexadecimal digits
[=CHAR=] all characters which are equivalent to CHAR
进程相关
查看进程
ps -aux
-a
:显示所有进程。-u
:以用户为主要选择标准来显示进程。-x
:显示没有控制终端的进程。
ps -f
ps -ejH
-f
:显示树状结构
-ejH
: 选项可以显示进程树,包括父进程和子进程之间的关系。
ps -u username
-u
:用于显示指定用户的进程信息
ps -C process_name
-C
:根据进程名筛选进程信息
watch ps aux
watch
:实时监控进程信息的变化。
linux 基础命令
read输入
read -p "提示" color
条件循环
if 判断
if [ condition ]; then
echo "true"
else
echo "false"
fi
-eq
:等于-ne
:不等于-gt
:大于-ge
:大于等于-lt
:小于-le
:小于等于-e
:文件存在-d
:目录存在-f
:文件存在且为普通文件-s
:文件存在且大小不为零-r
:文件存在且可读-w
:文件存在且可写-x
:文件存在且可执行-z
:用于检查字符串是否为空-n
:用于检查字符串是否非空
if 也可以用[[ ]]
使用正则,如:
input="1"
if [[ $input =~ ^[0-9]+\$ ]]; then
echo "输入是一个数字"
else
echo "输入不是一个数字"
fi
case匹配
case $color in
red)
echo "这是红色"
;;
green)
echo "这是绿色"
;;
blue)
echo "这是蓝色"
;;
*)
echo "未知颜色"
;;
esac
for循环
fruits=("apple" "orange" "banana")
for fruit in "${fruits[@]}"
do
echo "水果: $fruit"
done
while循环
count=1
while [ $count -le 5 ]
do
echo "当前计数: $count"
((count++))
done
$
符号
$0
表示脚本或命令本身的名称$1
,$2
,$3
, …表示脚本或函数的参数$#
表示传递给脚本或函数的参数个数。$*
和$@
表示所有传递给 脚本或函数的参数。它们的区别在于对待引号的方式。$*
将所有参数当作一个单词,而$@
会将参数分开对待。$?
表示上一个命令的退出状态码。如果上一个命令执行成功,退出状态码为0,否则为非零值。$$
表示当前脚本或命令的进程ID(PID)$!
表示在后台运行的最后一个命令的进程ID$RANDOM
用于生成并返回一个随机数。
$
符号有以下用处
1. 变量引用
$
符号用于引用变量的值。例如:
bashCopy codename="John"
echo "Hello, $name!"
在这个例子中,$name
被替换为变量 name
的值,输出为 “Hello, John!”。
2. 命令替换
$()
或者 (反引号)用于执行命令,并将其结果作为字符串嵌入到其他命令或变量赋值中。例如:
bashCopy codecurrent_date=$(date)
echo "当前日期是:$current_date"
这里 $(date)
执行 date
命令并将其结果赋值给 current_date
变量。
3. 特殊变量
$
符号还用于引用一些特殊变量,如 $0
表示脚本的名称,$1
、$2
等表示脚本或函数的参数。
bashCopy codeecho "脚本名称是:$0"
echo "第一个参数是:$1"
4. 字符串长度
${#variable}
用于获取变量中保存的字符串的长度。
bashCopy codetext="Hello, World!"
echo "字符串的长度是:${#text}"
5. 提取子字符串
${variable:start:length}
用于提取变量中字符串的子字符串。
bashCopy codesentence="The quick brown fox"
echo "子字符串是:${sentence:4:5}"
vim
2. 模式
Vim有不同的工作模式,最常用的有三种:Normal 模式、Insert 模式和 Visual 模式。
- Normal 模式: 默认模式,用于移动光标和执行命令。
- Insert 模式: 用于输入文本。
- Visual 模式: 用于选择文本。
3. 切换模式
- 进入 Insert 模式:在 Normal 模式下按
i
键。 - 进入 Visual 模式:在 Normal 模式下按
v
键。
在 Insert 模式 中按 Esc
键可以返回到 Normal 模式。
4. 移动光标
在 Normal 模式 下使用以下键进行光标移动:
h
:左j
:下k
:上l
:右
5. 编辑文本
在 Normal 模式 下使用以下命令进行文本编辑:
dd
:删除一行yy
:复制一行p
:粘贴u
:撤销Ctrl + r
:重做
6. 保存和退出
在 Normal 模式 下使用以下命令:
:w
:保存:q
:退出:wq
或:x
:保存并退出:q!
:强制退出,不保存
7. 搜索和替换
在 Normal 模式 下使用以下命令:
/pattern
:向下搜索文本?pattern
:向上搜索文本:s/old/new/g
:替换所有匹配的字符串
8. 其他常用命令
:help
:获取帮助:set number
:显示行号:set nonumber
:隐藏行号:q
:退出:q!
:强制退出,不保存:wq
或:x
:保存并退出
防火墙
开启与关闭
CentOS
systemctl start firewalld.service #开启
systemctl unmask firewalld.service #开启失败可能需要先解锁服务
systemctl stop firewalld.service #关闭
firewall-cmd --reload #重启
systemctl disable firewalld.service #禁用防火墙
service network restart #重启网卡
Ubuntu
sudo ufw status #查看防火墙状态
sudo ufw status verbose #更多详细情况
sudo ufw enable #开启防火墙
sudo ufw disable #关闭防火墙
sudo ufw version #查看防火前版本
sudo ufw default allow #默认允许外部访问本机
sudo ufw default deny #拒绝外部访问本机
sudo ufw allow 53 #允许外部访问53端口
sudo ufw deny 53 #拒绝外部访问53端口
sudo ufw allow from 192.168.0.1 #允许某个IP地址访问本机所有端口
sudo ufw status numbered # 输出防火墙规则包括其id(id永远从1开始)
sudo ufw delete 1 #删除id为1的规则
sudo ufw delete allow 8080 #删除8080端口规则
sudo ufw reset #重置防火墙
查看防火墙
systemctl status firewalld.service #防火墙状态
firewall-cmd --list-all #查看防火墙开放端口
防火墙端口开放与关闭
firewall-cmd --permanent --add-port=3306/tcp #开启3306端口,重启后生效
firewall-cmd --reload #重启
firewall-cmd --remove-port=3306/udp --permanent #关闭端口
进程
后台运行脚本
nohup test.sh > nohup.out 2>&1 &
>nohup.out
指的是输出到nohup.out
也可输出到 /dev/null
/dev/null 永远都是空的。
若将>nohup.out
换成 >>nohup.out
则是追加模式,不会覆盖原内容。
通过名称查询进程
ps -aux | grep 名称 |grep -v grep
grep -v grep
是排除当前命令
结束进程
kill -9 process_id
以上命令就可以构成简单的脚本
kill_pid=$(ps -aux | grep openfire |grep -v grep | awk '{print $2}') #查询pid
kill -9 kill_pid #杀掉进程
端口
端口的开放与关闭
查看端口占用
lsof
lsof -i:端口号
netstat
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
netstat 查看端口占用语法格式:
netstat -tunlp | grep 端口号
- -t (tcp) 仅显示tcp相关选项
- -u (udp)仅显示udp相关选项
- -n 拒绝显示别名,能显示数字的全部转化为数字
- -l 仅列出在Listen(监听)的服务状态
- -p 显示建立相关链接的程序名
最后编辑:dbin 更新时间:2024-04-09 14:06