Skip to content

Latest commit

 

History

History
281 lines (202 loc) · 15.8 KB

File metadata and controls

281 lines (202 loc) · 15.8 KB

shell手册

[TOC]

命令

查看文件/目录

命令 说明 选项
ls 列出当前目录下的文件和文件夹 - a 显示所有文件及目录(包括隐藏文件)
- l 除文件名外,文件类型,权限,大小等信息也列出来
- R 如果目录下面有文件,也列出来
find 查找文件 - name 查找指定名称的文件
- depth 先找当前目录的文件,再找子目录
- user 按照文件所属人来查找
- group 按照文件所属组来查找
- mtime -n +n 按照文件的更改时间来查找,-n表示距离现在n天以内的文件,+n表示距离现在n天以前的文件
- size n[c] 查找文件长度为n块(1块=512字节)的文件,带c时文件长度以字节计
- mount 查找时不跨越文件系统的挂载点
- exec 找到文件后执行shell命令
- ok 更安全版本的exec命令,每步都要确认
- TODO
grep 查找文件内容 - ? 同时显示匹配行的上下?行
- c 只打印匹配的行数,不现实匹配的内容
- e 正则匹配
- h 不显示匹配的文件名前缀
- i 不区分大小写
- l 列出匹配到的文件清单
- n 在匹配的行前面打印行号
- TODO
df 查看磁盘分区使用情况 - h 使用人类可读格式列出信息
du 查看目录/文件大小 - h 以高可读性列出信息
- s 仅列出总计
- D 列出符号链接指向的文件大小
- k 以kb为单位列出信息
# 示例
ls -al # 列出所有的文件和文件夹(包括隐藏的);

find ~/tmp -name 1.txt  # 在`~/tmp`目录下查找名为1.txt的文件
find ~/tmp -mtime -3 +15 *.txt # 在`~/tmp`中查找3天内或15天前的txt文件
find ~/tmp -size +1M # 查找`~/tmp`中大于1M的文件
find ~/tmp -size +1M -a -size -1G # 查找`~/tmp`中大于1M小于1G的文件
find ~/tmp -name 1.txt -exec rm {} \ # 查找`~/tmp`中名为1.txt的文件并删除

grep -2 "hello" *.txt # 查找所有包含hello的txt文件,同时显示匹配行的上下2行
grep -l "hello" *.txt # 查找所有包含hello的txt文件,并把他们的名字列出来
grep -r "hello" ./ # 递归搜索当前目录下的包含"hello"的文件

df -h # 显示磁盘使用情况

du -sh tmp # 以人类可读的方式显示tmp文件夹大小
du -sh * # 查看当前文件夹下目录大小

复制,移动,删除文件和目录

命令 说明 选项
scp 上传本地文件/文件夹到远程
远程下载文件/文件夹到本地
- r 递归
- C 压缩
- q 静默
- v 详细
- l 带宽限制
# 示例
scp -r 用户名@远程ip:远程路径 本地路径 # 从远程下载文件夹到本地
scp -r 本地目录 用户名@远程ip:文件路径 # 上传本地目录到远程

压缩, 解压

命令 说明 选项
tar 压缩/解压文件或文件夹 - c 建立新的备份
- z 以gzip命令处理文件
- x 从备份文件中还原文件
- v 显示执行的过程
- f 指定备份文件
- t 列出备份文件的内容
zip 压缩成zip文件 - q 表现时指令执行过程
- r 递归处理
- d 从压缩文件内删除指定的文件
- v 显示指令执行过程
unzip 解压缩zip文件 - l 显示压缩文件内所包含的文件
- d 解压到指定目录
rar 压缩成rar文件
urar 解压缩rar文件
# 示例
tar -czvf 1.tar.gz 1.txt # 将1.txt压缩为1.tar.gz
tar -tzvf 1.tar.gz # 列出压缩文件1.tar.gz的内容
tar -xzvf 1.tar.gz # 解压文件1.tar.gz
tar -xvf 1.tar.xz # 解压文件1.tar.xz

zip -qr test.zip ~/test # 将test目录压缩成test.zip文件
zip -dv test.zip /home/he/test/1.txt # 删除test.zip文件中的1.txt文件

unzip -l test.zip # 查看压缩文件`test.zip`中包含的文件
unzip test.zip -d ~/tmp #将文件`test.zip`解压到目录`~/tmp`

进程管理

命令 说明 选项
bg
lsof 查看当前系统文件 - a 列出打开文件存在的进程
- c 里处指定进程所打开的文件
- g 列出GID好进程详情
ps 查看进程快照信息 - a 显示同一终端下的所有程序
- A 显示所有进程
- e 等同于"-A"
- f 显示程序间的关系
- u 指定用户的所有进程
- H 显示树状结构
- au 显示较为详细的资讯
- aux 显示所有包含其它使用者的行程
二级选项:
-- lines 行数 每页显示的行数
-- width 字符数 每页显示的字符数
top 查看进程持续信息 - c 切换显示模式
- q 无延迟显示
- i 不显示闲置和僵尸进程
- n 设置更新次数
- d 设置更新时间
- p 指定进程id

行内命令:
空格键 立即刷新
P 以占据CPU百分比排序
M 以占据内存百分比排序
T 以累积占用CPU时间排序
t 显示或隐藏进程和cpu状态信息
s <秒数> 修改刷新时间间隔
k <进程id> <enter> <信号> 杀死指定id的进程
nohup 后台运行程序
screen 分屏/共享屏 - A 将所有的视窗都调整为目前终端机的大小
- d 将指定的screen作业离线
- h 指定视窗缓冲区行数
- r 恢复指定的离线screen作业
- x 恢复之前离线的screen作业
- S 指定screen作业名称
- ls 显示目前所有的screen作业
kill 杀进程 - `9
lsof | wc -l # 查看当前系统打开的文件数量
lsof -p xx | wc -l # 查看当前进程xx打开的文件数量

ps -aux | grep he # 查看用户he的所有进程]
ps -ef # 显示所有进程信息,包括进程的命令行
ps -axjf # 列出程序树信息
ps -aux|egrep '(vim|chrome)' # 列出与vim或chrome相关的进程

top -d 2 # 2秒刷新一次信息
top -p 2444 # 只显示进程2444的信息
#杀死id为2444的进程
top
>> k 2444
>> 15

nohup chrome & # 后台运行chrome并在当前目录生成一个默认名为nohup.out的日志文件
nohup chrome &>/dev/null & # 后运行chrome,同时不生成日志文件
nohup chrome >test.log 2>&1 & # 后台运行chrome,同时输出到日志文件test.log

screen # 创建screen作业
screen -ls # 列出所有的作业
screen -x he # 恢复一个名叫he的screen作业
# 创建一个名叫he的screen作业
screen -S he 
   <Ctrl+a+d> # 离开当前screen作业(注意:此作业会继续保留)
   exit # 直接退出当前作业,不保留
   
kill -9 1234 # 使用最高等级杀id为1234的进程i

调试

命令 说明 选项
ldd 查看程序的依赖共享库列表 - v 详细模式
- u 打印未使用的依赖
- d 执行重定位和报告任何丢失的对象
- r 执行数据对象和函数的重定位,并且报告任何丢失的对象和函数
which 查看命令的可执行文件路径 - n <数字> 指定文件名最小长度
- p+数字 指定文件完全路径最小长度
- w 指定输出时栏位宽度
- V 显示版本信息
tail 查看日志 - f TODO
file 查看文件类型 - b 不显示文件名
- c 显示指令执行过程
- f 指定文件名
- L 直接显示符号链接所指向的文件类型
- m 指定魔法数字文件
- v 显示版本信息
- z 解读压缩文件的信息
nm 查看文件的符号信息 - a 显示所有符号
- D 显示动态符号(对动态链接库有效)
- g 只显示外部符号
- l 使用debug信息找到文件名和行号
- n 按符号对应地址的顺序排序
- p 按照目标文件中遇到的符号顺序显示,不排序
- P 按照POSIX2.0标准格式输出
- r 反转排序
- s 当列出库中成员的符号时,包含索引
- u 只显示未定义符号

二级选项
--defined-only 只显示定义的符号
--no-demangle 默认选项,不将低级符号名解析成用户级名字
strings
size 查看文件各段和总和大小
readelf 查看ELF格式的文件信息 - h 显示文件开始的文件头信息
- l 显示程序头信息
- S 显示节头信息
- g 显示节组信息
- t 显示节点的详细信息
- s 显示符号表段中的项
- e 显示全部头信息
- n 显示内核注释信息
- r 显示可重定位段的信息
- u 显示unwind段信息
- d 显示动态段信息
- V 显示版本段信息
- A 显示CPU架构信息
- l 显示bucket list长度的柱状图
- x 以16进制方式显示指定段内内容
- D 使用动态段中的符号表显示符号,而不是使用符号段
- a 显示全部信息
- v 显示readelf的版本信息
- H 显示帮助信息
objdump 反汇编程序 - c
- x
addr2line 翻译出错信息,定位出错的代码位置 - e
# 示例
ldd cmake # 列出cmake的所有依赖

which bash # 显示bash可执行程序的绝对路径

tail -f 007.log # 查看007.log这个文件最新的内容

file /usr/local/bin/lua # 显示文件的文件类型
file -L /bin/dd # 显示链接指向的文件类型

nm /bin/dd |grep copy # 查看程序是否包含copy函数

readelf -x 1 hello.so # 以16进制方式显示文件`hello.so`中段索引为1的内容

addr2line -e hello 40053b # 翻译hello的报错信息40053b,定位到源码位置

网络

命令 说明 选项
ifconfig 查看,设置网络接口属性 - a 所有网络接口
- down 关闭指定的网络设备
- up 开启指定的网络设备
netstat 查看网络使用情况 - a 列出所有连线中的socket
- c 持续列出网络状态
- e 显示网络其它相关信息
- F 显示路由缓存
- i 显示网络界面信息表单
- l 显示监控中的服务器的socket
- n 直接使用IP地址,不通过域名服务器
- o 显示计时器
- p 显示正在使用socket的程序识别码和程序名称
- t 显示tcp的连线状况
- u 显示udp的连线状况
ufw 防火墙设置 - status 查看端口开放情况
- allow 开放端口
-enable 开启防火墙
-reload 重启防火墙
# 示例
ifconfig eth0 down # 禁用网卡eth0
ifconfig eth0 up # 启用网卡eth0
ifconfig -a # 查看系统的所有网络接口

netstat -tunlp | grep 10086 # 查看端口10086占用情况
netstat -i # 显示网卡列表
netstat -nu # 显示udp连接情况
netstat -apu # 显示udp端口使用情况

ufw allow 8080 # 开放8080端口
ufw enable # 开启防火墙
ufw reload # 重启防火墙

系统

命令 说明 选项
source 使设置生效
su 切换账户
ulimit 资源限制
# 示例
source /etc/profile # 让profile配置生效

su he # 切换到账户he

ulimit -c # 查看core文件配置,0表示未开启
ulimit -c unlimited # 不限制core文件大小
ulimit -c 1024 # 限制core文件最大为1024kb

硬件相关

命令 说明 选项
uname 查看内核/操作系统 - a 显示全部信息
- m 显示电脑类型
- n 显示网络上主机名称
- r 显示操作系统的发行编号
- s 显示操作系统名称
lscpu 查看cpu信息(更详细的信息用命令: cat /proc/cpuinfo)
free 查看内存信息(更详细的信息用命令:cat /proc/meminfo) - m 以MB为单位
- k 以KB为单位
- g 以GB为单位
- t 显示内存总量
fdisk 查看磁盘信息 - l 列出所有分区表
- u 显示区分数目
- s 指定分区
lspci 查看PCI总线信息(包括显卡,网络,usb,SATA控制器等) - n 以数字方式显示PCI厂商和设备代码
- t 以树桩形式显示PCI设备的层次关系
- b 以总线为中心的视图
- s 仅显示指定总线插槽的设备和功能块信息
- i 指定PCI编号列表文件,不使用默认文件
- m 以机器可读方式显示PCI设备信息
# 示例
uname -a # 显示系统信息
uname -s # 显示操作系统信息

free -m # 查看内存情况(MB)
free -g # 查看内存情况(GB)

fdisk -l # 查看磁盘信息

lspci |grep -i 'eth' # 查看网卡硬件信息

第三方软件

命令 说明 选项 常用
tree 查看文件夹树形结构 - TODO tree 列出树状文件结构
gdb

环境变量

变量 描述
* 含有所有命令行参数(以单个文本值的形式)
@ 含有所有命令行参数(以多个文本值的形式)

修改用户默认目录

  1. /etc/passwd中找到当前用户的目录配置并修改

    vim /etc/passwd
    
    # 修改目录:smy:x:1000:1000:Shelming.Song:/home/smy:/bin/bash -> smy:x:1000:1000:Shelming.Song:/root:/bin/bash
  2. 保存并重启


Shell脚本

自动输入密码

通过shell自动输入密码有以下几种方式:

  • 通过管道

    例子:自动安装gdb

    #!/bin/sh
    
    passwd=root123
    echo $passwd|sudo -S apt-get install 
  • 通过重定向

    例子:自动安装g++

    #!/bin/sh
    
    passwd=root123
    sudo apt-get install g++ << EOF
    $passwd
    y
    EOF