shell 是Linux操作系统中为用户提供的命令访问接口
Linux自带的shell:Bash
Unix上的shell : Ksh (Korn shell)
基于C语言的shell: Csh(C shell,BSD版本Unix的标准shell)
shell命令的通用格式:
命令本身的名字(可执行文件) - 参数(命令参数/选项参数)/选项(长选项/短选项)
选项后可以加参数,选项的参数是选项参数
按 tab 键可以自动补齐
vi 命令
用vim(Linux上的一种命令行文本编辑工具)打开文件
例:vi etc/passwd
查看密码配置文件
x 是密码(被隐藏,用x符号代替)
passwd 命令
修改密码命令
普通用户只能修改自己的密码(更改密码前需要先输入旧密码),超级用户(root)可以更改所有用户的密码(随意更改,不用输入旧密码)
命令提示符信息:
“chen” 是当前登录的用户名 ,“@ ”分隔符, “DESKTOP-3N2MV0P”是当前登录的主机名
“~ ”代表主目录,“$”是提示符,在提示符后输入命令, root用户的提示符一般是“#”
sudo 命令
以root身份执行某个命令,用于执行需要root权限的命令
su - 命令
切换用户,未指定用户(su命令无参数)时默认切换至root
mv命令
移动文件
Linux中隐藏文件的方式: mv Document .Document
文件名以.开头的文件默认情况下不显示
ls 命令
无参数时列出当前目录下的所有文件
ls -a 可显示详细信息,以显示隐藏文件
ls 后加文件名,显示文件的详细信息
reset命令:清屏
less命令
less+文件名:打开文件
基本浏览操作:
① j :下移一行
② 上/下键:上移/下移一行
③ ctrl+f: 下翻一页
④ pg up/pg dn:上/下翻一页
⑤ q 退出
file命令
file+文件名:查看文件属性
默认情况下Linux中的文件不需要有后缀名,因为Linux可以读取文件开头的部分内容来确定文件类型,所以对于Linux,改变后缀名不会改变文件类型
将1204.cpp重命名为1204.java后,通过file命令依然判定为C++文件
cd命令
change dictionary 切换目录,改变当前工作目录
cd- 回到上一次切换目录前所在的目录
通过cd - 命令可以实现工作目录的来回切换
cd 不带参数时,默认切换到用户主目录 home
pwd命令
present working directory 显示当前工作目录
rm 命令:remove 删除
rm -f 忽略不存在的文件,从不给出提示
man 3 :C语言库函数
man 2: Linux系统调用函数
首行 FORK后括号中的数字为2,说明所查的命令是系统调用函数中的fork
shell变量分为三种:环境变量,用户自定义变量,系统全局变量
导出为环境变量后,可以在所有bash进程中查看(echo)该变量
未将变量导出为环境变量前,只能在创建该变量的进程中查看(echo)该变量
bash命令表示新起一个进程
exit 回到原进程
export导出变量
在shell中输入命令时,系统在PATH所指定的目录中寻找与用户输入命令同名的可执行文件。目录的先后顺序就是系统搜索的先后顺序。一旦搜索到第一个同名程序就不再向下寻找,因此,一般把重要的目录放在前面
同等项之间用“:”间隔
⭐ 将一个命令的结果作为另一个命令的参数:’ ’
例: PATH=$PATH:‘pwd’
将当前路径添加到环境变量
LD_LIBRARY_PATH: 动态链接库,除默认路径以外的其他路径
用户名@主机名:~$
“chen” 是当前登录的用户名 ,“@ ”分隔符, “DESKTOP-3N2MV0P”是当前登录的主机名
“~ ”代表主目录,“$”是提示符,在提示符后输入命令, root用户的提示符一般是“#”
用户主目录(登陆后默认所在的工作目录)
echo ~=echo $HOME 显示用户主目录
以.sh为后缀名的文件,包含shell所执行命令的文件
脚本文件的第一行必须是 “#!”,称为shebang,它指明了执行这个脚本文件的解释程序的绝对路径
默认情况下Linux中的文件不需要有后缀名,因为Linux可以读取文件开头的部分内容来确定文件类型
因为执行过程中启动了一个新的进程,bored变量是在新进程中被export出去的,脚本运行结束后,这个新的进程消亡,回到原来的进程,bored变量也随着进程的消亡而消失。因而echo $bored 得到的内容为空。
2. source命令(“.”)
source命令简写为".",意为在 当前进程 中执行一个脚本文件
bored变量被成功导出
在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 :更新缓冲区,将缓冲区内容写出
进程之间通信的第一种方式是管道
管道的定义是将前一个进程的标准输出作为后一个进程的标准输入
管道符“|”:分隔命令,“|”的左右两侧都至少有一个空格 ,空格是shell中区分命令和参数的唯一标志
把“>”左侧内容的 stdout(1) 重定向到右侧指定的文件中去,并覆盖文件原内容
执行覆盖重定向时,系统会先清空指定文件中的内容,再将stdout写入
因此当左侧输出内容不包含stdout,例如左侧内容是stderr时,最终运行结果是文件为空
将重定向内容追加到指定文件的尾部,保留已有的文件内容
例: ls -a >> no.cpp
当重定向到目标文件已存在时,拒绝执行该命令,输出错误信息“bash: no.cpp: cannot overwrite existing file”
输入 ls -l >| no.cpp,在重定向后加“|”,表示坚持执行重定向,可以强制执行重定向
例: cat < no.cpp
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
告诉shell输入块的位置
指定了一个符号作为输入数据的起始标志,一旦shell在后面碰到同样的标志,就认为两个界限符之间的内容要完整地交给某个命令
例:NO.sh
r就是被指定的界限符
/dev/null “黑洞”,会吸收所有输出信息,不留下痕迹
例: ls a > /dev/null 2>&1
将所有输出丢进“黑洞”
/dev/zero 都是0的文件
执行exe命令后,当前进程的二进制代码会被完整地替换成exec 后面指定的二进制代码
例:exec ls
将bash的二进制代码替换成ls的二进制代码
ls执行后,会自动退出终端
重定向是将命令和文件连接,用文件接收命令的输出,是在同一进程内完成
管道将命令与命令连接,用上一个命令的输出作为下一个命令的输入,实现进程间通信
可以一次对多个文件进行批量操作
新建一个空文件
代表一个或任意多个字符
例:ls a*
列出了所有文件名以a开头,后面跟随零个或任意多个字符的文件
代表单个字符
例:ls a?
列出了所有文件名以a开头,后面仅跟随一个字符的文件
方括号[ ] 指定单个字符