Linux shell 入门命令

shell介绍

shell 是Linux操作系统中为用户提供的命令访问接口

常见的几种shell

Linux自带的shell:Bash
Unix上的shell : Ksh (Korn shell)
基于C语言的shell: Csh(C shell,BSD版本Unix的标准shell)

常用的shell命令

shell命令的通用格式:
命令本身的名字(可执行文件) - 参数(命令参数/选项参数)/选项(长选项/短选项)
选项后可以加参数,选项的参数是选项参数

  1. id命令
    用途:显示登录的用户身份
    在这里插入图片描述
    uid:用唯一的整数编号区分用户身份(就像身份证号码区分每个人)
    uid=0 的用户是超级用户(默认用户名是 root 可以对Linux配置做出破坏性更改。
    groups:用户组
    gid:用户组的编号,用唯一的整数编号区分用户组,用户的权限通过用户组来赋予
  2. 短选项 -h
    帮助命令(help)提示命令如何使用
    Linux shell 入门命令_第1张图片
    Options中,第一列即为短选项,第二列为对应的长选项
  3. 短选项的合并
    -ef = -e -f
    两个短选项都没有参数时可以合并
    Linux shell 入门命令_第2张图片
  4. ps命令
    显示当前运行的进程
  5. bash命令
    新起一个进程(echo $$ 表示打印当前进程的PID号)
    Linux shell 入门命令_第3张图片
  6. useradd命令
    添加用户
    配置文件分为两类:
    只影响部分用户的配置文件,隐藏在用户的个人主目录 /home/ username
    系统配置文件 /etc 会导致整个系统行为更改,只有 root 用户能修改
    useradd
    -d 指定新创建用户的主目录路径
    -s指定用户登录时由哪个shell程序提供给服务
    在这里插入图片描述

按 tab 键可以自动补齐

  1. vi 命令
    用vim(Linux上的一种命令行文本编辑工具)打开文件
    例:vi etc/passwd
    查看密码配置文件
    Linux shell 入门命令_第4张图片
    x 是密码(被隐藏,用x符号代替)

  2. passwd 命令
    修改密码命令
    普通用户只能修改自己的密码(更改密码前需要先输入旧密码),超级用户(root)可以更改所有用户的密码(随意更改,不用输入旧密码)

命令提示符信息:
“chen” 是当前登录的用户名 ,“@ ”分隔符, “DESKTOP-3N2MV0P”是当前登录的主机名在这里插入图片描述
“~ ”代表主目录,“$”是提示符,在提示符后输入命令, root用户的提示符一般是“#”

  1. sudo 命令
    以root身份执行某个命令,用于执行需要root权限的命令

  2. su - 命令
    切换用户,未指定用户(su命令无参数)时默认切换至root

  3. mv命令
    移动文件
    Linux中隐藏文件的方式: mv Document .Document
    文件名以.开头的文件默认情况下不显示

  4. ls 命令
    无参数时列出当前目录下的所有文件
    ls -a 可显示详细信息,以显示隐藏文件
    在这里插入图片描述
    ls 后加文件名,显示文件的详细信息
    在这里插入图片描述

  5. reset命令:清屏

  6. less命令
    less+文件名:打开文件
    基本浏览操作:
    ① j :下移一行
    ② 上/下键:上移/下移一行
    ③ ctrl+f: 下翻一页
    ④ pg up/pg dn:上/下翻一页
    ⑤ q 退出

  7. file命令
    file+文件名:查看文件属性
    在这里插入图片描述
    默认情况下Linux中的文件不需要有后缀名,因为Linux可以读取文件开头的部分内容来确定文件类型,所以对于Linux,改变后缀名不会改变文件类型
    在这里插入图片描述
    将1204.cpp重命名为1204.java后,通过file命令依然判定为C++文件

  8. cd命令
    change dictionary 切换目录,改变当前工作目录
    cd- 回到上一次切换目录前所在的目录
    Linux shell 入门命令_第5张图片
    通过cd - 命令可以实现工作目录的来回切换
    cd 不带参数时,默认切换到用户主目录 home

  9. pwd命令
    present working directory 显示当前工作目录

  10. touch命令
    创建新文件,如果文件已存在,会改变文件的最后修改时间
    Linux shell 入门命令_第6张图片
    将文件最后修改日期改为指定的日期
    在这里插入图片描述

  11. rm 命令:remove 删除
    rm -f 忽略不存在的文件,从不给出提示

  12. wc 命令
    统计输入字符中的字母数、数字数、单词数等信息
    Ctrl+b 终止输入
    wc -l 只统计行数
    在这里插入图片描述

  13. man命令
    man 命令名称:手册,帮助文档,显示命令的名称和功能
    Linux shell 入门命令_第7张图片

  14. cp命令
    拷贝
    将 /var/log/dpkg.log 文件拷贝到当前目录(./表示当前目录)下
    在这里插入图片描述

man 3 :C语言库函数
在这里插入图片描述
Linux shell 入门命令_第8张图片
man 2: Linux系统调用函数

在这里插入图片描述
首行 FORK后括号中的数字为2,说明所查的命令是系统调用函数中的fork

Linux shell 入门命令_第9张图片

  1. info:gnu的帮助命令,显示gun文档中关于该命令的帮助信息
  2. witch:显示一个命令的路径,如果没有返回值说明该命令是系统内置命令
  3. cat:把某一文件内容显示到终端上,没有less一样的翻页功能,通常只能显示短小文件
    Linux shell 入门命令_第10张图片
    不加参数时,可以自由输入,并立即显示到终端,按CTRL+D结束输入并退出
    Linux shell 入门命令_第11张图片

shell变量的使用

shell变量分为三种:环境变量,用户自定义变量,系统全局变量

  • 变量无需声明
  • 变量值总是以字符串存储,做数值计算时自动转换为数字
    Linux shell 入门命令_第12张图片

变量的创建和查看

  • 创建或修改变量:变量名=变量值(等号前后不能有空格
  • 显示变量的值:echo $变量名,
    echo $$ :打印当前进程的PID号
    echo $? : 查看上一命令的执行结果或返回值
  • 删除变量 unset 删除后echo该变量的输出内容为空
    如果echo之后不跟$ ,则会输出echo后输入的内容
    echo ~=echo HOME 显示用户主目录
    Linux shell 入门命令_第13张图片

导出为环境变量

1. export命令:导出为环境变量

导出为环境变量后,可以在所有bash进程中查看(echo)该变量
未将变量导出为环境变量前,只能在创建该变量的进程中查看(echo)该变量
bash命令表示新起一个进程
exit 回到原进程
Linux shell 入门命令_第14张图片
export导出变量
Linux shell 入门命令_第15张图片

2. 查看环境变量的方式

  • env命令
    显示所有环境变量
  • set命令
    显示环境变量和系统脚本文件
    存储用户自己定义的环境变量的位置:
    .bash_profile.bashrc
    .bash_history 用户登录以来输入过的所有命令
    /etc/profile 建立全系统通用的初始环境,用户每次登录时第一个被执行
    Linux shell 入门命令_第16张图片

3. 环境变量

PATH:

在shell中输入命令时,系统在PATH所指定的目录中寻找与用户输入命令同名的可执行文件。目录的先后顺序就是系统搜索的先后顺序。一旦搜索到第一个同名程序就不再向下寻找,因此,一般把重要的目录放在前面
同等项之间用“:”间隔
Linux shell 入门命令_第17张图片

⭐ 将一个命令的结果作为另一个命令的参数:’ ’
例: PATH=$PATH:‘pwd’
将当前路径添加到环境变量

LD_LIBRARY_PATH: 动态链接库,除默认路径以外的其他路径

PS1:主命令提示符信息

用户名@主机名:~$
“chen” 是当前登录的用户名 ,“@ ”分隔符, “DESKTOP-3N2MV0P”是当前登录的主机名在这里插入图片描述
“~ ”代表主目录,“$”是提示符,在提示符后输入命令, root用户的提示符一般是“#”
在这里插入图片描述

PS2:二级命令提示符

在这里插入图片描述

HOME

用户主目录(登陆后默认所在的工作目录)
echo ~=echo $HOME 显示用户主目录
在这里插入图片描述

4.脚本文件的创建和运行

脚本文件的创建

以.sh为后缀名的文件,包含shell所执行命令的文件
脚本文件的第一行必须是 “#!”,称为shebang,它指明了执行这个脚本文件的解释程序的绝对路径
Linux shell 入门命令_第18张图片
默认情况下Linux中的文件不需要有后缀名,因为Linux可以读取文件开头的部分内容来确定文件类型

脚本文件的运行

  1. ./nouse.sh
    “.”表示当前目录,这句命令的含义为,在当前目录下寻找nouse.sh文件,并将它作为 新的进程 启动起来
    如果要执行的命令所在目录不在PATH环境变量中,就必须显式地指明应该到哪个目录里找到该命令
    Linux shell 入门命令_第19张图片

因为执行过程中启动了一个新的进程,bored变量是在新进程中被export出去的,脚本运行结束后,这个新的进程消亡,回到原来的进程,bored变量也随着进程的消亡而消失。因而echo $bored 得到的内容为空。
2. source命令(“.”)
source命令简写为".",意为在 当前进程 中执行一个脚本文件
Linux shell 入门命令_第20张图片
bored变量被成功导出
Linux shell 入门命令_第21张图片
在bash创建的新进程中,也能成功echo变量bored
. ./nouse.sh 在当前进程中执行当前目录下单nouse.sh文件


重定向和管道

标准输入、标准输出

stdin(0):标准输入
C语言中的scanf是从标准输入中读取的,标准输入即为stdin
stdout(1):标准输出
C语言中的printf 将内容打印到标准输出终端,此处的标准输出终端就是stdout
stderr(2):标准错误输出
输出错误信息
Linux上的缓冲分为无缓冲、全缓冲和行缓冲。stdin和stdout是行缓冲的,scanf/printf到其中的内容,在遇到换行符“/n”或缓冲区满时才会读入/输出,stderr是无缓冲的,printf到stderr中的所有内容,都会立刻在标准错误输出中显示
fflush :更新缓冲区,将缓冲区内容写出

管道(pipe)

进程之间通信的第一种方式是管道
管道的定义是将前一个进程的标准输出作为后一个进程的标准输入
管道符“|”:分隔命令,“|”的左右两侧都至少有一个空格 ,空格是shell中区分命令和参数的唯一标志

  • 例1:ls | less
    /var/log 用于存储系统日志
    在这里插入图片描述
    less的基本操作见前文
    Linux shell 入门命令_第22张图片
  • 例2: sort | grepaaa | tee bb | wc
    从左到右分别为 排序,格式匹配,在终端显示,计数

重定向符>、 >>、 <

1. 覆盖重定向 >

把“>”左侧内容的 stdout(1) 重定向到右侧指定的文件中去,并覆盖文件原内容

  • 例1 : ls -l > no.cpp
    在这里插入图片描述
    Linux shell 入门命令_第23张图片

执行覆盖重定向时,系统会先清空指定文件中的内容,再将stdout写入
因此当左侧输出内容不包含stdout,例如左侧内容是stderr时,最终运行结果是文件为空

  • 例2:ls i9jx > no.cpp
    这个文件不存在,输出信息为错误(stderr)信息
    Linux shell 入门命令_第24张图片
    no.cpp 内容为空
    在这里插入图片描述

2. 追加重定向 >>

将重定向内容追加到指定文件的尾部,保留已有的文件内容
例: ls -a >> no.cpp
Linux shell 入门命令_第25张图片
Linux shell 入门命令_第26张图片

set -o noclobber

当重定向到目标文件已存在时,拒绝执行该命令,输出错误信息“bash: no.cpp: cannot overwrite existing file”
输入 ls -l >| no.cpp,在重定向后加“|”,表示坚持执行重定向,可以强制执行重定向
在这里插入图片描述
Linux shell 入门命令_第27张图片

3. 标准输入重定向 <

例: cat < no.cpp
Linux shell 入门命令_第28张图片
cat no.cpp 和 cat < no.cpp 的输出结果是一样的,两者执行过程的区别在于,cat no.cpp 是cat命令自己读取no.cpp中的内容并输出;而 cat < no.cpp 是将no.cpp 中的内容读取到stdout,并作为cat的stdin 传递给cat,即cat从stdin中读取要打印到终端的内容,而cat的stdin被重定向为no.cpp

4. 界限符 <<

告诉shell输入块的位置
指定了一个符号作为输入数据的起始标志,一旦shell在后面碰到同样的标志,就认为两个界限符之间的内容要完整地交给某个命令
例:NO.sh
r就是被指定的界限符
Linux shell 入门命令_第29张图片
Linux shell 入门命令_第30张图片

重定向的组合使用

  • 例1: ls apple 2> no.cpp
    将stderr(2)重定向到no.cpp中
    “2"和”>"之间不能有空格
    在这里插入图片描述
    在这里插入图片描述
  • 例2:ls 2> no.cpp
    只将stderr 重定向到no.cpp,stdin 没有被重定向,因此仍然打印到终端上,而ls命令没有输出错误信息,因此no.cpp文件内容为空
    在这里插入图片描述
  • 例3 :ls > no.cpp 2>> no.err
    将stdout重定向到 no.cpp,同时将stderr定向到no.err(此处没有错误信息,no.err文件内容为空)
    Linux shell 入门命令_第31张图片
  • 例4:ls > no.cpp 2>&1
    将stdout和stderr重定向到同一个文件,将stderr也重定向到已被重定向的stdout文件中
    Linux shell 入门命令_第32张图片

/dev/null “黑洞”,会吸收所有输出信息,不留下痕迹
例: ls a > /dev/null 2>&1
将所有输出丢进“黑洞”在这里插入图片描述
/dev/zero 都是0的文件

exec 命令

执行exe命令后,当前进程的二进制代码会被完整地替换成exec 后面指定的二进制代码
例:exec ls
将bash的二进制代码替换成ls的二进制代码
ls执行后,会自动退出终端

重定向与管道的区别

重定向是将命令和文件连接,用文件接收命令的输出,是在同一进程内完成
管道将命令与命令连接,用上一个命令的输出作为下一个命令的输入,实现进程间通信


通配符

可以一次对多个文件进行批量操作

touch命令

新建一个空文件

文件名扩展

Linux shell 入门命令_第33张图片

1. *

代表一个或任意多个字符
例:ls a*
列出了所有文件名以a开头,后面跟随零个或任意多个字符的文件
在这里插入图片描述

2. ?

代表单个字符
例:ls a?
列出了所有文件名以a开头,后面仅跟随一个字符的文件
在这里插入图片描述

3. [ ]

方括号[ ] 指定单个字符

  1. [ , ]
    方括号中指定若干单个字符,字符间用“,”相间隔
    例: ls a[a,c]a
    在这里插入图片描述
  2. [ - ]
    方括号中“-”是前后两字符之间的闭区间
    例: ls a[a-c]a
    包含 a-c之间的所有字母,也包括a和c
    在这里插入图片描述
  3. [ ! ]
    除指定字符外的所有字符
    例: ls a[!b]a
    在这里插入图片描述

4. { }

如果指定的不是单个字符而是多个字符组成的字符串,要用{ }
用法与以上的 [ ] 相似
例: ls {ab,ac}a
在这里插入图片描述

你可能感兴趣的:(Linux,linux,bash)