走进Linux第一步
在开发工作中要操作linux系统就要做到熟悉linux系统的操作命令,首先介绍一下在shell中如何执行用户输入的命令。
shell: CLI(command line interface):输入一个字符串 回车:
执行步骤:
(1)先默认按空白符将字符串分割为好多单词,默认第一个单词为命令,后面的单词看成选项和参数
(2)判断此命令是否是自己的shell builtin 内部命令,是的话直接执行
(3)不是内部命令就根据$PATH给出的路径在磁盘查找可执行程序,执行。
常用命令如下:
1.type +命令名:
(1)回答是path/command,说明这个命令是一个外部路径,可用man + 外部命令名 来学习。
file +文件路径path:
1)回答中出现ELF时,说明这是一个二进制可执行程序。
2)出现 script text executable: 脚本,可以执行的文本文件,最终最先执行的是这个脚本对应的解释器。
(2)回答是 命令名 is a shell builtin : 说明这个命令是内部命令。 Builtin集成
用help +内部命令名 来学习。
2.ls:显示当前路径下文件及目录
(1)ls –l: 显示长列表:权限前一列是文件类型:
d:根目录中文件
-:表示普通文件
c | b:设备目录中文件 c指字符,b指字节
(2)ls –l –a : 将目录下的隐藏文件也显示出来。
隐藏文件会在文件名前加一个.:.文件名。
注:ls后可以加多个目录:同时显示这些目录下文件。
3.cd +路径 :切换工作目录
cd .. : 切换到上一级目录
cd 回车:去到当前用户的家目录
cd ~ : 去到当前用户的家目录
cd - : 去到之前的目录。
cd ~用户名:去到这个用户的家目录 但是这种命令只可以是root用户使用。
注:./sxt/1dir ./sxt/2dir ./sxt/3dir : 相当于 ./sxt/{1,2,3}dir
4. pwd :打印当前工作目录所在路径
5.创建文件/目录:mkdir 文件名/目录
mkdir 文件名:创建文件
mkdir -p 目录:深度创建一个目录
mkdir 目录名 目录名 目录名…: 同时创建多个目录。
6. 删除目录:rm 文件名/目录
参数: -f 强制删除 false
-r 删除目录,表示自己知道这是一个目录。
rm –rf / :强制删除根目录下所有文件。
7. cp拷贝 复制:
cp 文件名 目录:拷贝指定文件到指定目录下
cp –r 目录 目录:递归拷贝目录 –r recursion 递归
8.mv移动: mv 旧文件名 新文件名:重命名
9. ln链接 :链接分为硬链接和软链接。
共性:修改其中一方另一方也一定能看到变化。
硬链接:ln 绝对路径 绝对路径 eg: ln ooxx.log xx.log
两个文件名引用指向同一个位置。
ls –l –i 文件名:显示指定文件名指向哪一个位置。
如果删除掉其中一个的话,硬盘中还存有这个文件,只是删除了一个引用。
软链接:ln –s绝对路径 绝对路径 --s:soft 柔软的。
软链接相当于windows系统中的快捷方式,删除了原文件,新的引用也不能用了。
两个文件名指向的是不同的位置。
注: ln后面跟的最好是绝对路径,从/开始,eg:/path/desc
10.查看文件相关命令:
(1)cat命令: cat 文件名
直接显示文件所有内容,一般是在查看小文件时会使用。内容多的文件看不到所有内容。
解决了这个问题的其他命令:
(2)more 文件名:先显示一页,回车 按行往下翻 / 空格 按页往下翻,,,翻到文章末尾会直接退出。
(3)less 文件名:先显示一页,回车 按行往下翻 / 空格 按页往下翻,,,翻到最后会停住,可以按B往回退着看。
(4)head 文件名:默认显示指定文件前十行。
head –数字:显示指定数字的前几行
(5)tail 文件名:默认显示后10行。
tail –数字:显示指定文件的后几行。
补:显示指定文件的其中几行:使用管道
输出文件中第三行: head -3 profile | tail -1
11. 文本流 (文件描述符 file descriptor):
!本质:任何程序都有IO。
!规范:任何的进程被创建时都一定会有三个IO:
0:标准输入,1:标准输出,2:错误输出
!抽象:linux系统中将IO都抽象成了数字,就是文件描述符fd
查看当前进程:
有一个文件/proc存在于内存中,用来存储内核中所有的进程信息。
cd /proc/$$/fd 进到当前进程ID($$)文件中fd目录下,ll查看IO信息。
/dev/pts/0为当前的虚拟终端
/dev/pts/ 目录下存放虚拟终端的bash指向
12.重定向:
(1)标准输出 1 :
将标准输出1重定向到文件中 : ls –l /etc 1> ls.out
注:文件描述符1和>之间不能有空白符。如果有就会被bash默认按空白符切割后当做ls命令的参数执行。
一个>是覆盖操作,两个>>是追加操作
(2)错误输出 2 :
ls –l /god.txt 2> ls.out (目录中无god.txt文件)
ls -l /hhh / 2>info.out 将错误输出定位到info.out
ls –l /yes /error 1>yes.out 2>error.out 重定向标准输出和错误输出到其他文件。
但工作中,用的最多的还是将标准输出和错误输出都定向到同一文件中。
特殊写法:
ls -l /usr /hhh >& log.out
ls -l /usr /hhh &> log.out
注:>后的内容如果是一个文件描述符的话,需要在前面加一个&。
(3)标准输入 0:
read命令:
read 变量名:阻塞用户的输入。
从标准输入中获取内容,当识别到用户输入回车键时结束命令,将用户所有的输入都付给指定的变量。
<<<: 程序<<<字符串
例: read sxt 0<<< “cmjcmjcmj” 将符号后的字符串放入之前程序的输入中。(把字符串赋值给read后面的变量)
<<: 首尾呼应数据段 read将用户输入中的第一行内容赋给read后面指定的变量名。
例:
使用场景:
cat 0< “”
注:<后面跟的是文件,<&后面跟的是文件修饰符fd
人生没有白走的路,你走的每一步都算数。