【Linux系统编程】2. Linux基本指令(上)
文章目录
- 一、Linux下基本指令
- 1、ls指令
- 2、pwd指令
- 3、cd指令
- 4、touch指令
- 5、mkdir 指令
- 6、rmdir指令 和 rm指令
- 1)rmdir指令
- 2)rm指令
- 7、man指令
- 8、cp指令
- 9、mv指令
- 10、cat指令
- 11、more指令
- 12、less指令
- 13、head指令
- 14、tail指令
- 15、date指令
一、Linux下基本指令
1、ls指令
语法: ls [选项] [目录或文件]
功能: 对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。
常⽤选项:
- -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。
- -d 将⽬录像⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。如:
ls ‒d 指定目录
- -i 输出⽂件的 i 节点的索引信息。如:
ls ‒ai 指定文件
- -k 以 k 字节的形式表⽰⽂件的⼤⼩。如:
ls ‒alk 指定文件
- -l 列出⽂件的详细信息。
- -n ⽤数字的 UID,GID 代替名称。
- -F 在每个⽂件名后附上⼀个字符以说明该⽂件的类型,“*”表⽰可执⾏的普通⽂件;“/”表⽰⽬录;“@”表⽰符号链接;“|”表⽰FIFOs;“=”表⽰套接字(sockets)。
- -r 对⽬录反向排序。
- -t 以时间排序。
- -s 在l⽂件名后输出该⽂件的⼤⼩。(⼤⼩排序,如何找到⽬录下最⼤的⽂件)
- -R 列出所有⼦⽬录下的⽂件。(递归)
- -1 ⼀⾏只输出⼀个⽂件。
举例:
列出当前⽬录下的所有子目录和⽂件:ls
列出当前⽬录下的所有⼦⽬录与⽂件,包括 . 开头的隐含文件:ls -a
以详细信息列出当前目录下的所有子目录和文件(包括隐含文件):ls -al
以详细信息列出当前目录下的所有文件和目录(包括隐藏文件),并在不同类型的文件 / 目录名称后添加特殊符号标记其类型:ls -alF
注意:ll
是ls -l
的缩写。
2、pwd指令
语法: pwd
功能: 显⽰⽤⼾当前所在的⽬录。
常⽤选项: ⽆
举例:
3、cd指令
Linux理论知识: 路径的认识
- Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件。
- 其中普通⽂件⼀定是⽬录树的叶⼦节点。
- ⽬录可能是叶⼦(空⽬录),也可能是路上节点。
理解路径存在的意义: 树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就需要具有唯⼀性的⽅案来进⾏定位⽂件。其中任何⼀个节点,都只有⼀个⽗节点,所以,从根⽬录开始,定位指定⽂件,路径具有唯⼀性。
- 绝对路径:⼀般从 / 开始,不依赖其他⽬录的定位⽂件的⽅式。
- 相对路径:相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式。
- 绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤。
- 相对路径因为它的便捷性,⼀般在命令⾏中使⽤较多。
语法: cd 目录名
功能: 改变⼯作⽬录,将当前⼯作⽬录改变到指定的⽬录下。
举例:
返回上级目录:cd ..
绝对路径定位目录:cd /home/mydir
相对路径定位目录:cd ../mydir
快速进入自己的家目录:cd ~
返回到最近访问目录:cd -
4、touch指令
语法: touch [选项] 文件
功能: touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者创建⼀个空的⽂件。
常⽤选项:
- -a:仅更改访问时间
- -c:仅更改修改时间
举例:
创建普通文件:touch newFile.txt
查看文件时间:stat newFile.txt
修改文件access时间:touch -a newFile.txt
修改文件Modify时间:touch -m newFile.txt
5、mkdir 指令
语法: mkdir [选项] dirname
功能: 在当前⽬录下创建⼀个名为“dirname”的⽬录
常⽤选项:
- -p/–parents:可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录。
举例:
创建普通空目录:mkdir mydir
递归建立多个目录,创建指定路径:mkdir -p path1/path2/path3/path4
tree命令是一个递归以树状结构显示指定目录的命令,如果没有安装且当前用户是root:yum install -y tree
可以下载tree命令。
如果当前用户是普通用户: sudo yum install -y tree
6、rmdir指令 和 rm指令
1)rmdir指令
rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,⽽rmdir是删除目录。
语法: rmdir [-p] [dirName]
适⽤对象: 具有当前⽬录操作权限的所有使⽤者
功能: 删除空⽬录
常⽤选项:
- -p 当⼦⽬录被删除后如果⽗⽬录也变成空⽬录的话,就连带⽗⽬录⼀起删除。
举例:
删除空目录:rmdir mydir
删除路径:rmdir -p path1/path2/path3/path4
指定路径中有不为空的路径,便无法删除
2)rm指令
rm指令可以同时删除⽂件或⽬录,一般更习惯于使用rm来进行删除。
语法: rm [-f-i-r-v] [dirName/dir]
适⽤对象: 所有使⽤者
功能: 删除⽂件或⽬录
常⽤选项:
- -f 即使⽂件属性为只读(即写保护),亦直接删除
- -i 删除前逐⼀询问确认
- -r 删除⽬录及其下所有⽂件
举例:
删除普通文件:rm hello.txt
删除目录文件:rm -r dir
删除普通文件前询问:rm -i newFile.txt
删除目录前询问:rm -ri d
递归强制删除非空目录:rm -rf path1
7、man指令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助。
语法: man [选项] 命令
常⽤选项:
- -k 根据关键字搜索联机帮助
- -num 只在第num章节查找
- -a 将所有章节的都显⽰出来,⽐如man printf 它缺省从第⼀章开始搜索,知道就停⽌,直到所有章节都搜索完毕,当按下q退出。
解释⼀下: man⼿册分为9章(不同系统可能会有差别)
- 1 是普通的命令
- 2 是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么头⽂件)
- 3 是库函数,如printf,fread是特殊⽂件,也就是/dev下的各种设备⽂件
- 4 略
- 5 是指⽂件的格式,⽐如passwd,就会说明这个⽂件中各个字段的含义
- 6 是给游戏留的,由各个游戏⾃⼰定义
- 7 是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明
- 8 是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig
- 9 略
举例:
查看printf指令:man printf
查看系统调⽤:man 2 fork
查看C库函数:man 3 printf
查看变量:man 7 signal
查看man⼿册⾃⼰:man man
8、cp指令
语法: cp [选项] 源文件或目录 目标文件或目录
功能: 复制⽂件或⽬录
说明:
- cp指令⽤于复制⽂件或⽬录。
- 如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中。
常⽤选项:
- -f 或 --force 强⾏复制⽂件或⽬录,不论⽬的⽂件或⽬录是否已经存在
- -i 或 --interactive 覆盖⽂件之前先询问⽤⼾
- -r 递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号链接,则⼀律视为普通⽂件处理
cp普通文件:cp myfile.txt myfile-backup.txt
将多个文件拷贝到指定路径下:cp *.txt dir
注:*表⽰通配符,匹配所有.txt结尾的文件名。
cp如果目标文件存在,就覆盖:cp myfile.txt myfile-backup.txt
递归强制拷贝整个目录:cp -rf test test-backup
9、mv指令
mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move(rename) files,经常⽤来备份⽂件或者⽬录。
语法: mv [选项] 源文件或目录 目标文件或目录
功能:
- 视mv命令中第⼆个参数类型的不同(⽬标⽂件或⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。
- 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
- 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。
常⽤选项:
- -f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖
- -i:若⽬标⽂件(destination)已经存在时,就会询问是否覆盖!
举例:
更改名称:mv myfile.txt yourfile.txt
如果当前路径存在同名文件,改名即覆盖:mv yourfile.txt myfile.txt
如果当前路径存在同名文件,改名前可以添加 i 选项,让系统提出警告供用户做选择:mv -i yourfile.txt myfile.txt
移动文件:mv myfile.txt temp
移动目录:mv tmp tmp1
10、cat指令
语法: cat [选项] [文件]
功能: 查看⽬标⽂件的内容
常⽤选项:
- -b 对⾮空输出⾏编号
- -n 对输出的所有⾏编号
- -s 不输出多⾏空⾏
举例:
命令行构建多行文本:cnt=0; while [ $cnt -le 10 ]; do echo "hello Linux"; let cnt++; done > temp.txt
查看文件内容:cat temp.txt
修改temp.txt,使其携带多行空行:vim temp.txt
先点击 i 进入编辑模式,编辑完成后点击Esc退出编辑模式,再输入:wq
保存并退出。
测试 -b 对非空输出行编号:cat -b temp.txt
测试 -n 对输出的所有行编号:cat -n temp.txt
测试 -s 不输出多行空行,多行空行压缩成为⼀行:cat -s temp.txt
11、more指令
语法: more [选项]
功能: more命令,功能类似cat
常⽤选项:
- -n 指定输出⾏数
- q 退出more
举例:
命令行输出多行文本:cnt=0; while [ $cnt -le 2000 ]; do echo "hello Linux"; let cnt++; done > temp.txt
测试 -n 指定输出行数:more -10 temp.txt
12、less指令
-
less⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具,应该说是linux正统查看⽂件内容的⼯具,功能极其强⼤。
-
less 的用法⽐起 more 更加的有弹性,在 more 的时候,我们并没有办法向前⾯翻,只能往后⾯看。
-
但若使用了 less 时,就可以使用 [pageup] [pagedown] 以及 上、下等按键的功能来往前往后翻看文件,更容易用来查看⼀个文件的内容。
-
除此之外,在 less ⾥头可以拥有更多的搜索功能,不⽌可以向下搜,也可以向上搜。
语法: less [参数] 文件
功能: less与more类似,但使⽤less可以随意浏览⽂件,⽽more仅能向前移动,却不能向后移动,⽽且less在查看之前不会加载整个⽂件。
选项:
- -i 忽略搜索时的⼤⼩写
- -N 显⽰每⾏的⾏号
- /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重复前⼀个搜索(与 / 或 ? 有关)
- N:反向重复前⼀个搜索(与 / 或 ? 有关)
- q:quit
举例:
命令行输出多行文本:cnt=0; while [ $cnt -le 2000 ]; do echo "hello Linux"; let cnt++; done > temp.txt
测试搜索功能:less -N temp.txt
13、head指令
head 与 tail 就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head ⽤来显⽰档案的开头⾄标准输出中,⽽ tail 想当然就是看档案的结尾。
语法: head [参数] [文件]
功能: head ⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。
选项:
- -n 打印的行数
举例:
默认打印文件前10行:head temp.txt
打印前5行:head -5 temp.txt
14、tail指令
tail 命令从指定点开始将⽂件写到标准输出。使⽤ tail 命令的 -f 选项可以⽅便的查阅正在改变的⽇志⽂件,tail -f filename
会把 filename ⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容。
语法: tail [参数] [文件]
功能: ⽤于显示指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。
选项:
• -f 循环读取
• -n 打印的⾏数
举例:
默认打印后10行:tail temp.txt
打印后5行:tail -5 temp.txt
如何显示文件的 [180,200] 行的内容:head -200 temp.txt | tail -20
15、date指令
指定格式显⽰时间: date +%Y:%m:%d
⽤法: date [OPTION] [+FORMAT]
在显⽰⽅⾯,使⽤者可以设定欲显⽰的格式,格式设定为⼀个加号后接数个标记,其中常⽤的标记列表如下:
- %H:⼩时
- %M:分钟
- %S:秒
- %X:相当于
%H:%M:%S
- %d:日
- %m:⽉份
- %Y:完整年份
- %F:相当于
%Y-%m-%d
在设定时间⽅⾯:
date -s
// 设置当前时间,只有root权限才能设置,其他只能查看。date -s 20080523
// 设置成20080523,这样会把具体时间设置成当天的00:00:00- date -s 01:01:01 // 设置具体时间,不会对⽇期做更改
date -s “01:01:01 2008-05-23″
// 这样可以设置全部时间date -s “01:01:01 20080523″
// 这样可以设置全部时间date -s “2008-05-23 01:01:01″
// 这样可以设置全部时间date -s “20080523 01:01:01″
// 这样可以设置全部时间
时间戳:
- 时间->时间戳:
date +%s
- 时间戳->时间:
date -d@1932342323
- Unix时间戳(英⽂为Unix epoch,Unix time,POSIX time 或 Unix timestamp)是从1970年1⽉1⽇(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
举例:
显示常规时间 :
date
date +%Y/%m/%d
date +%Y/%m/%d-%H:%M:%S
显示时间戳:date +%s
时间戳转成可视时间:date +%Y/%m/%d-%H:%M:%S -d @时间戳