1、常用命令
命令汇总
man ls cd pwd cp rm mkdir rmdir mv touch head/tail uptime whoami shutdown cat find/locate grep mount sudo su diff tar ifconfig nc tcpdump netstat ethtool svn dd more/less | && > du file df lsof
涉及到源目的操作的一般都是:cmd src dst
- 切换到上一个工作目录: cd -
- 切换到home目录: cd or cd ~
- 显示当前路径: pwd
-
find ./ -name '*.o'
- tail -f
文本处理相关: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
find . -maxdepth 1 -type f
find . -type d -print //只列出所有目录 type f 文件 / l 符号链接 / d 目录
最近第7天被访问过的所有文件:find . -atime 7 -type f -print
最近7天内被访问过的所有文件:find . -atime -7 -type f -print
查询7天前被访问过的所有文件:find . -atime +7 type f -print
删除当前目录下所有的swp文件:find . -type f -name "*.swp" -delete
将当前目录下的所有权变更为weber:find . -type f -user root -exec chown weber {} \;
grep match_patten file // 默认访问匹配行
在多级目录中对文本递归搜索(程序员搜代码的最爱):grep "class" . -R -n
grep -E 'ABC|CDE' 使用扩展正则
grep 单引号为raw,双引号需要转义,
-i 不区分大小写
-n 行号
-v
-A -B -C 前后多少行
-E(使用egrep更好一些) -r 查找所有子目录 -l 列出符合条件的文件名 --include="*.txt" 表示仅查找txt文件
xargs参数说明
- -d 定义定界符 (默认为空格 多行的定界符为 n)
- -n 指定输出为多行
- -I {} 指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时
- -0:指定0为输入定界符
sort参数:
- -n 按数字进行排序 VS -d 按字典序进行排序
- -r 逆序排序
- -k N 指定按第N列排序
uniq:消除重复
- 消除重复行sort unsort.txt | uniq
- 统计各行在文件中出现的次数sort unsort.txt | uniq -c
- 找出重复行sort unsort.txt | uniq -d
tr进行转换:
- 通用用法 echo 12345 | tr '0-9' '9876543210' //加解密转换,替换对应字符 cat text| tr '\t' ' ' //制表符转空格
- tr删除字符 cat file | tr -d '0-9' // 删除所有数字
- -c 求补集 cat file | tr -c '0-9' //获取文件中所有数字 cat file | tr -d -c '0-9 \n' //删除非数字数据
- tr压缩字符 tr -s 压缩文本中出现的重复字符;最常用于压缩多余的空格: cat file | tr -s ' '
cut按列切分文本:
- 截取文件的第2列和第4列 cut -f2,4 filename
- 去文件除第3列的所有列 cut -f3 --complement filename
- -d 指定定界符 cat -f2 -d";" filename
-
cut 取的范围
- N- 第N个字段到结尾
- -M 第1个字段为M
- N-M N到M个字段
-
cut 取的单位
- -b 以字节为单位
- -c 以字符为单位
- -f 以字段为单位(使用定界符)
paste按列拼接文本:
cat file1
1
2
cat file2
colin
book
paste file1 file2
1 colin
2 book
wc统计:
$wc -l file // 统计行数
$wc -w file // 统计单词数
$wc -c file // 统计字符数
sed单独分章:sed 's/text/replace_text/g' file
sed -n '2p' '1,3p' '/second/p' '/second/,4p' '/first/, /second/p' '1,4{=;p}' xxx.data 可使用正则
awk单独分章:awk ' BEGIN{ statements } statements2 END{ statements } '
磁盘管理
df -hT
du -sh
打包压包
tar -cvf etc.tar /etc <==仅打包,不压缩!
tar -xvf demo.tar
tar jxvf demo.tar.bz2
- -z 解压gz文件
- -j 解压bz2文件
- -J 解压xz文件
zcat/zmore/zless/zgrep 不解压就看内容
进程管理
ps -ef/aux/ajx
ps工具标识进程的5种状态码:
- D 不可中断 uninterruptible sleep (usually IO)
- R 运行 runnable (on run queue)
- S 中断 sleeping
- T 停止 traced or stopped
- Z 僵死 a defunct (”zombie”) process
参数:
- a 显示所有进程
- -a 显示同一终端下的所有程序
- -A 显示所有进程
- c 显示进程的真实名称
- -N 反向选择
- -e 等于“-A”
- e 显示环境变量
- f 显示程序间的关系
- -H 显示树状结构
- r 显示当前终端的进程
- T 显示当前终端的所有程序
- u 指定用户的所有进程
- -au 显示较详细的资讯
- -aux 显示所有包含其他使用者的行程
- -C<命令> 列出指定命令的状况
- –lines<行数> 每页显示的行数
- –width<字符数> 每页显示的字符数
- –help 显示帮助信息
- –version 显示版本显示
ps -p PID -o lstart 进程启动时间
ps -p 31107 -o lstart,etime
/var/log/messages 根据名字查找进程信息,比如是否崩溃 dmesg也可以查看
查看端口占用的进程状态:lsof -i:3306(端口号)
查看用户username的进程所打开的文件$lsof -u username
查询init进程当前打开的文件$lsof -c init
查询指定的进程ID(23295)打开的文件:$lsof -p 23295
查询指定目录下被进程开启的文件(使用+D 递归目录):$lsof +d mydir1/
lsof /bin/bash查找某个文件相关的进程
ls -i (tcp):列出所有的网络链接
lsof -d description 列出某个文件描述符相关的文件信息
lsof参数:
- -a 列出打开文件存在的进程
- -c<进程名> 列出指定进程所打开的文件
- -g 列出GID号进程详情
- -d<文件号> 列出占用该文件号的进程
- +d<目录> 列出目录下被打开的文件
- +D<目录> 递归列出目录下被打开的文件
- -n<目录> 列出使用NFS的文件
- -i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
- -p<进程号> 列出指定进程号所打开的文件
- -u 列出UID号进程详情
- -h 显示帮助信息
上传下载
wget url
常用选项:
- –limit-rate :下载限速
- -o:指定日志文件;输出都写入日志;
- -c:断点续传
- 使用wget下载单个文件
$wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip
重命名:
wget -O wordpress.zip http://www.minjieren.com/download.aspx?id=1080
伪装成浏览器下载:
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.minjieren.com/wordpress-3.1-zh_CN.zip
下载整个网站:
wget --mirror -p --convert-links -P ./LOCAL URL
下载整个网站到本地
- -miror:开户镜像下载
- -p:下载所有为了html页面显示正常的文件
- -convert-links:下载后,转换成本地的链接
- -P ./LOCAL:保存所有文件和目录到本地指定目录
SSH登陆:
$ssh ID@host
ssh登陆远程服务器host,ID为用户名。
ftp/sftp文件传输:
$sftp ID@host
登陆服务器host,ID为用户名。sftp登陆后,可以使用下面的命令进一步操作:
- get filename # 下载文件
- put filename # 上传文件
- ls # 列出host上当前路径的所有文件
- cd # 在host上更改当前路径
- lls # 列出本地主机上当前路径的所有文件
- lcd # 在本地主机更改当前路径
将本地localpath指向的文件上传到远程主机的path路径:
$scp localpath ID@host:path
以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath:
$scp -r ID@site:path localpath
类似的工具有rsync;scp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。rsync比scp会快一点,但当小文件多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
用户管理
$useradd -m username
该命令为用户创建相应的帐号和用户目录/home/username;
用户添加之后,设置密码:密码以交互方式创建:
$passwd username
$userdel -r username
不带选项使用 userdel,只会删除用户。用户的家目录将仍会在/home目录下。要完全的删除用户信息,使用-r选项;
帐号切换 登录帐号为userA用户状态下,切换到userB用户帐号工作:
$su userB
查看当前用户所属的组:
$groups
一个用户可以属于多个组,将用户加入到组:
$usermod -G groupNmame username
变更用户所属的根组(将用加入到新的组,并从原有的组中除去):
$usermod -g groupName username
统的所有用户及所有组信息分别记录在两个文件中:/etc/passwd , /etc/group 默认情况下这两个文件对所有用户可读:
查看所有用户及权限:
$more /etc/passwd
查看所有的用户组及权限:
$more /etc/group
chmod u/g/o/a + rwx yyy
/etc/profile,/etc/bashrc 是系统全局环境变量设定
~/.profile,~/.bashrc用户目录下的私有环境变量设定
当登入系统获得一个shell进程时,其读取环境设置脚本分为三步:
- 首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d和/etc/inputrc
- 读取当前登录用户Home目录下的文件~/.bash_profile,其次读取~/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系
- 读取~/.bashrc
w 查看活动用户
last 查看用户登录信息
lastlog
id xxx 查看系统是否存在xxx用户
系统管理
$uname -a
$lsb_release -a
$cat /proc/cpuinfo meminfo
arch
date
设置系统日期和时间(格式为2014-09-15 17:05:00):
$date -s 2014-09-15 17:05:00
$date -s 2014-09-15
$date -s 17:05:00
设置时区:
选择时区信息。命令为:tzselect
根据系统提示,选择相应的时区信息。
强制把系统时间写入CMOS(这样,重启后时间也正确了):
$clock -w
ipcs
显示当前所有的系统资源limit 信息:
ulimit – a
对生成的 core 文件的大小不进行限制:
ulimit – c unlimited
系统定时任务:crontab /etc/crontab一定要644权限
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
taskset -c -p <pid> 看进程被绑在哪个核
ldconfig命令的用途主要是在默认搜寻目录/lib和/usr/lib以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig,此执行程序存放在/sbin目录下。不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。
查看磁盘是否做了raid
dmesg |grep -i raid //有就是做了raid,raid卡,市场上99%服务器,基本都会是LSI的raid卡,都可以通过mega raid的工具进行管理
dmesg -T
cat /proc/scsi/scsi
图形显示框
whiptail --title "" --msgbox/yesno/inputbox "" height width 有返回值
设备操作
lspci -tv
lsusb -tv
mount /dev/sdb /home/host_vdb
umount /home/host_vdb
mke2fs -t ext4 -F /dev/vdb
2、特殊举例
1、删除除了某些个文件之外的文件
rm -fr !(file1)
如果是多个要排除的,可以这样:
rm -rf !(file1|file2)
2、查找服务的端口号
grep ssh /etc/services grep ftp /etc/services
精准定位:getent services ssh getent services 80
3、查看资源限制ulimit
ulimit -a
ulimit -n
–> 显示打开文件数限制ulimit -c
–> 显示核心转储文件大小umilit -u
–> 显示登录用户的最大用户进程数限制ulimit -f
–> 显示用户可以拥有的最大文件大小umilit -m
–> 显示登录用户的最大内存大小ulimit -v
–> 显示最大内存大小限制
4、查看内核模块lsmod
显示内核模块最简单的方法是使用 lsmod
命令。
查看系统中可用的模块数:modprobe -c
Linux 提供了几条用于罗列、加载及卸载、测试,以及检查模块状态的命令。
depmod
—— 生成modules.dep
和映射文件insmod
—— 一个往 Linux 内核插入模块的程序lsmod
—— 显示 Linux 内核中模块状态modinfo
—— 显示 Linux 内核模块信息modprobe
—— 添加或移除 Linux 内核模块rmmod
—— 一个从 Linux 内核移除模块的程序
5、显示程序共享库
ldd /bin/date
6、某个命令不会用时,有几个方法
which查看命令位置
whatis 查看简要说明
更详细的信息用info
用man查看,有时候命令和函数是一个名字,用man的数字分类查看即可:
(1)、用户可以操作的命令或者是可执行文件
(2)、系统核心可调用的函数与工具等
(3)、一些常用的函数与数据库
(4)、设备文件的说明
(5)、设置文件或者某些文件的格式
(6)、游戏
(7)、惯例与协议等。例如Linux标准文件系统、网络协议、ASCⅡ,码等说明内容
(8)、系统管理员可用的管理条令
(9)、与内核有关的文件
7、积累
du -ah --max-depth=1 ./ 在本层统计文件大小占用
find . -size +100M
fdisk -l |grep Disk
lsblk 查看硬盘和分区分布
df -hT
echo 3 > /proc/sys/vm/drop_caches 释放缓存内存
blkid /dev/sdb1 获取磁盘uuid
findmnt -l 查看所有挂载
Linux 计算机中的内存总量是 RAM + 交换分区,交换分区被称为虚拟内存。
xargs -dX -n2,定界符,输入分成几行。cat arg.txt | xargs -I {} ./sk.sh -p {} -l 参数替换。
cal显示日历,chsum,校验crc
pstree 可查看父进程的所有子进程(谁被谁拉起)
dirname/basename
stat xxx 查看文件修改状态
kill -6 pid 手工使进程产生coredump文件
ctrl-r 搜索命令行历史记录
!$, 它用于指代上次键入的参数,而 !! 可以指代上次键入的命令了
find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
man 7 signal
nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。nohup command > myout.file 2>&1 &
shellcheck工具,检查shell脚本规范性
命令行的 128K 限制。使用通配符匹配大量文件名时,常会遇到“Argument list too long”的错误信息。(这种情况下换用 find 或 xargs 通常可以解决。
配置文件格式:HTML、XML、JSON、PROTOBUF、csv、yaml
truncate -s 0 access.log
curl -I url 测试网站
wget --spider URL 测试网站
文本文件的交并差:
sort a b | uniq > c # c 是 a 并 b
sort a b | uniq -d > c # c 是 a 交 b
sort a b b | uniq -u > c # c 是 a - b
检测文件的更改: watch -d -n 2 'ls -rtlh | tail'
yes命令在命令行中输出指定的字符串,直到yes进程被杀死
env和printenv均可以打印当前系统的环境变量
系统时间同步:
ntpq -p //ntp检查
ntpstat // 命令检查 NTP 状态
timedatectl
Chrony 是一个 NTP 客户端的替代品。它可以更快地同步系统时钟,时间精度更高,对于一直不在线的系统尤其有用。chronyc tracking
求占用率 df -k 1K-block
find "+path+" -xdev -maxdepth 1 -type f -mmin +%d 多少分钟以前的文件
base64加解密:
从标准输入中读取数据,按Ctrl+D结束输入。将输入的内容编码为base64字符串输出。
格式:echo "str" | base64
将字符串str+换行 编码为base64字符串输出。
格式:echo -n "str" | base64
将字符串str编码为base64字符串输出。注意与上面的差别。
格式:base64 file
从指定的文件file中读取数据,编码为base64字符串输出。
解密:base64 -d
tee:重定向到文件并在屏幕上打印输出 echo 'Debug: this is a debug infor.' | tee _log
expr和bc进行数学计算:echo 300 + 5 |bc
计算md5:echo 123|md5sum
du -h --max-depth=1
强制卸载:
fuser -kvm /home
umount -l /home 强行解除挂载
2020.04.19
1、判断远程端口是否开启的方法
nc
:netcat 是一个简单的 Unix 工具,它使用 TCP 或 UDP 协议去读写网络连接间的数据。nmap
:(“Network Mapper”)是一个用于网络探索和安全审计的开源工具,被设计用来快速地扫描大规模网络。telnet
:被用来交互地通过 TELNET 协议与另一台主机通信。
# nc -zvw3 192.168.1.8 22
nc
:即执行的命令主体;z
:零 I/O 模式(被用来扫描);v
:显式地输出;w3
:设置超时时间为 3 秒;192.168.1.8
:目标系统的 IP 地址;22
:需要验证的端口。
nc -vv ip port
2、系统性能分析
https://blog.csdn.net/chenkaifang/article/details/96473085
3、查看系统版本
cat /etc/*-release
uname -a
uname -mrs
cat /proc/version
20200614
1、登录linux系统后,与其他登录的linux用户通信
wall xxx 广播信息
单播信息:write user_name, 输入要发送的消息,ctrl+c
talk
和 ytalk
命令让你可以和一个或多个用户进行交互式的聊天
talk -h 192.168.0.11 nemo,和非本机通信
2、设置定时任务
at 6PM tomorrow
at noon April 15 2021
at noon + 5 days
at 9:15 + 1000 days
输入命令,ctrl+d,结束。命令里可带入自己写好的脚本
atq查看作业队列
atm 32取消某个作业
at -c 36 | tail -6 查看任务详细信息
3、二进制文件分析
file xxx查看文件类型
ldd xxx查找可执行文件依赖的库
ltrace 库调用追踪器
hexdump -C xxx|less
strings xxx 查看二进制文件的可打印字符
https://linux.cn/article-12187-1.html
20200625
1、查看文件内容
cat/more/less/head/tail
more只能一行一行往下翻;less 可以用方向键上下翻屏;
od -bc arrow.jpg | head -12, 能够以常规文本和一系列 ASCII 值(即该文本在文件中的实际编码方式)的形式查看文件,如这里和file命令的作用类似。
2、source
source命令作用类似与import,include,用于导入函数、变量到当前的工作环境,你可以导入自己写的脚本,函数,导入时会执行脚本里的工作流。
3、将当前server上运行的进程以时间排序,作为monitor之用
ps -aux --sort=start_time > monitor_xxx.txt
20200913
unzip -l xx.zip,不解压文件看文件目录
unzip xx.zip "*content" -d /root/target_dir 解压指定文件到指定目录,可以用正则