0%

Linux收集

nc全名叫netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的瑞士军刀。

一、资料

  1. nc localhost 80
  2. netstat -natp | grep 端口
  3. strace -ff -o ~/test.out php index.php
  4. zabbix
  5. 清除history记录:history -c && exit
  6. Audit
  7. Netlink
  8. killproc
  9. Linux下创建进程的三种方式及特点
  10. 对不起,学会这些 Linux 知识后,我有点飘
  11. rm -rf删除文件不释放空间的解决办法
  12. centos7的日志系统:journald, rsyslog, logrotate
  13. 系统设计入门
  14. 小林 x 图解计算机基础
  15. 如何有效的阅读linux内核源码?

二、常用

  1. declare
  2. while
  3. shell中自增实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
i=1

i=`expr $i + 1`
echo $i

let i+=1 或 let "i++"
echo $i

((i++))
echo $i

i=$[$i+1]
echo $i

i=$(($i+1))
echo $i

还有一种写法:
for i in $(seq 1 5)
do
echo $i
done
  1. if分支结构

    • 单if结构
    1
    2
    3
    4
    if condition
    then
    command
    fi
    • if else结构
    1
    2
    3
    4
    5
    6
    if condition
    then
    command1
    else
    command2
    fi
    • if else-if else结构
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if condition1
    then
    command1
    elif condition2
    then
    command2

    ...
    elif #可多个elif
    ...

    else
    commandN
    fi
  2. case分支结构

    • 语法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
...)
...
...
;;
esac
  • demo

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
    echo 请输入数字
    read num
    case $num in
    1)
    echo "你输入了1"
    ;;
    2)
    echo "你输入了2"
    ;;
    *)
    echo "无法识别的数字$num"
    ;;
    esac
  1. chsh命令

    • 查看系统支持的shellchsh -lcat /etc/shells
    • 查看当前使用的shellecho $SHELL
    • 修改默认shellchsh -s /bin/zsh
      • 需要重新登录才生效
  2. BASH_SOURCE[0]等价于BASH_SOURCE ,用于取得当前执行的shell文件所在的路径及文件名。dirname去除文件名中的非目录部分,仅显示与目录有关的部分。

1
TODO
  1. curl和wget的对比

    • 共同点
    • 不同点
      • curl是libcurl这个库支持的,wget是一个纯粹的命令行命令
      • curl支持更多的协议 ,Wget只支持 HTTP, HTTPS and FTP
      • curl默认支持HTTP1.1(也支持1.0),而wget仅仅支持HTTP1.0规范
      • curl在指定要下载的链接时能够支持URL的序列或集合,而wget则不能这样E.wget支持递归下载,而curl则没有这个功能
  2. 查看某个端口的服务

    • sudo netstat -tunpl | grep 端口号
    • lsof -i:端口号
  3. 清空文件内容的几种方式

1
2
3
4
5
6
: > filename # 其中的 : 是一个占位符, 不产生任何输出.
cat /dev/null > filename
cp /dev/null filename 
> filename # Linux可以,Mac不可以
echo "" > filename # 多一个空行
echo > filename # 多一个空行
  1. 查看文件的几种方式

    • cat:由第一行开始显示档案内容。
    • tac:从最后一行开始显示,和cat刚好相反。
    • more:一页一页的显示档案内容。
    • less:与more类似,比more更好的是可以往前翻页。
    • head:只看头几行。
    • tail:只看尾巴几行。
    • tail -f file,实时输出内容
      • 在一个终端中执行echo a >> 1.txt
      • 在另一个终端执行tail -f 1.txt
    • nl:输出内容同时输出行号,和cat -n类似。
    • od:以二进制的方式读取档案内容。
  2. 查找包含指定字符串的文件

    • grep -rn "Hello" ./
    • r表示递归
    • n表示查询结果显示行号
    • find ./ -name "*.*" | xargs grep "Hello"
    • find . | xargs grep -ri "Hello"find . | xargs grep -ri "Hello" -l
    • -l 表示只显示文件名
    • find / -type f -name "*.txt" | xargs grep "Hello"
  3. rm -rf删除文件后不释放空间

    • 测试小伙伴更新SVN一直不成功
    • 登录服务器手动svn up,提示空间满了
    • 查看空间使用情况df -h
    1
    2
    3
    4
    Filesystem      Size  Used Avail Use% Mounted on
    ...
    ...
    /dev/vda1 197G 41G 197G 100% /data
    • 查找大于800M的大文件
    • find . -type f -size +800M -print0 | xargs -0 ls -l | sort -nr
    • 查看某个文件挂载目录df path
    • 删除某个大文件如300Grm -rf somefile
    • df -h发现空间并未释放
    • lsof | grep deleted查看删除文件的进程是否结束(如pid为9999)
    • 终止此进程kill 9999
    • df -h重新查看空间使用情况
  4. 查找大文件的几种方法

    • 查找大于800M的文件find . -type f -size +800M
    • 查找大于800M的文件并显示文件相关信息find . -type f -size +800M -print0 | xargs -0 ls -l
    • 查找大于800M的文件并显示文件具体大小find . -type f -size +800M -print0 | xargs -0 du -h
    • 查找大于800M的文件并显示文件具体大小排序find . -type f -size +800M -print0 | xargs -0 du -h | sort -nr
  5. 查找大目录的几种方法

    • 查看目录相关信息du -h --max-depth=1
    • 查看最大的10个文件夹du -hm --max-depth=2 | sort -nr | head -10
  6. Linux目录介绍

目录 说明
/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里
/etc 存放系统管理和配置文件
/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录,具体如下:
/usr/x11r6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库
/usr/locat/etc 目录里面是程序的配置文件
/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里
/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息
/root 超级用户(系统管理员)的主目录
/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等
/dev 用于存放设备文件
/mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统
/boot 存放用于系统引导时使用的各种文件
/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件
/tmp 用于存放各种临时文件,是公用的临时文件存储点
/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里

  • usrUnix System Resource,而不是User
  • /usr/bin目录下都是系统预装的可执行程序,会随着系统升级而改变
  • /usr/local/bin目录是给用户放置自己的可执行程序的地方(推荐放在这里),不会被系统升级而覆盖同名文件
  1. RPM使用:RPM,Red-Hat Package Manager(RPM软件包管理器)的缩写,是RPM软件包的管理工具。它原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
    • 常用
    • rpm -qa 列出所有已安装软件包
    • rpm -e packagename 删除软件包
    • rpm -e --nodeps packagename 强制删除软件和依赖包
    • rpm -q packagename 查询包是否安装
    • rpm -ivh packagename 安装并显示安装进度
    • rpm -Uvh packagename 升级软件包
  • 通过RPM安装mysql

    • 检测是否已安装mariadb rpm -qa|grep mysql

    • 删除已安装的mariadb rpm -e packagename

    • mysql官网下载bundle包

      1
      2
      3
      rpm package:某个特定的包,比如server,client,shared lib等,可以单独安装
      rpm bundle:该版本所有包的集合,是把服务器端要用的都安装上,其他的不带,尤其是开发包
      Compressed TAR Archive:源码,必须用源码方式安装
    • 依次安装各个rpm(common/libs/libs/server),顺序错了会有提示 rpm -ivh packagename

    • 查看临时密码 sudo grep 'temporary password' /var/log/mysqld.log

    • 登入mysql mysql -u root -p 回车 输入刚获取的密码

    • 修改密码

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      #修改密码最小长度策略
      set global validate_password_length=0;

      #密码强度检查等级策略,0/LOW、1/MEDIUM、2/STRONG
      set global validate_password_policy=0;

      #修改密码
      set password for 'root'@'localhost' = password('root123');

      #开启mysql的root用户远程连接服务(%号即远程连接,IDENTIFIED BY后面跟的密码)
      GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

      #刷新以生效
      flush privileges;

      报错Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘,权限问题,修改 sudo chown -R mysql用户组:mysql用户 /var/lib/mysql

  1. Linux文件类型
    • Linux下7种文件类型,可通过ls -lfile filenamestat filename来查看
文件类型标识 文件类型
- 普通文件
d 目录
l 符号链接
s 套接字(伪文件)
b 块设备(伪文件)
c 字符设备(伪文件)
p 管道(伪文件)

伪文件不占用磁盘空间

  1. ls-grep-wc使用

    • 统计当前目录下文件的个数(不包括目录):ls -l | grep "^-" | wc -l
    • argument list too long: ls
    • 统计当前目录下文件的个数(包括子目录):ls -lR | grep "^-" | wc -l
    • 查看某目录下文件夹(目录)的个数(包括子目录):ls -lR | grep "^d" | wc -l
  2. 挂载分区扩容

    • 常用命令
    • lsblk:查看当前磁盘情况
    • df path:查看文件(夹)所在分区(挂载点)
    • df -lh:查看文件系统情况
    • df -l:查看挂载点使用情况
    • mount:查看已挂载的文件系统
      • /etc/fstab
      • /etc/mtab
      • /proc/mounts
    • fdisk -l:查看当前未挂载硬盘
  3. 批量解压到某个固定目录

1
2
3
4
for i in `ls *.tgz`
do
tar -zxvf $i -C ../tar/
done
  1. iptables
    • iptables -I INPUT -p tcp –dport 80 -j DROP
    • sudo tcpdump -i any -w telnet-80.pcap port 80
    • telnet 服务端IP 80
    • sudo sysctl net.ipv4.tcp_syn_retries
  • net.ipv4.tcp_syn_retries = 6
  • iptables -I INPUT -p tcp –dport 80 -j REJECT
  • telnet 47.94.129.219 80
  • sudo tcpdump -i any -w telnet-80-reject.pcap host 47.94.129.219 and port 80
  • sudo tcpdump -i any -w telnet-80-reject.pcap host 47.94.129.219
  1. 统计某个端口连接数量,如redis默认端口6379(Mac环境)

    • netstat -nat | grep -i “6379” | wc -l
    • lsof -i:6379 | wc -l
    • ps -ef | grep redis | grep -v grep,这种方式只能按进程名NAME进行查看
  2. Too many levels of symbolic links,创建软连接时使用全路径