shell命令积累

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进程时,其读取环境设置脚本分为三步:

  1. 首先读入的是全局环境变量设置文件/etc/profile,然后根据其内容读取额外的文档,如/etc/profile.d和/etc/inputrc
  2. 读取当前登录用户Home目录下的文件~/.bash_profile,其次读取~/.bash_login,最后读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系
  3. 读取~/.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          解压指定文件到指定目录,可以用正则 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值