原创

Linux命令速查

Linux速查速记

记录下Linux系统的一些操作命令,基于Centos7整理的,部分命令没有验证。

常用命令

查找查看

基础目录信息

  • ls 列出当前目录下内容
  • ll 纵向列出目录下内容,带有基础信息
  • ls -alh 已可读的形式列出目录下内容
  • 分页查看:ls -l /etc |more
  • 新建目录:mkdir 文件名

目录资源占用

  • df -h 系统资源占用情况,-h #使用-h选项以KB、MB、GB的单位来显示,可读性高(最常用)
  • du -sh * 系统中各文件及目录占用情况
  • du -h --max-depth=1 /路径 查询文件夹占用显示该目录占用空间的总和

文件占用查看(显示每个文件和目录的磁盘使用空间文件的大小)

  • du -s: 当前目录文件大小
  • du -a:当前目录及子目录(迭代操作) 和文件占用磁盘空间的大小
  • du -c:使用此选项时,不仅显示几个文件或目录各自占用磁盘空间的大小,还统计它们的总和
  • du -l:这个选项主要是针对硬链接。在统计目录占用磁盘空间大小时,-l选项会把硬链接也统计进来。帮助文档是这样解释的
  • 常用选项:
    • -h:以人类可读的方式显示,以K M G为单位显示,提高可读性(最常用的一个~也可能只用这一个就满足需求了)
    • -H或--si #与-h参数相同,但是K,M,G是以1000为换算单位
    • -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小
    • -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小
    • -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和
    • --apparent-size:显示目录或文件自身的大小
    • -l :统计硬链接占用磁盘空间的大小
    • -L:统计符号链接所指向的文件占用的磁盘空间大小
    • -x #以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过
    • -X #在<文件>指定目录或文件
    • --exclude=<目录或文件> #略过指定的目录或文件
    • -D #显示指定符号链接的源文件大小
    • -l #重复计算硬件链接的文件

文件操作

VI 内容应用

  • 内容检索:在命令模式下输入: /搜索的字符 查找下一个按:n, 上一个匹配:Shift + n
  • 内容替换:
  • 复制&粘贴:
  • vi/vim命令模式和编辑模式各种操作
  • 最后附上一张大神的vim图:

基础操作

  • 文件复制:cp 源文件 新文件
  • 文件移动:mv 原文件 新文件
  • 删除文件:rm rd *
  • 删除文件:rm -d(D:大写强制删除) 文件名
  • 指定前后缀删除:rm ./test*
  • 删除文件夹:rm -rf 指定文件夹名(危险操作,操作前请确认删除位置,勿配合*)
  • 删除文件夹:rm -rf /home/myuser/a* (危险操作,手滑勿碰)
  • 新建文件:vi /home/test.sh

压缩&解压

  • 压缩:tar -zcvf 打包后生成的文件名全路径 要打包的目录 如:tar -zcvf /home/xahot.tar.gz /xahot
  • tar.gz 使用tar命令进行解压:tar -zxvf java.tar.gz
  • gz文件的解压 gzip 命令:gzip -b java.gz

上传&下载 (基于xshell操作需要安装rzsz对应的程序)文件远程上传下载: yum -y install lrzsz

  • rz 上传文件
  • sz 文件名 下载

文件同步

  • 本地同步:
    • 目录级同步:rsync -avz /data /backup
    • 指定文件同步:rsync -avz /data/a.txt /backup
    • 正则匹配同步:rsync -avz /data/a*.txt /backup
  • 推送同步:
    • 非认证推送:rsync -avz /data test@192.168.199.247:/backup
    • 认证模式托送: rsync -avz /data test@192.168.199.247::backup --password-file=/etc/rsyncd.password
  • 远程拉取:rsync -avz test@192.168.199.247::backup --password-file=/etc/rsyncd.password /data
  • 查看远程机器文件列表:rsync -v rsync:// test@192.168.199.247/backup

文本清空

  • $ > a.txt
  • echo "" > a.txt
  • cat /dev/null > a.txt(两个可以不用停止WEB服务就可以清空nohup.out的命令)
  • cp /dev/null nohup.out (两个可以不用停止WEB服务就可以清空nohup.out的命令)

文本搜索

  • 关键字搜索:cat info.log.2019-04-17*|grep error (error为关键字)
  • 关键词出现次数统计:cat info.log.2019-08-23*|grep error |wc -l
  • 统计:
    • 统计行数: wc -l file 或 cat file | wc -l
    • 统计单词数: wc -w file 或 cat file | wc -w
    • 统计字符数: wc -c file 或 cat file | wc -c 或 echo -n 1234 | wc -c (-n 用于避免echo添加额外的换行符)
    • 打印出文件中最长一行的长度: wc file -L
    • 统计demo目录下,js文件数量:find demo/ -name "*.js" |wc -l
    • 统计demo目录下所有js文件代码行数:find demo/ -name ".js" |xargs cat|wc -l 或 wc -l `find ./ -name ".js"`|tail -n1
    • 统计demo目录下所有js文件代码行数,过滤了空行:find /demo -name "*.js" |cat|grep -v ^$|wc -l
    • 统计配合命令:
       -c 统计字节数
       -l 统计行数
       -m 统计字符数。这个标志不能与 -c 标志一起使用
       -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串
       -L 打印最长行的长度
       -help 显示帮助信息
       --version 显示版本信息
      
  • 查询删除
    • 查找文件名称如ad.log且七天以前的文件并执行删除:find . -name "test.log" -mtime +7 -exec rm -rf {} \;
      • -mtime +10 : 处理10天前的文件
      • -name : "*" : 要删除所有文件
      • -exec rm -rf {} \; : 执行的指令,即删除文件
    • 查找名称匹配正则的文件并删除:find . -type f -regex ".*.(temp|log)" -mtime +7 -exec rm -rf {} \;
    • 删除超过500M的大文件:find / -size +500M -print0|xargs -0 du -m|sort -nr
  • tail 工具,显示文件内容的最后几行
    • tail -n 行数值 文件名 如:tail -n 5 /etc/profile
    • tail -f /var/log/syslog 显示文件 syslog 的后十行内容并在文件内容增加后,且自动显示新增的文件内容(命令tail非常有用,尤其在监控日志文件时,可以在屏幕上一直显示新增的日志信息)
    • tail -500f nohup.out 显示最新的500行数据
  • cat 显示文件连接文件内容的工具:cat 是一个文本文件(查看)和(连接)工具,通常与more搭配使用,与more不同的是cat可以合并文件
    • 如:cat /etc/passwd
    • 语法结构:
      • cat [选项] [文件]...
      • -A, --show-all 等价于 -vET
      • -b, --number-nonblank 对非空输出行编号
      • -e 等价于 -vE
      • -E, --show-ends 在每行结束处显示 $
      • -n, --number 对输出的所有行编号
      • -s, --squeeze-blank 不输出多行空行
      • -t 与 -vT 等价
      • -T, --show-tabs 将跳格字符显示为 ^I
      • -u (被忽略)
      • -v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
      • --help 显示此帮助信息并离开
    • cat /etc/yum.conf 注:查看/etc/目录下的yum.conf 文件内容
    • cat -n yum.conf 注:对/etc目录中的yum.conf的所有的行(包括空白行)进行编号输出显示
    • cat 对于内容极大的文件来说,可以通过管道|传送到more 工具,然后一页一页的查看:cat /etc/yum.conf | more
    • cat 的创建、连接文件功能实例(cat 有创建文件的功能,创建文件后,要以EOF或STOP结束):cat > test.txt << EOF (EOF结束输入标志)
      • $ > 1
      • $ > 2
      • $ > EOF
    • cat 还有向已存在的文件追加内容的功能:cat >> test.txt << EEE (EEE结束输入标志,任意不冲突就可以)
      • $ > 3
      • $ > 4
      • $ > 5
      • $ > EEE
    • cat 连接多个文件的内容并且输出到一个新文件中:(注意:“ > ”表示创建,“>>”表示追加。千万不要弄混了)
      • cat t1.txt t2.txt t3.txt > test.txt
      • cat t1.txt t2.txt t3.txt >> test.txt
  • less 工具:less工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大;初学者建议用less。由于less的内容太多只将最常用的介绍一下
    • 语法格式:less [参数] 文件
    • 常用参数:
      • -c 从顶部(从上到下)刷新屏幕,并显示文件内容。而不是通过底部滚动完成刷新
      • -f 强制打开文件,二进制文件显示时,不提示警告
      • -i 搜索时忽略大小写;除非搜索串中包含大写字母
      • -I 搜索时忽略大小写,除非搜索串中包含小写字母
      • -m 显示读取文件的百分比
      • -M 显法读取文件的百分比、行号及总行数
      • -N 在每行前输出行号:less -N /etc/test.txt
      • -p pattern 搜索pattern;比如在/etc/profile搜索单词MAIL,就用 less -p MAIL /etc/profile
      • -s 把连续多个空白行作为一个空白行显示
      • -Q 在终端下不响铃
  • head 工具,显示文件内容的前几行:head -n 行数值 文件名 如:head -n 10 /etc/profile
  • more 文件内容或输出查看工具:是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比
    • more /etc/test.txt || cat -n /etc/test.txt |more
    • 语法:more [参数选项] [文件]
    • 参数:
      • +num 从第num行开始显示
      • -num 定义屏幕大小,为num行
      • +/pattern 从pattern 前两行开始显示
      • -c 从顶部清屏然后显示
      • -d 提示Press space to continue, 'q' to quit.(按空格键继续,按q键退出),禁用响铃功能
      • -l 忽略Ctrl+l (换页)字符
      • -p 通过清除窗口而不是滚屏来对文件进行换页。和-c参数有点相似
      • -s 把连续的多个空行显示为一行
      • -u 把文件内容中的下划线去掉退出more的动作指令是q
      • more -dc /etc/profile 注:显示提示,并从终端或控制台顶部显示
      • more +4 /etc/profile 注:从profile的第4行开始显示
      • more -4 /etc/profile 注:每屏显示4行
      • more +/MAIL /etc/profile 注:从profile中的第一个MAIL单词的前两行开始显示
      • 分页展示目录下文件:ls -l /etc |more
    • more 的动作指令:
      • 我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键) 是向下显示一屏,ctrl+b是返回上一屏; Enter键可以向下滚动显示n行,要通过定,默认为1行
      • Enter 向下n行,需要定义,默认为1行
      • Ctrl+f 向下滚动一屏
      • 空格键 向下滚动一屏
      • Ctrl+b 返回上一屏
      • = 输出当前行的行号
      • :f 输出文件名和当前行的行号
      • v 调用vi编辑器
      • ! 命令 调用Shell,并执行命令
      • q 退出more当我们查看某一文件时,想调用vi来编辑它,不要忘记了v动作指令,这是比较方便的
  • 打印:echo
    • echo hello或者echo "hello"都是在控制台打印出hello单词
    • touch a.txt 新建一个文本文件a.txt
    • echo hello > a.txt 打印
    • echo world >> a.txt 则a.txt中会记录的是hello word,但是hello和word不是写在一行的
    • echo $HOME 控制台则会打印出当前用户的根路径/home/picc4
    • -e
      • \a 发出警告声
      • \b 删除前一个字符
      • \c 最后不加上换行符号
      • \f 换行但光标仍旧停留在原来的位置
      • \n 换行且光标移至行首
      • \r 光标移至行首,但不换行
      • \t 插入tab
      • \v 与\f相同
      • \ 插入\字符
      • \nnn 插入nnn(八进制)所代表的ASCII字符
      • echo date

进程搜索

  • ps -ef |grep redis 查看进程(关键字匹配)

快捷操作

  • ln -s /home/test/dirs / 快捷方式
  • alias "cd1=cd /etc" 或 alisa "cd2=cd /usr/sbin" 定义快捷命令

系统定时

在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写

  • 定时编辑:
    • 定时编辑:crontab -e :编辑系统定时
      • crontab -l :列出目前的系统定时
      • crontab -u :指定系统定时到对应的用户
  • 定时格式:
    • 分 时 日 月 周 command: file
      • 第1列表示分钟1~59 每分钟用或者 /1表示
        • 第2列表示小时1~23(0表示0点)
        • 第3列表示日期1~31
        • 第4列表示月份1~12
        • 第5列标识号星期0~6(0表示星期天)
        • 第6列要运行的命令
        • 例如定时请求某一个url : 00 03 * /usr/bin/curl http://crmpay.com/mpdown (注意:一定要加上这个 /usr/bin/curl)
  • 服务控制:
    • service crond start //启动服务
    • service crond stop //关闭服务
    • service crond restart //重启服务
    • service crond reload //重新载入配置
    • service crond status //查看服务状态

应用程序

安装

  • 文件远程上传下载: yum -y install lrzsz
  • vim: yum install vim -y
    • 系统级配置:/etc/vimrc
    • 用户级配置:~/.vimrc
      • 设置行号:set number

apt-get常用命令

  • sudo apt-get update 更新源
  • sudo apt-get install package 安装包
  • sudo apt-get remove package 删除包
  • sudo apt-cache search package 搜索软件包
  • sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等
  • sudo apt-get install package --reinstall 重新安装包
  • sudo apt-get -f install 修复安装
  • sudo apt-get remove package --purge 删除包,包括配置文件等
  • sudo apt-get build-dep package 安装相关的编译环境
  • sudo apt-get upgrade 更新已安装的包
  • sudo apt-get dist-upgrade 升级系统
  • sudo apt-cache depends package 了解使用该包依赖那些包
  • sudo apt-cache rdepends package 查看该包被哪些包依赖
  • sudo apt-get source package 下载该包的源代码
  • sudo apt-get clean && sudo apt-get autoclean 清理无用的包
  • sudo apt-get check 检查是否有损坏的依赖

卸载jenkins

  • service jenkins stop
  • yum clean all
  • yum -y remove jenkins
  • rm -rf /var/cache/jenkins
  • rm -rf /var/lib/jenkins

运行&关闭&输出

  • service name (start|stop|restart)
  • sh文件:sh .sh (start|)
  • nginx服务:/usr/sbin/nginx -c /etc/nginx/nginx.conf
  • Java程序 重定向输出并启动(&后台运行):nohup java -jar demo.jar &
    • 指定profile: --spring.profiles.active=prod
  • 后台运行:& -> ./dir &
  • 输出到文件: ./dir >> out.txt 2>&1 &
  • 不挂起任务执行: nohup ./test > myout.txt 2>&1 &
    • 2>&1是指将标准错误重定向到标准输出,于是标准错误和标准输出都重定向到指定的out.txt文件中
  • 默认输出到nohup.out文件: nohup java -jar test.jar &

杀死进程

  • 杀死进程: kill -9 4394(进程号)

系统信息

环境配置

  • vim ~/.bashrc
    • $DIRPATH=/usr/bin
  • source ~/.bashrc

环境变量

  • vi /etc/profile 然后还需要 配置环境变量,如下:
    • export M2_HOME=/usr/local/maven3
    • export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
  • source /etc/profile 保存退出后运行该命令使配置生效,或者重启服务器生效

系统信息

  • 内核版本:cat /proc/version
  • 系统版本:uname -a
  • 系统版本:lsb_release -a
  • cpu信息:cat /proc/cpuinfo

IP 信息

  • centos7: ip addr
  • 其他版本:ifconfig

端口进程查看

  • lsof -i:443 查看443端口情况,用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000
  • netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,netstat -tunlp |grep 8000
  • netstat -tunpl 查看服务启动情况及端口

系统资源占用

  • 内存占用情况:free -m
  • 系统运行实时情况:top -i (按shift+m安装内存排序、按 P 按CPU使用率排序)
    • 命令选项:
      • d:指定更新的间隔,以秒计 算
      • q:没有任何延迟的更新。如果使用者有超级用户,则top命令将会以最高的优先序执行
      • c:显示进程完整的路径与名称
      • S: 累积模式,会将己完成或消失的子行程的CPU时间累积起来
      • s:安全模式
      • i:不显示任何闲置(Idle)或无用(Zombie)的行 程
      • n:显示更新的次数,完成后将会退出
    • 显示参数:
      • PID(Process ID):进程标示号
      • USER:进程所 有者的用户名
      • PR:进程的优先级别
      • NI:进程的优先级别数值
      • VIRT:进程占用的虚拟内存值
      • RES:进程占用的 物理内存值
      • SHR:进程使用的共享内存值
      • S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负 数
      • %CPU:该进程占用的CPU使用率
      • %MEM:该进程占用的物理内存和总内存的百分比
      • TIME+:该进程启动后占用的总 的CPU时间
      • Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行
    • top命令使用过程中,还可以 使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的
      • <空格>:立刻刷新
      • P:根据CPU使用大小进行排 序
      • T:根据时间、累计时间排序
      • q:退出top命令
      • m:切换显示内存信息
      • t:切换显示进程和CPU状态信息
      • c: 切换显示命令名称和完整命令行
      • M:根据使用内存大小进行排序
      • W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐 方法
  • ps -ef | sort -k7

服务查看

  • 开机启动项:systemctl list-unit-files
  • 只看启动项:systemctl list-unit-files | grep enable
  • 指定字段查看:systemctl list-unit-files | grep zabbix
  • 查看系统服务:service --status-all
  • 查看当前有多少在后台运行: jobs -l (此命令可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识)

性能检测 (如使用vmstat查看系统的整体性能,mpstat用于查看cpu的性能,pidstat用于查看进程的状态,iostat用于查看io的状态,free用于产看内存的状态,sar用于产看网络的状态等)file

  • free -m:内存使用情况,若buffers和cached接近0,说明I/O的使用率过高,系统存在性能问题。
    Linux中会用free内存作为cache,若应用程序需要分配内存,系统能够快速的将cache占用的内存回收,因此free的内存包含cache占用的部分。
    • 检查的列:
      • buffers: For the buffer cache, used for block device I/O.
      • cached: For the page cache, used by file systems.
  • top:top命令包含更多的指标统计,相当于一个综合命令。
  • uptime:该命令可以大致的看出计算机的整体负载情况,load average后的数字分别表示计算机在1min、5min、15min内的平均负载。
  • dmesg | tail:打印内核环形缓存区中的内容,可以用来查看一些错误;上面的例子中,显示进程18694 因引内存越界被kill掉以及TCP request被丢弃的错误。通过dmesg可以快速判断是否有导致系统性能异常的问题。
  • vmstat 1:打印进程、内存、交换分区、IO和CPU等的统计信息,vmstat的格式:vmstat [options] [delay [count]]
    • vmstat第一次输出表示从开机到vmstat运行时的平均值;剩余输出的都是在指定的时间间隔内的平均值,上述例子中delay的值设置为1,除第一次以外,剩余的都是1秒统计一次,count未设置,将会一直循环打印。 vmstat 10 3:表示每行打印10秒内的平均值,只打印3次。
    • 需要检查的列:
      • r:表示正在运行或者等待CPU调度的进程数。因为该列数据不包含I/O的统计信息,因此可以用来检测CPU是否饱和。若r列中的数字大于CPU的核数,表示CPU已经处于饱和状态。
      • free:当前剩余的内存;
      • si, so:交换分区换入和换出的个数,若换入换出个数大于0,表示内存不足;
      • us, sy, id, wa:CPU的统计信息,分别表示user time、system time(kernel)、idle、wait I/O。I/O处理所用的时间包含在system time中,因此若system time超过20%,则I/O可能存在瓶颈或异常;
  • mpstat -P ALL 1:该命令用于每秒打印一次每个CPU的统计信息,可用于查看CPU的调度是否均匀
  • pidstat 1:该命令用于打印各个进程对CPU的占用情况,类似top命令中显示的内容。pidstat的优势在于,可以滚动的打印进程运行情况,而不像top那样会清屏。上述例子中,%CPU中两个java进程的cpu利用率分别达到了1590%和1573%,表示java进程占用了16颗CPU。
  • iostat -xz 1:类似vmstat,第一次输出的是从系统开机到统计这段时间的采样数据;
    • 检查列:
      • r/s, w/s, rkB/s, wkB/s,表示每秒向I/O设备发出的reads、writes、read Kbytes、write Kbytes的数量。
      • await,表示应用程序排队等待和被服务的平均I/O时间,该值若大于预期的时间,这表示I/O设备处于饱和状态或者异常。
      • avgqu-sz,表示请求被发送给I/O设备的平均时间,若该值大于1,则表示I/O设备可能已经饱和;
      • %util,每秒设备的利用率;若该利用率超过60%,则表示设备出现性能异常;
  • sar -n DEV 1:sar是System Activity Reporter的缩写,系统活动状态报告。
    • -n { keyword [,…] | ALL },用于报告网络统计数据。keyword可以是以下的一个或者多个: DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 和UDP6。
    • -n DEV 1, 每秒统计一次网络的使用情况;
    • -n EDEV 1,每秒统计一次错误的网络信息;
    • 检测的列:
      • IFACE ,网络接口名称;
      • rxpck/s ,每秒接收到包数;
      • txpck/s ,每秒传输的报数;(transmit packages)
      • rxkB/s ,每秒接收的千字节数;
      • txkB/s ,每秒发送的千字节数;
      • rxcmp/s ,每秒接收的压缩包的数量;
      • txcmp/s ,每秒发送的压缩包的数量;
      • rxmcst/s,每秒接收的组数据包数量;
  • sar -n TCP,ETCP 1:该命令可以用于粗略的判断网络的吞吐量,如发起的网络连接数量和接收的网络连接数量;
      * TCP, 报告关于TCPv4网络流量的统计信息;
      * ETCP, 报告有关TCPv4网络错误的统计信息;
      * 检测的列:
          * active/s: Number of locally-initiated TCP connections per second (e.g., via connect()),发起的网络连接数量;
          * passive/s: Number of remotely-initiated TCP connections per second (e.g., via accept()),接收的网络连接数量;
          * retrans/s: Number of TCP retransmits per second,重传的数量;
    
  • 参考下大佬的图:Linux常用性能工具一览:file

位置查找

  • whereis:查找位置:whereis (java|nginx),只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息
  • which:which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令:which java
  • locate:locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库
    • locate /etc/sh :搜索etc目录下所有以sh开头的文件
    • locate ~/m : 搜索用户主目录下,所有以m开头的文件
    • locate -i ~/m :搜索用户主目录下,所有以m开头的文件,并且忽略大小写
  • find:find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件:find <指定目录> <指定条件> <指定动作>
    • <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录
    • <指定条件>: 所要搜索的文件的特征
    • <指定动作>: 对搜索结果进行特定的处理
    • 示例:
      • find . -name "my*" :搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件
      • find . -name "my*" -ls:搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息
      • find . -type f -mmin -10:搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录

目录结构

  • / 根目录,每一个文件和目录都从这里开始, 只有root用户具有该目录下的写权限,此目录和/root目录不同,/root目录是root用户的主目录
  • /usr 用户程序,包含二进制文件、库文件、文档、二级程序的源代码
    • /usr/bin 用户程序的二进制文件,如程序at、awk、cc、less、scp
    • /usr/sbin 系统管理员的二进制文件,如程序atd、cron、sshd、useradd、userdel
    • /usr/lib 包含/usr/bin和/usr/sbin用到的库
    • /usr/local 包含从源安装的用户程序
  • /home 所有用户用home目录来存储他们的个人文档
  • /opt 可选的附加应用程序, 包含从个别厂商的附加应用程序,附加应用程序应该安装在/opt/或者/opt/的子目录下
  • /tmp 临时文件夹,存储系统和用户创建的临时文件, 系统重启时目录下的文件都将被删除
  • /etc 配置文件,所有程序所需的配置文件, 也包含了用于启动/停止单个程序的启动和关闭shell脚本,如:/etc/resolv.conf、/etc/logrotate.conf
  • /var 变量文件,var代表变量文件,这个目录下可以找到内容可能增长的文件,如:
    • /var/log 系统日志
    • /var/lib 包和数据库文件
    • /var/mail 电子邮件
    • /var/spool 打印队列
    • /var/lock 锁文件
    • /var/tmp 多次重新启动需要的临时文件
  • /bin 用户二进制文件,包含二进制可执行文件, 系统的所有用户使用的命令都设在这里,例如:ps,ls,ping,grep,cp等
  • /sbin 系统二进制文件,就像/bin,/sbin同样也包含二进制可执行文件, 但是,在这个目录下的linux命令通常由系统管理员使用,对系统进行维护如:iptables、reboot、fdisk、ifconfig、swapon命令
  • /lib 系统库: 包含支持位于/bin和/sbin下的二进制文件的库文件. 库文件名为 ld或lib.so.* 例如:ld-2.11.1.so,libncurses.so.5.7
  • /mnt 挂载目录: 临时安装目录,系统管理员可以挂载文件系统。
  • /media 可移动媒体设备: 用于挂载可移动设备的临时目录。 举例来说,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy
  • /proc 进程信息: 包含系统进程的相关信息, 这是一个虚拟的文件系统,包含有关正在运行的进程的信息。例如:/proc/{pid}目录中包含的与特定pid相关的信息。 系统资源以文本信息形式存在。例如:/proc/uptime
  • /srv 服务数据: srv代表服务,包含服务器特定服务相关的数据。 如:/srv/cvs包含cvs相关的数据
  • /dev 设备文件: 包含设备文件, 这些包括终端设备、USB或连接到系统的任何设备。例如:/dev/tty1、/dev/usbmon0
  • /boot 引导加载程序文件: 包含引导加载程序相关的文件。 内核的initrd、vmlinux、grub文件位于/boot下。 例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic

安全控制

安全日志

使用ssh公钥登录

  • 密码登录:不安全,防火墙配置过滤IP: 麻烦
  • client: ssh-keygen -t rsa ,客户端生成公钥和私钥,在 root/.ssh/ windows在用户/.ssh下 (使用xshell的可以用xshell直接生产比较方便)
  • 把公钥 上次服务端: scp id_rsa.pub root@192.168.230.150:/root
  • 将公钥覆盖到authorized_keys:cat id_rsa.pub >>/root/.ssh/authorized_keys
  • 修改文件权限:chmod 600 authorized_keys
  • 修改服务器端ssh配置文件: cd /etc/ssh , vi sshd_config
    • RSAAuthentication yes : 开启rsa验证
    • PubkeyAuthentication yes: 是否使用公钥
    • AuthorizedKeysFile .ssh/authorized_keys: 公钥保存位置
    • PasswordAuthentication no: 禁止使用密码登录 (注意:这一步最好等公钥登录验证成功后再修改,要不然会很尴尬)
    • service sshd restart
  • 客户端连接验证:ssh root@192.168.230.130:登录 或 ssh -v root@远程服务器IP

登录日志: /var/log (日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等)参考

  • 连接时间日志:由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和 utmp文件,使系统管理员能够跟踪谁在何时登录到系统。进程统计–由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计
  • 错误日志:由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。 常用的日志文件如下:
    • access-log 纪录HTTP/web的传输
    • acct/pacct 纪录用户命令
    • aculog 纪录MODEM的活动
    • btmp 纪录失败的纪录
    • lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
    • messages 从syslog中记录信息(有的链接到syslog文件)
    • sudolog 纪录使用sudo发出的命令
    • sulog 纪录使用su命令的使用
    • syslog 从syslog中记录信息(通常链接到messages文件)
    • utmp 纪录当前登录的每个用户
    • wtmp 一个用户每次登录进入和退出时间的永久纪录
    • xferlog 纪录FTP会话
  • 系统登陆日志查看:last -f /var/log/wtmp 日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端tty或时间显示相应的记录。
  • 可疑IP登陆排查:cat /var/log/secure | grep 193.127.71.12 文件寻找可疑IP登陆次数
  • 操作日志:记录多登陆用户的操作日志需要加入一部分脚本实现,vi /etc/profile 加入以下内容:

    history
    USER=whoami
    USER_IP=who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'
    if [ "$USER_IP" = "" ]; then
    USERIP=hostname
    fi
    if [ ! -d /var/log/history ]; then
    mkdir /var/log/history
    chmod 777 /var/log/history
    fi
    if [ ! -d /var/log/history/${LOGNAME} ]; then
    mkdir /var/log/history/${LOGNAME}
    chmod 300 /var/log/history/${LOGNAME}
    fi
    export HISTSIZE=4096
    DT=`date +"%Y%m%d
    %H:%M:%S"`
    export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USERIP}$DT"
    chmod 600 /var/log/history/${LOGNAME}/history 2>/dev/null

    • 完成后cd /var/log/history/,ls查看目录下内容,每次用户退出后都会产生以用户名,登录IP,时间的文件,里面包含此用户本次连接的所有操作

防火墙&端口控制

SeLinux

  • 查看SELinux状态:/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
    SELinux status: enabled
    getenforce ##也可以用这个命令检查

  • 关闭SELinux:

    • 临时关闭(不用重启机器):setenforce 0 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式
    • 修改配置文件需要重启机器:修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled
  • 重启机器即可

firewalld

  • 启动: systemctl start firewalld
  • 关闭: systemctl stop firewalld
  • 查看状态: systemctl status firewalld
  • 开机禁用 : systemctl disable firewalld
  • 开机启用 : systemctl enable firewalld

systemctl:systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体

  • 启动一个服务:systemctl start firewalld.service
  • 关闭一个服务:systemctl stop firewalld.service
  • 重启一个服务:systemctl restart firewalld.service
  • 显示一个服务的状态:systemctl status firewalld.service
  • 在开机时启用一个服务:systemctl enable firewalld.service
  • 在开机时禁用一个服务:systemctl disable firewalld.service
  • 查看服务是否开机启动:systemctl is-enabled firewalld.service
  • 查看已启动的服务列表:systemctl list-unit-files|grep enabled
  • 查看启动失败的服务列表:systemctl --failed

firewalld-cmd

  • 查看版本: firewall-cmd --version
  • 查看帮助: firewall-cmd --help
  • 显示状态: firewall-cmd --state
  • 查看所有打开的端口: firewall-cmd --zone=public --list-ports
  • 更新防火墙规则: firewall-cmd --reload
  • 查看区域信息: firewall-cmd --get-active-zones
  • 查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
  • 拒绝所有包:firewall-cmd --panic-on
  • 取消拒绝状态: firewall-cmd --panic-off
  • 查看是否拒绝: firewall-cmd --query-panic

端口控制

  • 添加:firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
  • 重新载入:firewall-cmd --reload
  • 查看:firewall-cmd --zone=public --query-port=80/tcp
  • 删除: firewall-cmd --zone=public --remove-port=80/tcp --permanent
  • 查看开放:firewall-cmd --list-all

iptables防火墙的相关状态

  • 关闭命令: service iptables stop
  • 永久关闭防火墙:chkconfig iptables off
  • 查看防火墙状态:service iptables status
  • 关闭防火墙:service iptables stop
  • 启动防火墙:service iptables start
  • 重启防火墙:service iptables restart
  • 查看防火墙状态:service iptables status
  • 永久关闭防火墙:chkconfig iptables off
  • 永久关闭后启用:chkconfig iptables on
  • 查看系统服务:service --status-all

参考文章

参考文章

[我的网站](www.dobuger.com)

正文到此结束