============
== 白菜 ==
============
一个勤奋的代码搬运工!

Linux 常用命令

Shell脚本 linux

Linux 常用命令

日期

$(date -d '1 day ago' '+%Y-%m-%d')

常用方法

数字格式化

part=`printf "%03d" $i` # 左补0

删除旧文件

# 找出5天前修改的文件名以.tar结尾的文件进行删除
find /www/backup -mtime +5 -name "*.tar"  |xargs rm

for循环

for ((i=0;i<10;i++))
do
_date=$(date +%Y-%m-%d -d "${i} day")
echo $_date
done
#
for i in {1..10}
do
        echo $i
done

文件合并

find ./ -name "item*" | xargs sed 'a\' > all.txt
find ./ -name "item*" | xargs cat > all.txt
:s/old/new           #替换当前行的第一个old为new
:s/old/new/g         #替换当前行的所有的old为new
:.,$s/old/new        #替换当前行到最后行的第一个old为new
:.,$s/old/new/g      #替换当前行到最后行的所有old为new
:N,Ms/old/new        #替换第N行到第M行的第一个old为new
:N,Ms/old/new/g      #替换第N行到第M行的所有old为new
:N,Ms/old/new/gc     #替换第N行到第M行的所有old为new,且逐一询问是否删除
:%s/old/new          #替换所有行的第一个old为new
:%s/old/new/g        #替换所有行的所有old为new

文件排序、交集、并集、差集

#排序
sort a.txt |uniq -c
#一、交集
sort a.txt b.txt | uniq -d
#二、并集
sort a.txt b.txt | uniq
#三、差集 a.txt-b.txt:
sort a.txt b.txt b.txt | uniq -u
#差集 b.txt - a.txt:
sort b.txt a.txt a.txt | uniq -u

删除重复行

sort -k2n all.txt | uniq > real.out
sort -k2n all.txt | awk '{if ($0!=line) print;line=$0}'
sort -k2n all.txt | sed '$!N; /^\(.*\)\n\1$/!P; D'

删除空格

cat all.txt |sed s/[[:space:]]//g

awk 去重

awk '!($1 in a){a[$1];print $1}'
#或
sort $1 | uniq 
# awk结果使用逗号间隔拼接
awk -F ',' '{print $1}' | xargs | tr ' ' ','

常用状态查看

# 按CPU和内存倒序前n个进程
ps -aux --sort -pcpu,+pmem | head -n 5
# 按进程名查看
ps -f -C java

文件同步rsync

rsync -zvrtopgl --progress --delete /fromDist/ root@s1:/toDist/

链接状态统计

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
# TCP连接状态详解 
# LISTEN: 服务器在侦听来自远方的TCP端口的连接请求
# SYN-SENT: 在发送连接请求后等待匹配的连接请求
# SYN_RECV: 一个连接请求已经到达,等待确认
# SYN-RECEIVED: 再收到和发送一个连接请求后等待对方对连接请求的确认
# ESTABLISHED: 代表一个打开的连接/正常数据传输状态/当前并发连接数
# FIN_WAIT1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认/应用说它已经完成
# FIN_WAIT2: 从远程TCP等待连接中断请求/另一边已同意释放
# CLOSE-WAIT: 等待从本地用户发来的连接中断请求
# CLOSING: 等待远程TCP对连接中断的确认/两边同时尝试关闭
# LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认/等待所有分组死掉
# TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认/另一边已初始化一个释放
# ITMED_WAIT:  等待所有分组死掉
# CLOSED: 没有任何连接状态

CPU/内存/系统信息查看

# cpu
grep "model name" /proc/cpuinfo 
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cat /proc/cpuinfo | grep physical | uniq -c
# cpu位数
echo $HOSTTYPE
# 内存
grep MemTotal /proc/meminfo 
# linux 版本
cat /etc/redhat-release
cat /etc/os-release
cat /etc/lsb-release
# linux 内核版本
uname -a 
uname -r

常用监控工具

# 网络监控
iftop
# IO监控
iotop
# 负载监控
htop
top

进程监控

pidstat -p 843 1 3 -u -t
# -u:代表对 CPU 使用率的监控
# 参数 1 3 代表每秒采样一次,一共三次
# -t:将监控级别细化到线程

ssh相关

# 秘钥生成
ssh-keygen -t rsa -b 4096 -C "your_hostname"
# 免密登录
cat ~/.ssh/id_rsa.pub | ssh  root@ip "cat >> .ssh/authorized_keys"

firewalld防火墙使用

# 禁止ping
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
# 允许192.168.1.0/24主机所有连接
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0" accept'
# 禁止某IP访问
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address='123.56.247.76/24' reject"
# 开放端口
firewall-cmd --zone=public --permanent --add-port=8080/tcp
firewall-cmd --reload

文件统计

ls -g |awk 'BEGIN{sum=0}{sum+=$4}END{print sum/(1024*1024*1024)}'

history格式及数量修改

export HISTSIZE=10000
export HISTTIMEFORMAT=" %Y-%m-%d %H:%M:%S - `who am i 2>/dev/null | awk '{print $NF}'|sed -e 's/[()]//g'` - `who -u am i |awk '{print $1}'` "
export PROMPT_COMMAND="history 1 >> /var/log/.myhistory" #将命令记录输出到文本中
touch /var/log/.myhistory
chmod  /var/log/.myhistory

awk 分析 nginx 运行日志常用指令

Shell脚本 awk

awk 分析 nginx 运行日志常用指令

1.独立IP

awk '{print $1}' access.log | sort -r |uniq -c | wc -l

2.统计PV

awk '{print $6}' access.log | wc -l

3.查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

4.查询访问最频繁的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

5.UV统计:

awk '{print $6}' access.log | sort -r |uniq -c |wc -l

6.按小时统计

cat access.log |awk '{print $4}' | awk -F ':' '{print $1,$2}'|uniq -c | awk '{print $2" "$3" "$1}'

TOML 语言规范 1.0 正式版

TOML Rust

👉 TOML 语言广泛用于 Rust 项目当中,cargo new 一个新项目时都会新建一个 toml 的配置文件,所以学习 Rust 过程中也有必要熟悉 TOML 语言的相关语法,从而熟练在 Rust 项目中编辑配置文件。

👉 本文来自 toml-lang 的中文翻译版本,本文收录在此处,只是方便 Rust 学习者统一查阅,若是发现有任何错误或需要完善地方,请在 toml.io 原项目仓库指出或修改错误。

TOML v1.0.0

全称:Tom 的(语义)明显、(配置)最小化的语言。(Tom’s Obvious, Minimal Language)
作者:Tom Preston-Werner、Pradyun Gedam 等人。

宗旨

TOML 旨在成为一个语义明显且易于阅读的最小化配置文件格式。
TOML 被设计成可以无歧义地映射为哈希表。
TOML 应该能很容易地被解析成各种语言中的数据结构。

目录

规格

  • TOML 是大小写敏感的。
  • TOML 文件必须是合法的 UTF-8 编码的 Unicode 文档。
  • 空白是指制表符(0x09)或空格(0x20)。
  • 换行是指 LF(0x0A)或 CRLF(0x0D0A)。

注释

井字符将该行余下的部分标记为注释,除非它在字符串中。

Read more...

塔防游戏-YORG.io

多人联机 塔防 网页游戏 Tower Defense

塔防游戏

可玩性很高的一款塔防游戏,需要各类元素合成,通过传送带传送宝石、木材、铁等元素,最后合成弓箭、大炮、闪电塔等来抵御怪兽的袭击,一玩就停不下来。

传送门 https://yorg.io/

玩法

通过传送带传送宝石、木材、铁等元素,最后合成弓箭、大炮、闪电塔等来抵御怪兽的袭击

网页版红色警戒2-Red Alert 2: Chrono Divide

多人联机 红警2 网页游戏

在线红警

又是一波人的集体回忆。。。网站高度还原了经典游戏——红色警戒2,原汁原味的画面和音效,仿佛又回到了那个电脑房的年代!

传送门 https://game.chronodivide.com/

玩法

网站支持多人在线对战,注册登陆后即可开始!

Goproxy

技术分享 Golang Goproxy

Go Module代理仓库服务

七牛云提供的:https://goproxy.cn

goproxy.io:https://goproxy.io 或 https://proxy.golang.com.cn

百度云BOS提供的:https://goproxy.bj.bcebos.com/

阿里云提供的:https://mirrors.aliyun.com/goproxy/

下载 Go 镜像(Golang Downloads Mirrors)

官网:https://go.dev/

下载 Go 镜像:https://golang.google.cn/

下载 Go 镜像:https://gomirrors.org/

下载 Go 镜像:https://studygolang.com/dl

使用开源工具进行 Linux 内存取证

linux 内存取证 Volatility LiME insmod

利用 Volatility 找出应用程序、网络连接、内核模块、文件等方面的情况。

计算机的操作系统和应用使用主内存(RAM)来执行不同的任务。这种易失性内存包含大量关于运行应用、网络连接、内核模块、打开的文件以及几乎所有其他的内容信息,但这些信息每次计算机重启的时候都会被清除。

内存取证是一种从内存中找到和抽取这些有价值的信息的方式。Volatility 是一种使用插件来处理这类信息的开源工具。但是,存在一个问题:在你处理这些信息前,必须将物理内存转储到一个文件中,而 Volatility 没有这种能力。

因此,这篇文章分为两部分:

  • 第一部分是处理获取物理内存并将其转储到一个文件中。
  • 第二部分使用 Volatility 从这个内存转储中读取并处理这些信息。

我在本教程中使用了以下测试系统,不过它可以在任何 Linux 发行版上工作:

$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.3 (Ootpa)
$
$ uname -r
4.18.0-240.el8.x86_64
$
注意事项: 部分 1 涉及到编译和加载一个内核模块。不要担心:它并不像听起来那么困难。

一些指南:

    按照以下的步骤。
    不要在生产系统或你的主要计算机上尝试任何这些步骤。
    始终使用测试的虚拟机(VM)来尝试,直到你熟悉使用这些工具并理解它们的工作原理为止。

安装需要的包

在开始之前安装必要的工具。如果你经常使用基于 Debian 的发行版,可以使用 apt-get 命令。这些包大多数提供了需要的内核信息和工具来编译代码:

$ yum install kernel-headers kernel-devel gcc elfutils-libelf-devel make git libdwarf-tools python2-devel.x86_64-y

部分 1:使用 LiME 获取内存并将其转储到一个文件中

在开始分析内存之前,你需要一个内存转储供你使用。在实际的取证活动中,这可能来自一个被破坏或者被入侵的系统。这些信息通常会被收集和存储来分析入侵是如何发生的及其影响。由于你可能没有可用的内存转储,你可以获取你的测试 VM 的内存转储,并使用它来执行内存取证。

Linux 内存提取器(LiME)是一个在 Linux 系统上获取内存很常用的工具。使用以下命令获得 LiME:

Read more...

使用 sed 命令进行复制、剪切和粘贴

sed linux Mac GNU sed

很少有 Unix 命令像 sed、grep 和 awk 一样出名,它们经常组合在一起,可能是因为它们具有奇怪的名称和强大的文本解析能力。它们还在一些语法和逻辑上有相似之处。虽然它们都能用于文本解析,但都有其特殊性。本文研究 sed 命令,它是一个 流编辑器。

安装 sed

如果你使用的是 Linux、BSD 或 macOS,那么它们已经安装了 GNU 的或 BSD 的 sed。这些是原始 sed 命令的独特重新实现。虽然它们很相似,但也有一些细微的差别。本文已经在 Linux 和 NetBSD 版本上进行了测试,所以你可以使用你的计算机上找到的任何 sed,但是对于 BSD sed,你必须使用短选项(例如 -n 而不是 –quiet)。

GNU sed 通常被认为是功能最丰富的 sed,因此无论你是否运行 Linux,你可能都想要尝试一下。如果在 Ports 树中找不到 GNU sed(在非 Linux 系统上通常称为 gsed),你可以从 GNU 网站 下载源代码。 安装 GNU sed 的好处是,你可以使用它的额外功能,但是如果需要可移植性,还可以限制它以遵守 sed 的 POSIX 规范。

MacOS 用户可以在 MacPorts 或 Homebrew 上找到 GNU sed。

在 Windows 上,你可以通过 Chocolatey 来 安装 GNU sed。

Read more...

Swift语法全面解析

swift 语法基础 编程学习 ios

Swift介绍

Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。 swift 是一种安全,快速和互动的编程语言。 swift 支持代码预览(playgrounds),这个特性可以允许程序员在不编译和运行应用程序的前提下运行 Swift 代码并实时查看结果。

Swift 通过采用现代编程模式来避免大量常见编程错误:

  • 变量始终在使用前初始化。
  • 检查数组索引超出范围的错误。
  • 检查整数是否溢出。
  • 可选值确保明确处理 nil 值。
  • 内存被自动管理。
  • 错误处理允许从意外故障控制恢复。

基础部分

常量和变量

声明常量和变量, 常量和变量必须在使用前声明,使用 let 来声明常量,使用 var 来声明变量。 示例:

let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0

// 类型注解
var welcomeMessage: String

注释

单行注释双正斜杠(//), 多行注释(/* 多行的 */)。Swift 的多行注释可以嵌套在其它的多行注释之中。 示例:

// 这是一个注释

/* 这也是一个注释,
但是是多行的 */

/* 这是第一个多行注释的开头
/* 这是第二个被嵌套的多行注释 */
这是第一个多行注释的结尾 */

分号

Swift 并不强制要求你在每条语句的结尾处使用分号(;)。 同一行内写多条独立的语句必须用分号分隔。

Read more...

使用 Golang 的交叉编译

Golang 编程学习

在 Linux 上测试软件时,我使用各种架构的服务器,例如 Intel、AMD、Arm 等。当我 分配了一台满足我的测试需求的 Linux 机器[1],我仍然需要执行许多步骤:

  • 下载并安装必备软件
  • 验证构建服务器上是否有新的测试软件包
  • 获取并设置依赖软件包所需的 yum 仓库
  • 下载并安装新的测试软件包(基于步骤 2)
  • 获取并设置必需的 SSL 证书
  • 设置测试环境,获取所需的 Git 仓库,更改配置,重新启动守护进程等
  • 做其他需要做的事情

用脚本自动化

这些步骤非常常规,以至于有必要对其进行自动化并将脚本保存到中央位置(例如文件服务器),在需要时可以在此处下载脚本。为此,我编写了 100-120 行的 Bash shell 脚本,它为我完成了所有配置(包括错误检查)。这个脚本通过以下方式简化了我的工作流程:

  • 配置新的 Linux 系统(支持测试的架构)
  • 登录系统并从中央位置下载自动化 shell 脚本
  • 运行它来配置系统
  • 开始测试

学习 Go 语言

我想学习 Go 语言 有一段时间了,将我心爱的 Shell 脚本转换为 Go 程序似乎是一个很好的项目,可以帮助我入门。它的语法看起来很简单,在尝试了一些测试程序后,我开始着手提高自己的知识并熟悉 Go 标准库。

我花了一个星期的时间在笔记本电脑上编写 Go 程序。我经常在我的 x86 服务器上测试程序,清除错误并使程序健壮起来,一切都很顺利。

直到完全转换到 Go 程序前,我继续依赖自己的 shell 脚本。然后,我将二进制文件推送到中央文件服务器上,以便每次配置新服务器时,我要做的就是获取二进制文件,将可执行标志打开,然后运行二进制文件。我对早期的结果很满意:

$ wget http://file.example.com/<myuser>/bins/prepnode
$ chmod  +x ./prepnode
$ ./prepnode

然后,出现了一个问题

Read more...
Previous Page 8 of 9 Next Page