-
Notifications
You must be signed in to change notification settings - Fork 0
basic_cmd
wzs edited this page Aug 27, 2018
·
1 revision
多看help和man
Bash编程
- shell命令可以添加
-v参数从而在运行时输出日志. 最多加三个,越多日志信息越详细. 如ls -vvv -
ctrl+z: 暂停进程并且将进程放入后台,jobs: 显示当前暂停的进程,bg: 使进程在后台执行,fg: 使进程在前台执行 - ln 默认或-s 指定软连接, -n硬链接
- 设置时间:
date -s "yead-mon-day h:m:s"-
date %H_%M -d 'string': 以指定格式输出给定的时间字符串 - 获取服务器时间:
ntpdate us.pool.ntp.org
-
-
计数命令:
wc -l out, 统计输出 -
du -h: 统计文件夹大小 -
w: 查看登录用户的信息-
pkill: T人
-
- 相对路径方式:
./test.sh - 绝对路径方式:
/tmp/test.sh - bash命令调用:
/bin/bash /tmp/test.sh - 添加空格的相对/绝对路径:
. /test.sh或. /tmp/test.sh - 四种方式区别
- 1 2 都需要提前赋予脚本可执行权限, 3 是把脚本当做bash的调用, 所以不需要可执行权限
- 1 2 3 都是在当前shell开启子shell,然后执行脚本(Linux的环境变量具有继承性, 子shell会继承父shell的环境变量, 但是父shell得不到子shell的环境变量)
- 4 是在当前shell执行脚本
- 作用: 忽略所有挂断(SIGHUP)信号
-
-d 或者 &后台继续执行
-
- 执行流程
- 示例: ssh登陆服务器运行某进程时, 若断开连接, 那么便会发送SIGHUP(挂断)信号, 退出前后台进程
- 原因: ssh连接服务器时, 会启动一个bash, 在此bash中, 所有的进程都是bash fork() 然后 exec() 出
- 如果 nohup 执行的命令需要输入, 可以先前台执行, 然后使用
ctrl + z强制停止当前进程,并且转至后台, 然后使用bg使程序在后台执行
apt update # 更新源
apt upgrade # 更新所有已安装的软件包
apt-get dist-upgrade # 更新整个系统到最新的发行版
apt-get -f install # 修正依赖,然后安装
apt-get autoclean # 删除 已删除软件的deb安装包
apt-get clean # 删除所有软件的deb安装包
# 安装包缓存的路径为/var/cache/apt/archives,使用 du -sh /var/cache/apt/archives 查看包缓存占用的硬盘空间
dpkg-reconfigure foo # 重新配置 foo 包
dpkg --set-selections # 从 STDIN 设置包的selections(如锁定版本)
# --get/clear-selections
apt-show-versions -u # 查看系统中那些包可以更新
apt remove foo # 删除 foo 包,但是保留配置文件
# --purge # 不保留配置文件
apt-get autoremove # 删除为了满足其他软件包的依赖而安装的,但是现在不需要的包
apt-cache search foo # 搜索和 foo 匹配的包
apt-cache show foo # 显示 foo包 的相关信息
dpkg -l *foo* # 显示 foo包 的相关信息,并且显示每个包是否安装
# 支持正则匹配查找
dpkg -L foo # 显示 foo包 都安装了哪些文件,以及他们的路径
dlocate file # 在已安装的包中, 查找foo文件属于那个包
apt-file search file # 查找foo文件属于那个包,包括源和本地. 需要保持 apt-file 数据库索引的更新
apt-cache pkgnames # 快速列出已安装的软件名称- 为apt设置代理
- 在Ubuntu 10.10及以后版本中, apt-get不再读取
$http_proxy变量, 所以不能使用$http_proxy环境变量 - 临时为apt设置代理:
apt-get -o Acquire::http::proxy="http://proxyIP:proxyPort/" update - 永久为apt设置代理: 修改
/etc/apt/apt.conf或者~/.bashrc配置文件, 添加Acquire::http::Proxy "http://proxyIP:proxyPort";即可 - 或者使用指定配置文件:
apt-get -c ~/apt_proxy.conf update
- 在Ubuntu 10.10及以后版本中, apt-get不再读取
- 在
/etc/profile或者~/bashrc.rc文件中, 可以给命令/语句添加别名(可以理解为命令的快捷方式) - 添加完成后需要使用
source /etc/profile使修改生效 - 示例:
alias chrome_stdout='google-chrome --headless --disable-gpu --dump-dom $1' -
=附近不能有空格,$1表示参数, 不传参数时可以直接写固定值
-
>清空然后输入,>>追加. 没有文件时都会创建文件 - 标准IO流
- STDIN 0 :
/dev/stdin -> /proc/self/fd/0 - STDOUT 1 :
/dev/stdout -> /proc/self/fd/1 - STDERR 2 :
/dev/stdout -> /proc/self/fd/2
- STDIN 0 :
- 示例
# 标准输出和标准错误都重定向到/dev/null ls 1>/dev/null 2>/dev/null # STDOUT 和 STDERR # 猜测:ls 2> tt.txt & 1> tt.txt ls 2>&1 tt.txt # PS:不知道为什么, 我使用 &> / 2>&1 会直接输出到屏幕上, 重定向失效
- TOP: 实时动态显示系统进程
- PS: 返回系统当前状态的快照
- PSSTR: 树状格式显示进程
-
wc -l <文件名>输出行数统计 -
wc -c <文件名>输出字节数统计 -
wc -m <文件名>输出字符数统计 -
wc -L <文件名>输出文件中最长一行的长度 -
wc -w <文件名>输出单词数统计 - 举例: 统计文件个数:
ls -l|grep "^-"| wc -l -
d表示不包含子目录:grep "^d"
- 添加无shelle权限的用户
# 添加一个用户给 Privoxy echo 'privoxy:*:7777:7777:privoxy proxy:/no/home:/no/shell' >> /etc/passwd # 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell # 分配个组给 Privoxy echo 'privoxy:*:7777:' >> /etc/group
-
/etc/profile:环境变量配置文件, all_user 永久生效-
~/.bashrc: 每个用户自己的环境变量设置
-
-
source /etc/profile:立即更新配置文件 -
echo $JAVA_HOME:测试是否添加成功 - 示例
vi /etc/profile export JAVA_HOME=/usr/local/jdk1.8 export PATH=$JAVA_HOME/bin:$PATH
- dirname/basename: 打印目录或者文件的基本名称
- 示例
pwd # /home/wzs/go/src dirname $PWD # /home/wzs/go basename $PWD # src basename test.sh .sh # test basename $PWD/test.sh # test.sh
-
!$将上一条命令的参数传递给下一条命令参数 - 剪切板_xsel: 复制粘贴扩展. 复制输出到剪切板:
cat ..|xsel -b -i(--input), 清除剪切板:xsel -c- 参考: https://github.com/kfish/xsel, 可采用中键,
ctrl c/v方式
- 参考: https://github.com/kfish/xsel, 可采用中键,
IBM文档参考: https://www.ibm.com/developerworks/cn/linux/l-cn-filetransfer/
- scp: 远程cp命令, 命令格式同cp:
cp -options sourcePath destPath - rsync: 远程数据同步工具只同步源文件和目标文件的不同之处
- 参考: http://roclinux.cn/?p=2643
- rsync数据同步参考
- 命令格式:
rsync main.c machineB:/home/userB -
-l: 确保数据的一致性, 逐个文件去检查 -
-z: zip压缩(gzip算法) - `` | --partial: 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
- sftp: 文件传输协议. 与ftp协议类似, 只不过sftp依附于sshd服务, 不需要安装其他程序.
- Vscode sftp插件
- github介绍地址
- 按 F1 快捷键, 输入 SFTP可查看相关命令
- 通常情况下配置host,port,name,passwd和remotePath即可.
- syncMode 默认为update,表示只提交已存在文件内的更改. 修改为full时表示全部更新(包括添加的文件和删除的文件)(full需要登录user有相应的权限)
- 格式:
awk -F ',' cmd, 注意, 执行cmd时, awk已经将文件拆分成行且每次传入一行到cmd中处理, 而非传入所有行- cmd格式:
[BEGIN{}] [[NR==?]{}] [END{}], 三个都是可选的,BEGIN{}:逐行读入之前执行,{}:每一行的处理,END{}:.. -
[[NR==i],[NR==j]...{}]表示当在第i/j行时进行处理; NR 表示当前行号
- cmd格式:
-
awk -F ',': 设置切分每行的分隔符 - awk 内函数并不能执行bash命令, awk编程与bash编程是不同的. 参考: https://www.cnblogs.com/mchina/archive/2012/06/30/2571317.html
#!/bin/bash // 以指定的格式 +%H_%M 输出目录下所有文件中的时间. 时间在每一行的第二个以 , 分割的位置上 for file in $(ls) do cat $file | awk -F ',' '{ // 使用 \ 作为转义符, 但是需要 "" 修饰. cmd 即为命令的 字符串格式 cmd="date +%H_%M -d ""\"" $2 "\"" // 只能通过 system() 或者 getline // system() 执行的命令会将输出打印到屏幕(貌似没有办法关闭) tt=system(cmd) // 或者 getline cmd // close 用来关闭执行的cmd close(cmd) // 在 awk 内定义的变量并不需要 `$` 来取值 if(index(tt,$file)!=0){ print "---------------------------" } }' done
- 格式:
sed [-options] cmd file-
-f filename: 直接将sed的操作写到文档里 -
-i:直接修改读取的档案内容,而不是由萤幕输出 -
-n:只有处理过得行才会输出 (默认全部STDIN输出)
-
- 常用命令: 类似于vim中匹配的语法,
选项/old/new/g.-
a∶append,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)-
sed '1a add_new_line' file,sed '1,2a add_new_line_2' file
-
-
c∶取代, c 的后面可以接字串,直接取代 n1,n2 之间的行-
sed '1,3c replace_line_1_3' file: 替换整行
-
-
s:取代,可以搭配正则-
sed 's/old/new/' file: 替换当前行的一部分 -
sed '1s/old_line/new_line': 替代整行
-
-
d∶删除 -
i∶insert,后面接字串, 会在新的一行出现(目前的上一行)-
sed -i '$a bye' file: 最后一行插入bye
-
-
p∶列印, 同时打印操作的列
-
- 参考
- curl: 请求发送工具+请求发送库,支持上传和下载
- 可以使用postman等GUI工具替代
- wget: 非交互式的文件下载工具
- 区别: wget支持断点下载(-c), curl模拟请求的库很多
- 下载jdk示例:
wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz-
-c: 支持断点下载 -
--header: 下载所使用的请求头
-
- SSH免密登录流程
- ssh客户端使用 ssh-keygen 生成公钥/秘钥.
ssh-keygen -t rsa -f ~/.ssh/file. 不需要密码则一直回车即可 - 复制 .pub 公钥文件到sshd服务端的
~/.ssh/authorized_keys中ssh-copy-id -i file.pub [email protected]-
scp file.pub [email protected]:~/.ssh/然后在服务器端,cat ~/.ssh/file.pub>> ~/.ssh/authorized_keys
- 修改服务器文件权限
chmod 600 authorized_keys chmod 700 ~/.ssh - 修改 sshd 配置
# sudo vim /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes - 验证完毕后, 可以关闭密码登录:
PasswordAuthentication no
- ssh客户端使用 ssh-keygen 生成公钥/秘钥.
- SSH免密登录多台机器
- 一对公钥/私钥可以重复使用到多台服务器, 所以大多数情况没有必要生成多个
- 将公钥复制到服务端后, 在客户端创建
~/.ssh/config文件, 添加以下配置Host server1 HostName 172.26.10.20 User root IdentityFile /root/.ssh/server1 - 使用
ssh server1即可免密登录服务器. 如需添加多台,再添加配置文件即可
- 如果遇到什么问题
- 使用
-vvv参数查看调试 - 查看man文档, 研究下配置文件以及其注释说明
- 使用
参考: 临时设置
- 全局代理: 使用 http_proxy环境变量
export http_proxy="http://192.168.1.2:8118"export https_proxy="https://192.168.1.2:8118"- 验证是否成功:
curl --proxy http://127.0.0.1:8087 --insecure http://ip.chinaz.com/getip.aspx - 取消代理:
export https_proxy=""
-
dmidecode命令: 获取 Linux 下各个硬件的信息- DMI: 在遵循 SMBIOS规范 的前提下,收集电脑系统信息.
- SMBIOS(System management BIOS)规范: 主板或系统制造者以标准显示产品管理信息所遵循的统一规范
- dmidecode: 将 dmi 数据库中的信息解码以可读的文本展示
- 查看显卡信息:
lspci | grep -i vga- 根据编号查看显卡详细信息:
lspci -v -s ID - NVIDIA信息:
nvidia-smi
- 根据编号查看显卡详细信息:
- 查看网卡信息:
lspci | grep -i 'eth'-
ip/ifconfig:iproute/net-tools
-
- 查看CPU信息:
lscpu- 每个CPU信息:
cat /proc/cpuinfo
- 每个CPU信息:
- 查看内存信息:
free -m- 查看内存使用情况:
cat /proc/meminfo
- 查看内存使用情况:
- 查看硬盘信息:
lsblk- 查看分区信息:
fdisk -l - 查看使用情况:
df -hl
- 查看分区信息:
https://www.ibm.com/developerworks/cn/aix/library/au-lsof.html
- lsof:
list open files, 即列出打开的文件. - 默认输出文件格式如下, 文件描述符对照表暂时没有整理
| 进程名称 | PID | USER | 文件描述符 | 文件格式描述 | 磁盘名称 | SIZE/OFF | NODE | NAME |
|---|---|---|---|---|---|---|---|---|
| COMMAND | PID | USER | FD | TYPE | DEVICE | SIZE/OFF | NODE | NAME |
| systemd | 1 | root | rtd | DIR | 8,8 | 4096 | 2 | / |
-
/proc目录: 包含内核和进程树的相关的各种文件. 这些文件和目录并不存在于磁盘中, 因此当您对这些文件进行读取和写入时, 实际上是在从操作系统本身获取相关信息- 大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中, 所以
/proc/1234中包含的是 PID 为 1234 的进程的信息 - 在进程目录中d额各种文件包含了 进程的内存空间,文件描述符列表,指向磁盘上的文件的符号链接和其他系统信息 等各种数据.lsof程序 使用该信息和其他关于内核内部状态的信息来产生其输出.
- 大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中, 所以
- 常用用法
-
lsof -p pid: 根据进程号筛选输出 -
lsof -d txt: 根据文件类型筛选 -
lsof /: 根据文件筛选
-
- 使用lsof恢复删除文件
- 原理: 当删除文件时, 如果有用户/进程仍在使用这个文件,那么这个文件其实并没有被真正删除. 因为进程并不知道文件已经删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入.除了该进程之外, 这个文件是不可见的, 因为已经删除了其相应的目录条目.
- 恢复方法
- 使用lsof查看是否有进程正在使用此文件:
lsof|grep /delete_file,假设结果如下httpd 2452 root 2w REG 33,2 499 3090660 /delete_file(deleted)httpd 2452 root 7w REG 33,2 499 3090660 /delete_file(deleted)- 文件描述符2表示标准错误; 所以下面那行是有效的.
- 在
/proc/pid/fd/fdNum文件夹查找响应文件. 此示例中文件夹为:/proc/2452/fd/7- 此时可以通过 cat/cp/ 等等命令恢复文件(此时文件很可能已经损坏,所以建议先CP复制文件后,再查看文件)
- 使用lsof查看是否有进程正在使用此文件:
限制系统用户对shell资源的访问 ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。
作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户
-
ulimit -a: 显示所有当前shell资源限制 - 查看所有进程的文件:
lsof |wc -l - 查看某个进程打开的文件数:
lsof -p pid |wc -l - 临时更改进程打开的文件数限制为8096:
ulimit -n 8096
-
2017年 08月 13日 星期日 01:36:53 CST更新
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main universe restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main universe restricted