Contents

Ubuntu常用命令

将文件A的内容写入到文件B中

  • cat A > B (追加的话, > 改成 >>)

  • sed -n ‘w B’ A

  • 效率对比

1
2
3
start=$(date +%s%N) && cat /tmp/784-35445384-1692024995-complete.json >> test.log && end=$(date +%s%N) && echo $((($end - $start) / 1000000))

start=$(date +%s%N) && sed -n 'w test.log' /tmp/784-35445384-1692024995-complete.json && end=$(date +%s%N) && echo $((($end - $start) / 1000000))
https://static.duan1v.top/images/20230816115547.png

查找内容

pattern和regex

Pattern
  • pattern指基本正则表达式(Basic Regular Expression,BRE)
  • pattern 是一种简化的正则表达式语法,通常用于基本的模式匹配。
  • pattern 可以包含普通字符、通配符和一些特殊字符,如 .、*、? 等。
  • pattern 不支持高级的正则表达式特性,如分组 ( )、选择符 |、定位符 ^ 和 $ 等。
Regex
  • regex 指扩展正则表达式(Extended Regular Expression,ERE)
  • regex 是正则表达式的完整语法,支持更广泛的模式匹配和高级特性。
  • regex 可以使用普通字符、元字符、量词、字符类、分组、引用等来定义复杂的模式。
  • regex 支持在模式中使用特殊字符和元字符进行更精确的匹配和操作。

vim test

1
2
3
4
5
6
7
8
John Doe 25 8900
Jane Smith 30 6200
David Johnson 23 3500
Mia Nguyen 56 4200
Mohammed Ali 45 5800
Olivia Kim 40 2300
Olivia Ali 34 550
David Kim 36 6000

grep

  • 示例
1
2
grep -i -n "d" test
grep -i -n -E "6$" test
https://static.duan1v.top/images/20230821093233.png
Tips
  • 使用 -E 选项可以启用regex,否则只支持pattern;
  • 使用 -n 选项可以在输出结果中显示匹配行的行号;
  • 使用 -i 选项可以忽略搜索时的大小写区分;
  • 使用 -r 选项可以递归搜索指定目录及其子目录中的文件。

awk

  • 示例
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
awk '{print}' test
awk '{print $2}' test
awk '{sum += $3} END {print sum}' test
awk '$3 > 40 {print}' test
awk '$3 > 40 { if (counter < 1) { print; counter++ } }' test # 只取满足条件的第一行
awk -F'o' '{print $1"-"$2}' test
awk '{if ($3 > 30) print "Large"; else print "Small"}' test
awk '{sum = 0; for (i = 3; i <= NF; i++) sum += $i; print sum}' test
awk '/^O/ {print}' test
awk '{gsub(/O|o/, "H"); print}' test # 将O或o,替换为H
https://static.duan1v.top/images/20230821100530.png
参考

新增SFTP用户

示例

  • 添加用户
1
2
3
4
sudo addgroup sftp_test_group
sudo useradd -g sftp_test_group -m sftp_test_user1
# 键入密码,生成密码:https://www.sexauth.com/
sudo passwd sftp_test_user1
https://static.duan1v.top/images/20230821111222.png
  • 可能用到的根据用户查询组内其他用户
1
2
3
groups sftp_test_user1
getent group sftp_test_group
awk -F":" '{print $1"|"$4}' /etc/passwd | grep -n -E "\|1003$"
https://static.duan1v.top/images/20230821111438.png
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo vim /etc/ssh/sshd_config
# 追加以下选项
AllowUsers sftp_test_user1
Match User sftp_test_user1
ChrootDirectory /var/sftp/sftp_test_user1
ForceCommand internal-sftp

sudo mkdir /var/sftp/sftp_test_user1
sudo chown -R sftp_test_user1:sftp_test_group /var/sftp/sftp_test_user1

sudo service ssh restart

当前有这样的问题,客户通过sftp上传文件,项目页面上需要立即看到,并且进行读取和移动操作

  • 问题是权限冲突,一个sftp的根目录的绝对路径上的所有文件夹必须是属于 root的,一个是项目文件夹的路径必须是属于web服务器用户的,比如www-data

  • 解决方法,先创建目录,sftp根目录为 /var/www/project_sftp_test/project_scan/,页面上显示 in 文件夹中的文件

1
2
3
4
sudo mkdir -p /var/www/project_sftp_test/project_scan/in
sudo mkdir /var/www/project_sftp_test/project_scan/out
sudo chown -R root:root /var/www/project_sftp_test/project_scan
sudo chmod -R 755 /var/www/project_sftp_test/project_scan
  • 创建project_scan_test用户,设置主分组为www-data,副分组为project_sftp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
sudo addgroup project_sftp
sudo useradd -g www-data -m project_scan_test
sudo usermod -aG project_sftp project_scan_test
# 更改主账户分组
# sudo usermod -g www-data project_scan_test
# 查看分组
# groups project_scan_test

# 输入密码
sudo passwd project_scan_test

# 修改in 和 out文件夹所属 及 777权限
sudo chown -R project_scan_test:www-data /var/www/project_sftp_test/project_scan
sudo chmod -R 777 /var/www/project_sftp_test/project_scan
sudo chown root:root /var/www/project_sftp_test/project_scan
sudo chmod 755 /var/var/www/project_sftp_test/project_scan
  • 编辑ssh 配置,使用权限掩码,使上传的文件默认都是 660权限,加上之前的主分组为www-data,解决了网页操作的权限问题
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo vim /etc/ssh/sshd_config

# 追加以下内容
AllowUsers ubuntu project_scan_test project_scan
AllowGroups ubuntu project_sftp

Match User project_scan_test
ChrootDirectory /var/www/project_sftp_test/project_scan/
# -u 006 是权限掩码
ForceCommand internal-sftp -u 006
coffee