1.linux下执行shell文件报错:
/bin/bash^M: bad interpreter: No such file or directory
解决方案:
执行命令 :set ff?
如果是windows下的doc格式 设置:set ff=unix
保存 重新执行
- 编译不同操作系统下的go 可执行文件
GOARCH=amd64 go build -o amd_main main.go
GOARCH=arch go build -o arch_main main.go
- linux开发环境下常用的命令:
上传文件 rz -be
下载文件 sz
删除文件 rm
进入目录 cd
ps -elf | grep "服务名" 查询进程号
kill -9 进程号
解压tgz格式文件
tar zxvf 文件名.tgz -C ./
cannot remove is a directory 表示这是个目录不能删除,但是我们可以采用强制删除的办法,cb文件夹是一个目录,
可用rm -rf cb删除:-r是递归处理 -f是强制删除。
执行命令: rm –rf cb
查看当前使用的python路径 which python
sudo su root 获取root权限
conda activate bert-srv 创建虚拟坏境
编辑文件 vim 文件名 进入文件 a 编辑文件
退出编辑模式 shift : q enter
nohup 加在一个命令的最前面,表示不挂断的运行命令
& 加载一个命令的最后面,表示这个命令放在后台执行
- 统计目录下的文件个数
统计当前目录下文件的个数(不包含目录或子文件夹) ls -l | grep "^-" | wc -l
统计当前目录下文件的个数(包含子目录中的文件) ls -lR | grep "^-" | wc -l
- 遇到问题: 日志系统 记录不到useradd命令信息
1.修改配置文件 cat /etc/rsyslog.conf
2.重启日志服务 service rsyslog restart
3.测试 useradd test1
grep -a useradd /var/log/secure
宿主机记录攻击机sftp链接操作
通过执行shell命令修改配置文件
原日志样式
Subsystem sftp /usr/libexec/openssh/sftp-server -l VERBOSE
Subsystem sftp internal-sftp -l VERBOSE
可用修改脚本命令
sudo sed -i 's#/usr/libexec/openssh/sftp-server#/usr/libexec/openssh/sftp-server -l VERBOSE#g' /etc/ssh/sshd_config
sudo sed -i 's#internal-sftp#internal-sftp -l VERBOSE#g' /etc/ssh/sshd_config
systemctl restart sshd.service
- /var/log/messages 日志不记录chmod操作信息
修改/etc/rsyslog.conf配置文件 一般是文件最后多了行描述语句
把 /etc/bashrc 后面 加如下代码
PATH="$PATH:/usr/local/sbin:/usr/sbin"
export PATH
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $x $y | grep -v -E "password|passwd|\-\-email|\-\-description"; });logger -p local6.notice "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'
export HISTIGNORE="*adduser*--user=*-p=*:*openssl*passwd *"
export HISTTIMEFORMAT="%F %T `whoami` "
export GJGBIN=/usr/local/bin/GJG10241908BIN
export PATH=/usr/local/bin/GJG10241908BIN:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/sbin:/root/bin
export PROMPT_COMMAND='{ msg=$(history 1 | { read x cmd; echo "$cmd" | grep -i -v -E "password|passwd|\-\-email|\-\-description|\-P "; });logger -p local6.notice [euid=$(whoami)]#####$(who am i)#####[cwd=$(pwd)]#####"$msg"; }'
export HISTTIMEFORMAT="%F %T "
- 操作命令带时间
通过设置export HISTTIMEFORMAT=’%F %T ‘,让历史记录中带上命令执行时间。
这个配置可以写在/etc/profile中,当然如果要对指定用户做配置,这个配置可以在/home/$USER/.bash_profile中。
export HISTTIMEFORMAT='%F %T'
如果想要实现更细化的记录,比如登陆过系统的用户、IP地址、操作命令以及操作时间一一对应,可以通过在/etc/profile里面加入以下代码实现。
export HISTTIMEFORMAT="%F %T `who -u 2>/dev/null | awk '{print $NF}'|sed 's/[()]//g'` `whoami` "
使配置立即生效请执行source /etc/profile
常用关键命令
1.grep 使用正则表达式搜索文本,并把匹配的行打印出来
grep -v 是反向查找的意思,比如 grep -v "grep" 就是查找不含有 grep 字段的行;
2.awk命令 文本分析工具,处理每行都是相同格式的文本 可以进行样式装入,流控制,数学运算
awk '{pattern + action}' <file> pattern表示数据中要查找的内容,action表示要执行的一系列命令
awk的默认分隔符是空格和制表符 例子: awk -F ':|,' '{print $2, $4, $6}' log
-内置变量 FILENAME:当前文件的名称 NR:当前已读的行数 NF:当前行被分割的列数
-条件判断 awk '$2 < 5 {print $0}' log 只打印第二列小于5的行
-统计值计算
-文本去重 awk '!x[$0]++' filename
3.curl命令
curl主要用来与web服务器交互数据;常用功能包括下载文件、访问服务器页面
常用参数
-H 设置header -u 设置用户名密码
-X 设置请求的方式 -O 源文件名保存文件
-o 指定文件名保存文件 -d post请求体
-I 仅测试http头 -m 10 最多查询10秒
-o /dev/null 屏蔽原有输出信息 -w "http_code:%{http_code} "
4.wget命令
是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理
5.tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
-n<行数> 显示文件的尾部 n 行内容
6. ps 作用:主要是查看服务器的进程信息
ps aux 查看系统中所有的进程,使用 BS 操作系统格式
ps -le 查看系统中所有的进程,使用 Linux 标准命令格式
选项:
a:显示一个终端的所有进程,除会话引线外;
u:显示进程的归属用户及内存的使用情况;
x:显示没有控制终端的进程;
-l:长格式显示更加详细的信息;
-e:显示所有进程;
7. shell脚本中$?是指上一次命令执行的成功或者失败的状态。如果成功就是0,失败为1.。
语句if [ $? -eq 0 ] 是判断if语句的上一个命令执行如果成功就执行if中的语句,否则就执行else中的内容。
8. source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
source filename # filename必须是可执行的脚本文件
或者 . filename # 注意 . 号后面还有一个空格
9. 把指定目录下a移动到指定目录b文件下并重命名为c
mv PATH_a PATH_b/c
10. 复制主机文件到容器
docker cp 主机文件目录 容器:容器目录
进入容器 docker attach 44fc0f0582d9
11. 端口号查询进程
netstat -ano|findstr “查询的端口号”
12. sed命令使用
流编辑器,可以对 stdin 或文件进行处理。
在文件尾部加入内容 sed -i '$a fileContent' fileName
删除文件最后一行 sed -i '$d' fileName
14. chmod命令 命令是用于改变文件或目录的访问权限。
Linux系统中的每个文件和目录都有访问许可权限,
用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
文件或目录的访问权 限分为只读,只写和可执行三种。
这里显示的权限是依次排列的,分别为:[用户][同组][其他]
用户权限,就是你自己的权限。英文:user,简写:u(覆盖标号123)
用户组权限,就是和你同组的人的权限。英文:group,简写:g(覆盖标号456)
其他权限,就是不和你同组的人的权限。英文:others,简写:o(覆盖标号789)
所有人的权限,英文:all,简写:a
r, 即Read,读,权限值为4
w,即Write,写,权限值为2
x,即eXecute,执行,权限值为1
-,在标号0位置,表示普通的文件
-,其他位置,表示对应权限未开启,不具备权限
d,即directory,表示目录文件
+ 表示增加权限,如u+x, u+r, u+w, g+w, g+r, o+r, a+r等
- 表示取消权限,如u-x, u-r, u-w, g-w, g-r, o-r, a-r等
= 表示赋予给定权限,并取消其他所有权限(如果有的话,如原来u是rwx,设置u=r,u就剩r)
History的保存
那么命令记录在哪里呢?在home目录内的 .bash_history 里! 不过,需要留意的是,~/.bash_history 记录的是前一次登陆以前所运行过的命令,而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中!
进程相关
ps -a 查看所有进程
top -p pid 查看pid的cpu 内存占用情况
文件相关
find 文件目录 -type d //查看文件下的所有子文件
内核态(Kernel Mode):运行操作系统程序,操作硬件
用户态(User Mode):运行用户程序
windows 下 切换盘
C:>D:
1.进入文件:vi 文件名(例如 vi server.xml)
2.查找待修改内容的位置:
a.先输入shift + :,进入可查询状态;
b.再输入/ + 要查询的内容,点击回车,使用N键上下搜索,找到要修改的具体位置(例如 /hello)
3.按I键进入可编辑模式,修改内容;
4.修改完成,按Esc键进入命令模式;
5.保存并退出:
a.保存并退出:":" + wq!
b.强制退出(不保存):“:” + q!
容器相关:
1.使用images命令列出本地镜像 docker images
REPOSITORY:表示来自于哪个仓库。
TAG:表示镜像的标签信息,标签只是标记,并不能标识镜像内容。
IMAGE ID:镜像ID,镜像的唯一标识,如果两个镜像ID相同,则说明它们实际上指向了同一个镜像,只是具有不同标签名而已。
CREATED:表示镜像最后的更新时间。
VIRTUAL SIZE:表示镜像大小,好的镜像往往体积会较小。
2.使用tag命令为镜像添加标签 docker tag
3.使用inspect命令查看镜像详细信息
docker insepect -f {{“.项名”}} 镜像名
4.进入容器
docker exec -it xxxxxxxx /bin/bash
拷贝文件进容器
docker cp /home/xxx/main xxxaaabbb:/root
容器逃逸
不安全的配置与挂载
如果为容器设定了不安全的配置,会导致容器本身的隔离机制失效,容器的两大隔离机制如下:
Linux 命名空间(NameSpace):实现文件系统、网络、进程、主机名等方面的隔离
Linux 控制组(cgroups):实现 CPU、内存、硬盘等方面的隔离
如果设定了以下配置就会导致相应的隔离机制失效:
--privileged:使容器内的 root 权限和宿主机上的 root 权限一致,权限隔离被打破
--net=host:使容器与宿主机处于同一网络命名空间,网络隔离被打破
--pid=host:使容器与宿主机处于同一进程命令空间,进程隔离被打破
--volume /:/host:宿主机根目录被挂载到容器内部,文件系统隔离被打破
拷贝strings命令进主机
strings 可执行二进制文件 拷进 /usr/bin
关联的.so 文件拷进 /usr/lib64