30 篇文章带有标签 “shell”

Copilot for CLI

Copilot for CLI

GitHub CLI

在 macOS 安装 GitHub CLI

  • 安装
brew install gh
  • 升级
brew upgrade gh
  • 登录
gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser

! First copy your one-time code: EA2E-F864
Press Enter to open github.com in your browser... 
✓ Authentication complete.
  • 查看登录状态
gh auth status
github.com
  ✓ Logged in to github.com account wang-junjian (keyring)
  - Active account: true
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo', 'workflow'

macOS 下的 __MACOSX 目录和 .DS_Store 文件

.DS_Store 文件

.DS_Store 是 Desktop Services Store 的缩写。

.DS_Store 是 macOS 操作系统中隐藏的文件,它存储有关文件夹的元数据,例如文件夹中的文件位置、文件夹的显示选项和自定义图标等信息。这些元数据是用来帮助操作系统更快地显示文件夹中的内容,并记住用户的偏好设置。这些文件只是本地的,不会在网络文件共享时传输,因此不会影响其他操作系统用户。

__MACOSX 目录

当你在 Mac 电脑上创建一个压缩文件时,系统会自动在压缩文件中添加一个名为 __MACOSX 的目录。该目录包含了 Mac 操作系统专有的一些文件,如 .DS_Store 等。这些文件不会对压缩文件的解压缩造成影响,但它们可能会在其他操作系统上解压缩时出现问题,例如在 Windows 上解压缩时可能会显示 __MACOSX 目录或 .DS_Store 文件。为了避免这种情况,你可以在创建压缩文件时选择不包含 Mac 专有文件,或者在解压缩时手动删除 __MACOSX 目录和 .DS_Store 文件。

删除 __MACOSX 目录和 .DS_Store 文件 方法一 find . -name '__MACOSX' -exec rm -rf {} ; -o -name '.

讯飞星火测试

Spark Desk 是讯飞星火认知大模型的英文名称。

👍零样本分类

❓ “这个手机的功能不好用”这是好评还是差评?
💬 这个手机的功能不好用,是差评。

👎少样本分类

❓ 电脑:3C;手机:3C;铅笔:
💬 3C;

👍英语语法更正

❓ Correct this to standard English:

She no went to the market.
💬 She did not go to the market.

ChatGPT 还会解释语法的问题

👍翻译

英译中

❓ What rooms do you have available? 翻译成中文
💬 你有哪些房间可用?

中译英

❓ 您好,您想要预订哪些房型呢?翻译成英文
💬 Hello, which room type would you like to book?

👍阅读理解 ❓ 北京市卫生健康委副主任、新闻发言人李昂通报:4月18日下午,长峰医院突发火情,市卫生健康委即刻启动应急预案,迅速调集29辆救护车300余人次急救力量,及时赶赴现场,全力开展医疗救援和转运工作。截至当日15时30分,共转运伤员71名,分别送至解放军总医院第一医学中心、解放军总医院第五医学中心南、北院区、北京世纪坛医院、航天中心医院、电力医院、玉泉医院、丰台区医院、右安门医院等9家医疗机构救治。涉灾病房楼其余住院患者均已妥善安置。

命令 alias

zsh 中使用单引号('),不对特殊符号进行解析,使用双引号(")会对特殊符号进行解析,如:$

docker rmi none

alias docker.rmi.none='docker rmi --force $(docker images -q --filter "dangling=true")'

在终端通过 Safari 打开网址

alias open.chatgpt='open -a Safari https://platform.openai.com/playground\?mode\=chat'

命令curl

下载文件

下载单个文件

curl http://book.d2l.ai/_images/catdog.jpg -o catdog.jpg

下载多个文件

curl https://download.01.org/opencv/2021/openvinotoolkit/2021.1/open_model_zoo/models_bin/1/face-detection-retail-0004/FP32/face-detection-retail-0004.xml https://download.01.org/opencv/2021/openvinotoolkit/2021.1/open_model_zoo/models_bin/1/face-detection-retail-0004/FP32/face-detection-retail-0004.bin -o face-detection-retail-0004.xml -o face-detection-retail-0004.bin

下载文件并创建目录 curl --create-dirs https://download.01.org/opencv/2021/openvinotoolkit/2021.

命令 nc

捕获 HTTP 请求的内容

  1. 监听端口,用于捕获数据。
nc -l port 
  1. 发送 HTTP 请求。
curl http://ip:port/

GET 请求

curl http://127.0.0.1:8000/
GET /?name=wjj HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: curl/7.61.1
Accept: */*

POST JSON 请求

curl --location --request POST 'http://127.0.0.1:8000/users_by_json' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "wjj",
    "age": 40
}'
POST /users_by_json HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: curl/7.61.1
Accept: */*
Content-Type: application/json
Content-Length: 36

{
    "name": "wjj",
    "age": 40
}

我删库了, rm -rf *

今天,我“删库”了......

/data$ ll logs/
rm -rf *

我在根目录查看子目录的信息,确认是想删除的数据,然后顺手执行了 rm -rf * ,杯具产生了......

拼命补救,没成功......

查看目录或文件的 inode id

$ ls -id /
2 /

$ ls -id /usr/
28966913 /usr/

$ ls -id /usr/bin/bash
28967390 /usr/bin/bash

参考资料

Json Formatter

test.json

{ "stuff": { "that": [1,2,3], "isin": true, "json": "end"}}

jq

在命令行运行

jq . <<< '{ "stuff": { "that": [1,2,3], "isin": true, "json": "end"}}'
jq . test.json

在vim的命令模式下运行

%!jq .

python json.tool

在命令行运行

python -m json.tool <<< '{ "stuff": { "that": [1,2,3], "isin": true, "json": "end"}}'
python -m json.tool test.json

在vim的命令模式下运行

%!python -m json.tool

在线格式化 Format JSON JSON Formatter JSON Formatter, Validator, Vi

命令tr

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            126G     0  126G   0% /dev
tmpfs            26G  4.0M   26G   1% /run
/dev/sda2       548G   50G  471G  10% /
tmpfs           126G     0  126G   0% /sys/fs/cgroup
/dev/sda1       511M  7.9M  504M   2% /boot/efi
/dev/sdb1       2.0T  4.7G  1.9T   1% /data

字母小写转大写

$ df -h | tr [:lower:] [:upper:]
FILESYSTEM      SIZE  USED AVAIL USE% MOUNTED ON
UDEV            126G     0  126G   0% /DEV
TMPFS            26G  4.0M   26G   1% /RUN
/DEV/SDA2       548G   50G  471G  10% /
TMPFS           126G     0  126G   0% /SYS/FS/CGROUP
/DEV/SDA1       511M  7.9M  504M   2% /BOOT/EFI
/DEV/SDB1       2.0T  4.7G  1.9T   1% /DATA
$ df -h | tr a-z A-Z

字母大写转小写

$ df -h | tr [:upper:] [:lower:]
$ df -h | tr A-Z a-z

OpenResty 内执行 Lua 脚本

OpenResty 是一款基于 NGINX 和 LuaJIT 的 Web 平台。

拉取 OpenResty 镜像

  • Ubuntu
sudo docker pull openresty/openresty:xenial
  • CentOS
sudo docker pull openresty/openresty:centos

查看镜像的标签 $ sudo docker inspect openresty/openresty:centos | jq '.[].Config.Labels' { "maintainer": "Evan Wies <evan@neomantra.net>", "org.label-schema.build-date": "20210915", "org.label-schema.license": "GPLv2", "org.label-schema.name": "CentOS Base Image", "org.label-schema.schema-version": "1.0", "org.label-schema.

命令lftp

安装 lftp

sudo apt-get -y install lftp

登录 FTP

lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]

lftp -p 8821 -u sdlrzn download.cambricon.com

执行内部命令

查看 FTP 服务器目录内容

ls

下载文件

get /product/GJD/MLU270/1.7.604/Ubuntu18.04/Driver/neuware-mlu270-driver-dkms_4.9.8_all.deb

下载目录

mirror remote local

mirror MLU270 MLU270

执行本地系统命令

local pwd
local ls
local rm -r MLU270

参考资料

远程执行Shell命令

安装 Fabric

pip3 install fabric

远程执行 Shell 命令脚本(remote_execute_shell_command.py) #!/usr/bin/python import argparse from fabric import Connection, Config # 您要远程操作的计算机,username@ip HOSTS = ['root@192.168.0.1', 'root@192.168.0.2'] PASSWORDS = ['admin', 'admin'] if name == 'main': parser = argparse.ArgumentParser() parser.add_argument('-c', '--command', type=str, help='execute shell command.') args = parser.parse_args() if not args.command: args.command = 'uname -a' print('➜ Execute shell command: ', args.

命令man help info

man

manual 的缩写。在线参考手册的接口

  • man man
......
    下表显示了手册的 章节 号及其包含的手册页类型。

    1   可执行程序或 shell 命令
    2   系统调用(内核提供的函数)
    3   库调用(程序库中的函数)
    4   特殊文件(通常位于 /dev)
    5   文件格式和规范,如 /etc/passwd
    6   游戏
    7   杂项(包括宏包和规范,如 man(7),groff(7))
    8   系统管理命令(通常只针对 root 用户)
    9   内核例程 [非标准]
......
  • 查看指定章节
man 7 man
man man.7
  • 寻找所有匹配(-a, --all 寻找所有匹配的手册页)
man -a passwd
--Man-- 下一页: passwd(5) [ 查看 (return) | 跳过 (Ctrl-D) | 退出 (Ctrl-C) ]

help

shell 自带的命令为内部命令,其它的为外部命令。

  • 内部命令使用 help
help cd
cd --help
  • 外部命令使用 help
ls --help

type 查看内部命令还是外部命令

$ type cd
cd 是 shell 内建
$ type ls
ls 是 `ls --color=auto' 的别名
$ type curl
curl 是 /usr/bin/curl

builtin 查看所有内部命令 man builtin bash,

AI 模型打包发布

工程目录

model-package-release/
├── Dockerfile
├── Dockerfile.ubuntu
├── main.sh
└── .ssh
    ├── id_rsa
    ├── id_rsa.pub
    └── known_hosts

main.sh #!/usr/bin/sh # 模型和配置文件 FILE_CONFIG=config.yaml FILE_MODEL=model.onnx # 用于构建模型压缩包的目录结构 DIR_MODELS=models if [ -z $1 ] then echo "Usage: " echo "Environment variable:" echo " MODEL_SERVER_USERNAME Default: username" echo " MODEL_SERVER_IP Default: ip" echo "" echo "docker run --rm -v /home/ai/models/sign.yaml:/app/config.yaml \" echo " -v /home/ai/models/sign.onnx:/app/model.

AI 数据集打包发布

数据集打包目录结构

ai-project/
├── labelimg
│   ├── 1.jpg
│   ├── 1.xml
│   ├── 2.jpg
│   ├── 2.xml
│   ├── 3.jpg
│   ├── 3.xml
│   ├── 4.jpg
│   └── 4.xml
├── classes.txt
├── data.yaml
├── images
│   ├── train
│   │   ├── 1.jpg
│   │   └── 2.jpg
│   └── val
│       ├── 3.jpg
│       └── 4.jpg
└── labels
    ├── train
    │   ├── 1.txt
    │   └── 2.txt
    └── val
        ├── 3.txt
        └── 4.txt

打包

DATE=$(date '+%Y-%m-%d')
tar cvf sign-yolo-$DATE.tar labelimg/ classes.txt images/ labels data.yaml

上传数据集服务器

DATASET_SERVER_PATH=username@ip:/data/datasets
scp sign-yolo-$DATE.tar $DATASET_SERVER_PATH

命令base64

编码

macOS

base64 file

Linux

-w, --wrap=COLS wrap encoded lines after COLS character (default 76). Use 0 to disable line wrapping

base64 -w0 file

解码

base64 -d

问题

YWRtaW4=admin 的 base64 编码。

  • 解码(正确,这里之所以正确是因为base64过滤了。)
$ echo 'YWRtaW4=' | base64 -d
admin[username@hostname ~]$
  • 编码(错误,这是因为 echo 输出字符后会在后面再输出换行符。)
$ echo 'admin' | base64
YWRtaW4K

解决方案

  • 方法一:使用 printf 命令。
$ printf 'admin' | base64
YWRtaW4=
  • 方法二:可以通过参数 -n 告诉 echo 不输出换行符。
$ echo -n 'admin' | base64
YWRtaW4=
  • 方法三:可以通过参数 -e 告诉 echo 启用反斜杠转义的解释。
$ echo -e 'admin\c' | base64
YWRtaW4=

可用的转义符(来自 man echo): - \ backslash - \a alert (BEL) - \b backspace - \c produce no further output - \e escape - \f form feed - \n new line - \r carriage return - \t horizontal tab - \v vertical tab - \0NNN byte with octal value NNN (1 to 3 digits) - \xHH byte with hexadecimal value HH (1 to 2 digits)

Linux Shell 实践

快捷键

  • Ctrl+r 快速查找历史命令
  • Ctrl+l 清理控制台屏幕

移动光标

  • Ctrl+a 移动光标到行首
  • Ctrl+e 移动光标到行尾
  • Alt+Left Arrow 移动光标到上一个单词
  • Alt+Right Arrow 移动光标到下一个单词

删除字符

  • Ctrl+u 删除光标之前的内容
  • Ctrl+k 删除光标之后的内容
  • Ctrl+w 删除光标前面的一个单词

进程

  • Ctrl+d 退出。等同于exit命令
  • Ctrl+z 当前运行的程序后台运行。如果一步到位,可以在命令后面加 &

重定向

  • 执行时的错误信息输出到文件(2>)
hello 2> log.error
$ cat log.error 
-bash: hello: 未找到命令
  • 执行时的所有信息都输出到文件(&>)
echo hello &> log.info
$ cat log.info 
hello
  • 创建一个文件并写入内容(> filename <<EOF)
cat > hello.sh << EOF
#!/bin/bash
echo hello
EOF

变量

变量赋值

  • 执行结果保存到变量($() ``)
var1=$(pwd)
var2=`pwd`
  • 整数四则运算(let)
let n=10-3+4/2
echo $n
9

变量引用 ${var} 大部分情况可省略为

Linux Shell 执行方式

在当前shell下一行执行多条命令(;)

cd /etc/ssh ; cat ssh_config ; pwd ; du -sh /etc/ssh/ssh_config

创建shell脚本

vim ssh_config-info.sh
#!/bin/bash
cd /etc/ssh
cat ssh_config
pwd
du -sh /etc/ssh/ssh_config

shell脚本执行方式

bash ssh_config-info.sh

  • 创建子进程执行脚本
bash ssh_config-info.sh
$ pwd
/root

./ssh_config-info.sh

  • 需要执行权限
chmod u+x ssh_config-info.sh
  • 使用脚本文件中第一行#!指定的shell创建子进程执行脚本
./ssh_config-info.sh
$ pwd
/root

source ssh_config-info.sh

  • 在当前shell进程中执行,会对当前shell产生影响
source ssh_config-info.sh
$ pwd
/etc/ssh

. ssh_config-info.sh

  • 在当前shell进程中执行,会对当前shell产生影响(.相当于source)
. ssh_config-info.sh
$ pwd
/etc/ssh