Linux就该这样学--之常用linux命令及bash基础

时间:2021-09-21 14:23:52

Linux就该这样学--之常用linux命令及bash基础

Linux命令
管道
重定向
环境变量

常用命令

常用系统工作命令

  • echo [字符串 | $变量]
  • date [选项] [+\指定的格式]
  • reboot
  • poweroff
  • wget [参数] 下载地址
    • -b 后台下载模式
    • -P下载到指定目录
    • -t 最大尝试次数
    • -c 断点续传
    • -p 下载页面内所有资源,包括图片、视频等
    • -r 递归下载
  • ps
    • -a显示所有进程(包括其他用户的进程)
    • -u 用户以及其他详细信息
    • -x 显示没有控制终端的进程
    • 在Linux系统中,有5种常见的进程状态:
      • R(运行):进程正在运行或在运行队列中等待。
      • S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该 状态。
      • D(不可中断):进程不响应系统异步信号,即便用kill命令也不能将其中断。
      • Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用wait4()系统函数后将进程释放。
      • T(停止):进程收到停止信号后停止运行。
  • top
    • top 第一行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
    • top 第二行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。
    • top 第三行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
    • top 第四行:物理内存总量、内存使用量、内存空闲量、作为内核缓存的内存量。
    • top 第五行:虚拟内存总量、虚拟内存使用量、虚拟内存空闲量、已被提前加载的内存量。
  • pidof [参数]\ [服务名称]
  • kill [参数] [进程PID]
  • killall [参数] [进程名称]

系统状态检测命令

  • ifconfig [网络设备]\ [参数];获取网卡配置与网络状态等信息
  • uname [-a];系统内核与系统版本等信息
  • uptime;查看系统的负载信息
  • free [-h];内存的使用量信息
  • who [参数];当前登入主机的用户终端信息
  • last [参数];查看所有系统的登录记录
  • history [-c];显示历史执行过的命令
  • sosreport;收集系统配置及架构信息并输出诊断文档

工作目录切换命令

  • pwd [选项];显示用户当前所处的工作目录
  • cd [目录名称]
  • ls [选项] [文件]

文本文件编辑命令

  • cat [选项] [文件]
  • more [选项] [文件]
  • head [选项] [文件];查看文件头
  • tail [选项] [文件];查看文件尾
  • tr [原始字符] [目标字符];替换文本文件中的字符
  • wc [参数] 文本;统计指定文本的行数、字数、字节数
    • -l;只显示行数
    • -w;只显示单词数
    • -c;只显示字节数
  • stat 文件名称;查看文件的具体存储信息和时间等信息
  • cut [参数] 文本;用于按“列”提取文本字符
  • diff [参数] 文件;比较多个文本文件的差异

文件目录管理命令

  • touch [选项] [文件];创建空白文件或设置文件的时间
    • -a;仅修改“读取时间”(atime)
    • -m;仅修改“修改时间”(mtime)
    • -d;同时修改atime与mtime
  • mkdir [选项] 目录;用于创建空白的目录
  • cp [选项] 源文件 目标文件 ;复制文件或目录
    • -p保留原始文件的属性
    • -d若对象为“链接文件”,则保留该“链接文件”的属性
    • -r 递归持续复制(用于目录)
    • -i 若目标文件存在则询问是否覆盖
    • -a 相当于-pdr(p、d、r为上述参数)
  • mv [选项] 源文件 [目标路径|目标文件名]; 用于剪切文件或将文件重命名
  • rm [选项] 文件;用于删除文件或目录
  • dd [参数];按照指定大小和个数的数据块来复制文件或转换文件
    • if 输入的文件名称
    • of 输出的文件名称
    • bs 设置每个“块”的大小
    • count 设置要复制“块”的个数
    • dd if=/dev/zero of=560_file count=1 bs=560M ;从/dev/zero设备文件中取出一个大小为560MB的数据块,然后保存成名为560_file的文件
    • dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-LinuxProbe.Com.iso;用dd命令来压制出光盘镜像文件
  • file 文件名 ;查看文件的类型

打包压缩与搜索命令

  • tar [选项] [文件] ;对文件进行打包压缩或解压
    • -c 创建压缩文件
    • -x 解开压缩文件
    • -t 查看压缩包内有哪些文件
    • -z 用Gzip压缩或解压
    • -j 用bzip2压缩或解压
    • -v 显示压缩或解压的过程
    • -f 目标文件名
    • -p 保留原始的权限与属性
    • -P 使用绝对路径来压缩
    • -C 指定解压到的目录
    • tar -czvf 压缩包名称.tar.gz 要打包的目录;
    • tar -xzvf 压缩包名称.tar.gz
  • grep [选项] [文件] ;用于在文本中执行关键词搜索
    • -b 将可执行文件(binary)当作文本文件(text)来搜索
    • -c 仅显示找到的行数
    • -i 忽略大小写
    • -n 显示行号
    • -v 反向选择——仅列出没有“关键词”的行。
  • find [查找路径] 寻找条件 操作;用于按照指定条件来查找文件
    • -name 匹配名称
    • -perm 匹配权限(mode为完全匹配,-mode为包含即可)
    • -user 匹配所有者
    • -group 匹配所有组
    • -mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
    • -atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
    • -ctime -n+n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
    • -nouser 匹配无所有者的文件
    • -nogroup 匹配无所有组的文件
    • -newer f1 !f2 匹配比文件f1新但比f2旧的文件
    • -type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
    • -size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
    • -prune 忽略某个目录
    • -exec ...{}\;后面可跟用于进一步处理搜索结果的命令。用于把find命令搜索到的结果交由紧随其后的命令作进一步处理
      • find /etc -name "host*" -print

输入、输出、错误输出和重定向

输入重定向中用到的符号及其作用

  • 命令 < 文件;将文件作为命令的标准输入
  • 命令 << 分界符;从标准输入中读入,直到遇见分界符才停止
  • 命令 < 文件1 > 文件2;将文件1作为命令的标准输入并将标准输出到文件2

    输出重定向中用到的符号及其作用
  • 命令 > 文件;将标准输出重定向到一个文件中(清空原有文件的数据)
  • 命令 2> 文件;将错误输出重定向到一个文件中(清空原有文件的数据)
  • 命令 >> 文件;将标准输出重定向到一个文件中(追加到原有内容的后面)
  • 命令 2>> 文件;将错误输出重定向到一个文件中(追加到原有内容的后面)
  • 命令 >> 文件 2>&1 或 命令 &>> 文件;将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

管道命令符

命令A | 命令B;把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入.。

在修改用户密码时,通常都需要输入两次密码以进行确认,通过把管道符和passwd命令的--stdin参数相结合,我们可以用一条命令来完成密码重置操作:

[root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root

在发送电子邮件时,默认采用交互式的方式来进行,我们完全可以利用一条结合了管道符的命令语句,把编辑好的内容与标题一起“打包”,最终用这一条命令实现邮件的发送:

[root@linuxprobe ~]# echo "Content" | mail -s "Subject" linuxprobe

让用户一直输入内容,直到用户输入了其自定义的分界符时,才结束输入:

[root@linuxprobe ~]# mail -s "Readme" root@linuxprobe.com << over
> I think linux is very practical
> I hope to learn more
> can you teach me ?
> over
[root@linuxprobe ~]#

命令行的通配符

星号(*)代表匹配零个或多个字符。

问号(?)代表匹配单个字符。

中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符。

中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。

常用的转义字符

4个最常用的转义字符如下所示

反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。

单引号(''):转义其中所有的变量为单纯的字符串。

双引号(""):保留其中的变量属性,不进行转义处理。

反引号(``):把其中的命令执行后返回结果。

重要的环境变量

命令在Linux中的执行分为4个步骤。

第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。

第2步:Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。

  • 可以用alias命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。
  • 若要取消一个命令别名,则是用unalias命令,格式为“unalias 别名”。

    第3步:Bash解释器判断用户输入的是内部命令还是外部命令。
  • 可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令。

    第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。

Linux系统中最重要的10个环境变量

  • HOME 用户的主目录(即家目录)
  • SHELL 用户在使用的Shell解释器名称
  • HISTSIZE 输出的历史命令记录条数
  • HISTFILESIZE 保存的历史命令记录条数
  • MAIL 邮件保存路径
  • LANG 系统语言、语系名称
  • RANDOM 生成一个随机数字
  • PS1 Bash解释器的提示符
  • PATH 定义解释器搜索用户执行命令的路径
  • EDITOR 用户默认的文本编辑器

使用export命令将自定义变量提升为全局变量,这样其他用户也就可以使用它了:

#root下建立自定义变量
[root@linuxprobe ~]# WORKDIR=/home/workdir
[root@linuxprobe ~]# cd $WORKDIR
#切换用户,变量不起作用
[root@linuxprobe workdir]# su linuxprobe
[linuxprobe@linuxprobe ~]$ echo $WORKDIR
[linuxprobe@linuxprobe ~]$ exit
#返回root用户,提升全局变量
[root@linuxprobe ~]# export WORKDIR
#切换普通用户
[root@linuxprobe ~]# su linuxprobe
[linuxprobe@linuxprobe ~]$ cd $WORKDIR
[linuxprobe@linuxprobe workdir]$ pwd
/home/workdir