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
- 查找文件名称如ad.log且七天以前的文件并执行删除:find . -name "test.log" -mtime +7 -exec rm -rf {} \;
- 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 :指定系统定时到对应的用户
- 定时编辑:crontab -e :编辑系统定时
- 定时格式:
- 分 时 日 月 周 command:
- 第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)
- 第1列表示分钟1~59 每分钟用或者 /1表示
- 分 时 日 月 周 command:
- 服务控制:
- 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用于产看网络的状态等)
- 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常用性能工具一览:
位置查找
- 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)