帮助类命令

  1. man command // 详细列出命令所有参数含义
  2. whatis command // 简要说明作用
  3. whatis -w "loca*" // 正则匹配
  4. info command // 详细说明命令作用
  5. which command //查看命令的binary文件所在路径
  6. whereis command // 查看程序的搜索路径

文件及目录管理

创建和删除

mkdir // 创建
rm // 删除
rm -rf 目录名 // 删除非空目录
rm *log = find ./ -name "*log" -exec rm {} \ // 删除日志
mv // 移动
mv old_directory_name/ old_directory_name/ // 移动目录到新目录下
mv old_directory_name/* old_directory_name/ // 移动旧目录中全部内容到新目录下
cp // 复制
cp -r // 复制目录
find ./ | wc -l // 查看当前目录下文件个数

切换目录

cd // 切换目录
cd - // 切换上一个目录
cd or cd ~ // 返回home目录
pwd // 显示当前路径

列出目录项

ls // 显示所有
ls -lrt // 按时间排序
ls -a // 查看隐藏文件

可通过设置别名的方式来缩写命令,修改/home/用户名/.bashrc 中命令 alias lsl=’ls -lrt’

查找目录和文件

# find是实时查找,相对较慢
find ./ -name "core*" | xargs file // 查找文件或目录
find ./ -name '*.o' // 查找目标文件夹中是否有目标名称文件
find ./ -name "*.o" -exec rm {} \ // 删除目录中所有目标名称文件

# locate以文件系统建立索引数据库,当文件更新,定期执行更新命令来更新索引库
locate string // 寻找包含string的路径
updatedb // 更新索引库,获得最新文件索引

查看文件内容

cat -n // 显示行号
ls -al | more // 按页显示列表内容
head - 10 // 头10条
tail - 5 // 尾巴5条
tail -f a.log // 动态刷新显示最新内容
diff file1 file2 // 查看两文件差异
perl -pe 's/(关键词)/\e[1;颜色$1\e[0m/g' // 查找多个关键字 高亮显示

查找文件内容

grep "xxx" // 查找包含xxx的行
grep -v "xxx" // 查询不包含xxx的行
grep -P "" -o // 正则查找并将匹配值输出
grep -w "" // 全文匹配
grep "" -c // 计算行数
wc -l // 等价

# 查找某文件中单词出现次数
grep -o [objString] [filename] | wc -l
vi 下 :%s/[objStr]//gn

修改文件or目录权限

chown // 改变文件所有者
chmod // 改变rwx权限
chown -R xxx yyy/ // 递归子目录修改
chmod a+x xxx // 增加可执行权限

给文件增加别名

ln cc ccCopy // 硬链接,删除一个仍然能找到(类似于深拷贝含义)
ln -s cc ccCopy // 软连接,删除源后无法使用

管道和重定向

| // 批处理连接使用
; // 串联
&& // 前面成功才执行后一条
|| // 前面失败才执行后一条

>> // 重定向
> &1 // 重定向到同一文件中
:> a.log // 清空文件

骚操作集合:

ls /proc && echo suss! || echo failed. // 提示命令是否成功
if ls /proc; then echo suss; else echo fail; fi // 等价

ls data/*.log > all.log > &1 // 重定向多个文件到一个中
ls data/*.log &> all.log // 等价操作

环境变量

启动账号后自动执行.profile文件,可进行环境变量配置,将安装的软件路径写入path中

bash快捷输入or删除

ctrl + u // 删除光标到行首的所有字符,可设置为删除全行
ctrl + w // 删除光标到前边最后一个空格间所有字符
ctrl + h // backspace,删除光标前字符
ctrl + r // 匹配最相近的文件,输出

文本处理

find

find path \( -name "*.txt" -o -name "*.pdf"\) -print // 查找当前目录下txt和pdf 【多后缀匹配】
find . -regex ".*\(\.txt|\.pdf\)$" // 正则查找.txt和pdf
find . -iregex // 忽略大小写的正则
find . ! -name "*.txt" -print // 查找所有非txt文本 ! 否定参数
find . -maxdepth 1 -type f  // 指定搜索升读
find . -type d -print // 只列出所有目录 -type f 文件 / l 符号链接 / d 目录

# find无法直接区分二进制文件与文本文件,通过file 命令检查具体类型
file filename
ls-lrt | awk '{print $9}' | xargs file | grep ELF | awk '{print $1}' | tr -d ':'

• find . -atime 访问时间 | -mtime 修改时间(内容修改) | -ctime 变化时间(元数据or权限变化)
• find . -atime 7 -type f -print // 最近第七天被访问过的所有文件
• find . -atime -7 -type f -print // 最近七天内访问过的所有文件
• find . -atime +7 type f -print // 七天前被访问过的所有文件
• find . -type f -size +2k // 按k M G 查找大于的文件
• find . -type f -perm 644 -print // 具有可执行 权限的文件
• find . -type f -user root -print // 找到用户具有所有文件

后续操作

find . -type f -name "*.swp" -delete // 删除当前文件目录下所有swap文件
find . -type f -name "*.swp" | xargs rm // 等价
find . -type f -user root -exec chown weber {} \; // 当前目录所有权变更为weber PS: {}为特殊字符,替换每个匹配的文件名。
find . -type f -user root -exec cp {} OLD \; // 找到的所有文件copy到另一个目录

-exec ./commands.sh {} \; // exec下多个命令可写成脚本一起执行

-print 定界符,默认\n作为定界符,-print0使用’\0’作为文件定界符,这样搜索包含空格文件

grep文本搜索

grep match_pattern file // 默认访问匹配行
常用参数:

  • -o 只输出匹配的文本行
  • -v 只输出没有匹配的文本行
  • -c 统计包含文本次数
  • -n 打印行号
  • -i 忽略大小写
  • -L 只打印文件名
  • -r 递归查找某目录是否有某字符 ```shell grep “class” . -R -n // 多级目录文本递归搜索 grep -e “class” -c “vitural” file // 多模式匹配 grep “test” file* -lZ | xargs -0 rm 输出以0作为结尾符的文件名(-z)

cat LOG.* | tr a-z A-Z | grep “FROM” | grep “WHERE” > b // 将所有带where条件的sql查找出来

grep -r hello ./ // 查看当前目录下所有包含某字符串的文件

<a name="eiJvO"></a>
## xargs命令行参数转换
```shell
cat file.txt | xargs // 将数据转化为特定命令行参数,搭配命令使用
cat single.txt | xargs -n 3 // 指定每行显示的字段数, n为文本间定界符

xargs参数说明:

  • -d 定义定界符 默认空格,多行为n
  • -n 指定输出为多行
  • -l {} 指定替换字符串,xargs拓展是被替换,用于待执行的命令需要多个参数时
  • -0 指定0为输入定界符

    cat file.txt | xargs -I {} ./command.sh -p {} -1

sort排序

  • -n数字排序
  • -d 字典序
  • -r 逆序排序
  • -k N 指定第N列排序

    sort -nrk 1 log.txt
    sort -bd data // 忽略空格之类的前导空白字符
    

    uniq 消除重复行

    sort unsort.txt | uniq  // 消除重复行
    sort unsort.txt | uniq -d // 找出重复行
    sort unsort.txt | uniq -s 开始位置 -w 比较字符数
    

    tr进行转换

    echo 12345 | tr '0-9' '9876543210' // 加解密转换,替换对应字符
    cat text | tr '\t' ' ' // 制表符转空格
    cat file | tr -d '0-9' // 删除所有数字
    cat file | tr -c '0-9' // 获取文件中所有数字
    cat file | tr -d -c '0-9 \n' 删除所有非数字数据
    cat file | tr -s ' '  // 压缩文本中出现的重复字符,压缩多余空格
    

    cut按列切分文本

    cut -f2,4 filename // 截取第2列和第4列
    cut -f3 --complement filename 去除除了第3列的所有
    cut -f2 -d ";" filename // 指定定界符
    
  • cut 范围

    • N- 第N个到结尾
    • -M 第一个到M个
    • N-M N到M个
  • cut 单位

    • -b 字节单位
    • -c 字符单位
    • -f 字段单位(定界符)

      paste 按列拼接文本

      paste file1 file2 -d ","
      

      wc统计行和字符

      wc -l file 行数
      wc -w file  单词书
      wc -c file 统计字符数
      

      sed文本替换

      sed 's/text/replace_text/' file // 替换每一行第一处的text
      sed 's/text/replace_text/g' file // 全局替换
      sed -i 's/text/replace_text/g' file // -i替换原文件
      sed '/^$/d' file // 移除空白行
      sed 's/\w+/[&]/g' // 通过&引用已匹配的字符串
      sed 's/hello\([0-9]\)/\1/'第一个匹配的括号内容用1引用
      sed 's/$p/$r/g' // 使用双引号对表达是求值,$引用
      

      awk数据流处理工具

      awk ' BEGIN{ statements } statements2 END{ statements } '
      awk ' BEGIN { print "begin"} {print} END { print "end" } '
      echo | awk ' {var1 = "k1" ; var2 = "k2"; var3 = "k3"; \ print var1, var2, var3}' // 使用空格作为拼接符
      echo | awk ' {var1 = "k1" ; var2 = "k2"; var3 = "k3"; \ print var1"-"var2"-" var3}' //使用""作为连接符
      
      特殊变量:
  • NR 表示记录数量,对应当前行号

  • NF 当前字段数
  • $0 当前行的文本内容
  • $1 第一个字段的文本内容
  • $2 第二个字段的文本内容

    vi/vim

    ```shell

    替换操作

    [range]: 不写默认当前行

    数字指定行号

    %代表全文,.代表当前行,$代表最后一行,结合使用等价于%

    3,9 指定行范围

    {pattern}: 原字符串,支持正则

    \ 替换完整单词

    {string}: 目标字符串

    [flags]: 模式选择

    无 默认替换第一个

    -g 全局替换

    -c 每次询问

    -e 忽略错误

    :[range]s/{pattern}/{string}/[flags] [count]

示例

:%s/aaa/bbb/g

统计次数

:%s/[objStr]//gn

<a name="OiFcw"></a>
# 磁盘管理
<a name="53aw2"></a>
## 查看磁盘空间
```shell
df -h // 查看磁盘空间利用大小 -h = human以易读的方式显示结果
du -sh // 查看当前目录所占空间大小 -s 递归显示整个目录大小
du -sh | sort // 查看排序后

打包/压缩

打包tar

tar -cvf etc.tar /etc // 仅打包
  • -c 打包选项
  • -v 打包进度
  • -f 使用档案文件

    压缩gzip

    gzip test.log // 生成test.log.gz
    

    解包/解压缩

    解包tar

    tar -xvf demo.tar
    

    解压缩

    gunzip demo.tar.gz
    bzip2 -d demo.tar.bz2
    

    进程管理

    查询

    ps -ef // 正在运行
    ps -lu username // 查询归属用户xxx的
    pgrep // 查询进程id
    pgrep -l xxx // 查询进程名中包含xxx的进程
    ps -ajx // 完整显示所有进程
    top // 显示实时进程
    lsof -i:3306 // 查看端口占用的进程
    lsof -u username // 查看当前用户的进程文件
    lsof -c init // 查询init进程当前打开文件
    lsof -p pid // 查询指定id的进程打开文件
    lsof +d dirname/ // 查询指定目录下被进程开启的文件,+d递归目录
    

    终止进程

    kill PID // 进程号
    kill -9 PID // 杀死相关进程
    kill %job // 杀死job工作
    

    进程监控

    • top // 查看使用内存最多的进程
    
    进入交互界面输入字符命令:
    • P // 根据CPU 使用百分比大小排序
    • M // 根据驻留内存大小排序
    • i // 不显示闲置或僵死进程
    • c // 显示命令完全模式

    分析线程栈

    pmap PID // 输出进程内存情况
    

    性能监控

    CPU、内存、页面交换、硬盘…

    sar -u num1 num2 // num1表示每几秒采样一次,num2表示总共采样几次
    sar -q 1 2 // 查看CPU平均负载,查看运行队列的进程数,系统上的进程大小、平均负载
    sar -r 1 2 // 查看内存使用情况
    free -m // 查看内存使用量
    sar -W 1 2 // 查询页面交换
    df -h // 查询硬盘使用
    du -sh
    vmstat n m // 查看cpu、内存使用情况
    

    网络工具

    查询网络服务和端口

    netstat -a // 列出所有端口
    netstat -at // 列出所有tcp端口
    netstat -l // 列出所有有监听的服务状态
    netstat -antp | grep PID // 查询端口
    

    一切皆文件lsof(list open files)

    Linux中任何事物都以文件形式存在,可以用来访问网络连接和硬件,lsof列出当前系统打开的所有文件
    lsof -i:8081 // 查询端口对应进程id
    ps -ef | grep 8081 // ps查进程详情
    

    网络路由

    route -n // 查看路由状态
    ping ip // 发送ping 包
    traceroute ip // 探测前往地址ip的路由路径
    host domain // dns查询
    host ip
    

    镜像下载

    wget url // 直接下载文件or网址
    wget url -limit-rate // 下载限速
    wget url -o // 指定日志文件输出写入
    wget url -c // 断点传输
    

    FTP、SFTP、LFTP、SSH

    ```shell ssh id@host // ssh登录 sftp id@host // ftp/sftp文件传输

sftp登录后,可使用如下命令,进行更多操作:

get filename // 下载 put filename // 上传 ls // 列出host当前路径下文件 cd // 切换host上路径 lls // 列出本机当前路径下文件 lcd // 更改本机路径

<a name="O2i7H"></a>
## 网络复制
```shell
scp localpath id@host:path // 将本地localpath指向的文件上传到远程主机的path路径

用户管理工具

用户

useradd -m username // 添加用户
passwd username // 修改密码
userdel -r username // -r删除用户同时删除用户信息
su userB // 切换用户B

用户组

groups // 查看当前用户所属的组
usermod -G groupName username // 将用户加入到组
usermod -g groupName username // 变更用户所属的根组
more /etc/passwd // 查看所有用户及权限
more /etc/group // 查看所有用户组及权限

用户权限

ls -l // -l查看文件的属性字段
chmod userMark(+ | -)PermissionMark

# 数字方式:
chmod 421 filename  // 4:属主权限、2:指定组权限、1:指定其他用户权限
chmod 644 filename

# 更改文件or目录的拥有者
chown username dirOrFile
chown -R weber server // 递归修改目录下所有文件所有者

userMark:

  • u // 用户
  • g // 组
  • o // 其他用户
  • a // 所有

PermissionMark:

  • r // 读
  • w // 写
  • x // 执行

    系统管理及资源管理

    系统管理

    uname -a // 查看Linux版本
    lsb_release -a // 同上
    cat /etc/redhat-release // 查看系统版本
    more /etc/release // 查看系统版本
    cat /etc/issue // 同上
    sar -u 1 2 // 查看CPU使用情况
    sar /proc/cpuinfo // 查询CPU 信息
    cat /proc/cpuinfo | grep processor | wc -l // 查看cpu的核的个数
    cat /proc/meminfo // 查看内存信息
    pagesize // 显示内存page大小
    arch // 显示架构
    

    修改时区

    cp  /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
    

    显示编码

    ```shell

    查看本地语言包

    locale -a

完全中文支持

yum groupinstall chinese-support

修改配置文件

vim /etc/sysconfig/i18n

执行生效

source /etc/sysconfig/i18n

vim /etc/locale.conf source /etc/locale.conf ``` /etc/sysconfig/i18n

LANG=”zh_CN.UTF-8” LC_ALL=”zh_CN.UTF-8”

/etc/locale.conf

LANG=”zh_CN.UTF-8”