记录一些简单我又记不住的linux命令的使用方法

服务器交互

SSH

Windows也可使用

  1. 连接到服务器

    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命令用来交换服务器和本地文件

  1. 本地复制到远程

    scp -P <port> </local/file/path> <username>@<ip>:</remote/dir/path>

    可以使用-r参数递归复制文件夹

  2. 从远程服务器到本地

    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:列出本地计算机上的文件和目录。

putget会直接将要传世目录下的文件放到当前目录,可以使用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  创建时间:2023-12-15 19:51
最后编辑:dbin  更新时间:2024-04-09 14:06