掌握Linux基础指令:从入门到精通
本文介绍了Linux系统的基本指令和权限管理。主要内容包括:1. 常用文件操作指令(ls、pwd、cd、touch、mkdir、rm、cp、mv等)的使用方法和常用选项;2. 文件查看指令(cat、more、less、head、tail)的功能和参数;3. 文件查找和压缩解压指令(find、which、grep、zip/unzip、tar)的使用;4. Linux权限概念,包括用户分类、文件权限表
目录
一.Linux下基本指令
1.ls指令
语法: ls [选项] [⽬录或⽂件]
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。
常⽤选项:
• -a:列出⽬录下的所有⽂件,包括以.和..开头的隐含⽂件;
•-l:列出⽂件的详细信息;’
•-d:将⽬录像⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。如:ls ‒d 指定⽬录
•-n:⽤数字的UID,GID代替拥有者、所属组名称。(介绍UID,GID)
• -F:在每个⽂件名后附上⼀个字符以说明该⽂件的类型,“*”表⽰可执⾏的普通⽂件;“/”表⽰ ⽬录;“@”表⽰符号链接;“|”表⽰FIFOs;“=”表⽰套接字(sockets)。(文件类型识别)
•-r:对⽬录反向排序
•-t:以时间排序
•-s:在l⽂件名后输出该⽂件的⼤⼩。(⼤⼩排序,如何找到⽬录下最⼤的⽂件)
• -R:列出所有⼦⽬录下的⽂件。(递归)
• -1:⼀⾏只输出⼀个⽂件。
举例:
[whb@bite-alicloud test]$ ls
dir file.txt
[whb@bite-alicloud test]$ ls -a
. .. dir file.txt
[whb@bite-alicloud test]$ ls -a -l
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 .
drwx------ 22 whb whb 4096 Jan 11 14:21 ..
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -a -l -F
total 12
drwxrwxr-x 3 whb whb 4096 Jan 11 15:01 ./
drwx------ 22 whb whb 4096 Jan 11 14:21 ../
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
[whb@bite-alicloud test]$ ls -alFn
total 12
drwxrwxr-x 3 1003 1003 4096 Jan 11 15:01 ./
drwx------ 22 1003 1003 4096 Jan 11 14:21 ../
drwxrwxr-x 2 1003 1003 4096 Jan 11 14:22 dir/
-rw-rw-r-- 1 1003 1003 0 Jan 11 14:22 file.txt
2.pwd命令
语法:pwd;
功能:显⽰⽤⼾当前所在的⽬录
举例:
[whb@bite-alicloud test]$ pwd
/home/whb/test
3.cd指令
Linux理论知识:路径的认识
• Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件;
• 其中普通⽂件⼀定是⽬录树的叶⼦节点;
• ⽬录可能是叶⼦(空⽬录),也可能是路上节点;
• 理解路径存在的意义:树状组织⽅式,都是为了保证快速定位查找到指定的⽂件,⽽定位⽂件就 需要具有唯⼀性的⽅案来进⾏定位⽂件。其中任何⼀个节点,都只有⼀个⽗节点,所以,从根⽬ 录开始,定位指定⽂件,路径具有唯⼀性;
• 绝对路径:⼀般从/开始,不依赖其他⽬录的定位⽂件的⽅式;
• 相对路径:相对于当前⽤⼾所处⽬录,定位⽂件的路径⽅式;
• 绝对路径⼀般不会随着⽤⼾的路径变化⽽丧失唯⼀性,⼀般在特定服务的配置⽂件中经常被使⽤
• 相对路径因为它的便捷性,⼀般在命令⾏中使⽤较多;
语法:cd ⽬录名
功能:改变⼯作⽬录。将当前⼯作⽬录改变到指定的⽬录下
举例:
# 返回上级⽬录
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd ..
[whb@bite-alicloud home]$ pwd
/home
# 绝对路径定位⽬录或者⽂件
[whb@bite-alicloud home]$ pwd
/home
[whb@bite-alicloud home]$ cd /home/whb/test
[whb@bite-alicloud test]$ pwd
/home/whb/test
# 相对路径定位⽬录或者⽂件
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ../temp/
[whb@bite-alicloud temp]$ pwd
/home/whb/temp
# 每⼀次新建⼀个⽤⼾都会在/home⽬录下为新⽤⼾创建新的⼯作⽬录,⽬录以新⽤⼾名称命名
# root⽤⼾在安装操作系统的时候,就已经内置了⼯作⽬录: /root
[whb@bite-alicloud temp]$ ls /home
# 快速进⼊⾃⼰的家⽬录
[whb@bite-alicloud test]$ whoami
whb
[whb@bite-alicloud test]$ pwd
/home/whb/test
[whb@bite-alicloud test]$ cd ~
[whb@bite-alicloud ~]$ pwd
/home/whb
# 返回到最近访问⽬录
[whb@bite-alicloud ~]$ pwd # 当前在/home/whb⽬录下
/home/whb
[whb@bite-alicloud ~]$ cd / # 进⼊/⽬录
[whb@bite-alicloud /]$ pwd
/
[whb@bite-alicloud /]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/home/whb
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb
[whb@bite-alicloud ~]$ cd - # 直接可以回退到最近⼀次所处的⽬录:/
/
[whb@bite-alicloud /]$ pwd
/
[whb@bite-alicloud /]$ cd - # 同上
/home/whb
[whb@bite-alicloud ~]$ pwd
/home/whb
4.touch 指令
语法: touch [选项]... ⽂件...
功能:touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在 的⽂件。
常⽤选项:
• -a:change only the access time
• -c : change only the modification time
举例:
[whb@bite-alicloud test]$ touch newFile.txt
[whb@bite-alicloud test]$ ls
dir file.txt newFile.txt
5.mkdir 指令
语法: mkdir [选项] dirname...
功能:在当前⽬录下创建⼀个名为“dirname”的⽬录 常⽤选项:
• -p/--parents:可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃ 动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多个⽬录;
举例:
# 创建普通空⽬录
[whb@bite-alicloud test]$ ls -l
total 4
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
[whb@bite-alicloud test]$ mkdir mydir
[whb@bite-alicloud test]$ ls -l
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
# 递归建⽴多个⽬录,创建指定路径
[whb@bite-alicloud test]$ mkdir -p path1/path2/path3/path4
[whb@bite-alicloud test]$ ls -l
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 15:15 mydir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:16 path1
[whb@bite-alicloud test]$ tree path1
path1
└── path2
└── path3
└── path4
# tree命令是⼀个递归以树状结构显⽰指定⽬录的命令,如果没有安装
# 如果当前⽤⼾是root: yum install -y tree (因为现在开始⽤的都是root,所以推荐这个⽤法)
# 如果当前⽤⼾是普通⽤⼾: sudo yum install -y tree (后⾯讲讲完vim,⼤家才能将⾃⼰添加
到系统信任列表中,暂时普通⽤⼾⽆法使⽤sudo)
6.rmdir指令&&rm指令
(1)rmdir是⼀个与mkdir相对应的命令,mkdir是建⽴⽬录,⽽rmdir是删除命令。
语法: rmdir [-p] [dirName]
适⽤对象:具有当前⽬录操作权限的所有使⽤者
功能:删除空⽬录 常⽤选项:
• -p当⼦⽬录被删除后如果⽗⽬录也变成空⽬录的话,就连带⽗⽬录⼀起删除。
举例:
tree mydir/
mydir/
0 directories, 0 files
[whb@bite-alicloud test]$ rmdir mydir
(2)rm命令可以同时删除⽂件或⽬录
语法: rm [-f-i-r-v] [dirName/dir]
适⽤对象:所有使⽤者
功能:删除⽂件或⽬录
常⽤选项:
• -f:即使⽂件属性为只读(即写保护),亦直接删除
• -i 删除前逐⼀询问确认
• -r删除⽬录及其下所有⽂件
举例:
# 删除普通⽂件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 14:22 file.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm file.txt
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
# 删除⽬录⽂件
[whb@bite-alicloud test]$ ll
total 8
drwxrwxr-x 2 whb whb 4096 Jan 11 14:22 dir
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm dir
rm: cannot remove ‘dir’: Is a directory
[whb@bite-alicloud test]$ rm -r dir
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
# 删除普通⽂件前询问
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 15:09 newFile.txt
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ rm -i newFile.txt
rm: remove regular empty file ‘newFile.txt’? y
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
[whb@bite-alicloud test]$ ll
total 4
drwxrwxr-x 3 whb whb 4096 Jan 11 15:26 path1
# 删除⽬录前询问
[whb@bite-alicloud test]$ mkdir -p d/d/d/d
[whb@bite-alicloud test]$ tree d
d
└── d
└── d
└── d
3 directories, 0 files
[whb@bite-alicloud test]$ rm -ri d
rm: descend into directory ‘d’? y
rm: descend into directory ‘d/d’? y
rm: descend into directory ‘d/d/d’? y
rm: remove directory ‘d/d/d/d’? y
rm: remove directory ‘d/d/d’? y
rm: remove directory ‘d/d’? y
rm: remove directory ‘d’? y
[whb@bite-alicloud test]$ ll
total 0
# 递归强制删除⾮空⽬录
[whb@bite-alicloud test]$ tree path1/
path1/
├── myfile.txt
└── path2
└── myfile.txt
1 directory, 2 files
[whb@bite-alicloud test]$ rm -f path1
rm: cannot remove ‘path1’: Is a directory
[whb@bite-alicloud test]$ rm -rf path1
[whb@bite-alicloud test]$ ll
total 0
7.man 指令
Linux的命令有很多参数,我们不可能全记住,可以通过查看联机⼿册获取帮助
语法:man [选项] 命令
解释⼀下:man⼿册分为9章(不同系统可能会有差别)
• 1 是普通的命令
• 2 是系统调⽤,如open,write之类的(通过这个,⾄少可以很⽅便的查到调⽤这个函数,需要加什么 头⽂件)
• 3是库函数,如printf,fread4是特殊⽂件,也就是/dev下的各种设备⽂件
• 4略
• 5 是指⽂件的格式,⽐如passwd,就会说明这个⽂件中各个字段的含义
• 6是给游戏留的,由各个游戏⾃⼰定义
• 7是附件还有⼀些变量,⽐如像environ这种全局变量在这⾥就有说明
• 8是系统管理⽤的命令,这些命令只能由root使⽤,如ifconfig
8.cp 指令
语法: cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:复制⽂件或⽬录
说明:
• cp指令⽤于复制⽂件或⽬录
• 如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的⽬录,则它会把前⾯指定 的所有⽂件或⽬录复制到此⽬录中
常⽤选项:
• -f 或 --force 强⾏复制⽂件或⽬录,不论⽬的⽂件或⽬录是否已经存在
• -i 或 --interactive 覆盖⽂件之前先询问⽤⼾
• -r递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符 号链接,则⼀律视为普通⽂件处理
举例:
# cp普通⽂件
ll
total 4
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cp myfile.txt myfile-backup.txt
[whb@bite-alicloud test]$ ll
total 8
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
# 将多个⽂件拷⻉到指定路径下
[whb@bite-alicloud test]$ ll
total 8
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ mkdir dir
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 15:48 dir
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ cp *.txt dir # *表⽰通配符,匹配所有.txt结尾的⽂件名
[whb@bite-alicloud test]$ ll
total 12
drwxrwxr-x 2 whb whb 4096 Jan 11 15:48 dir
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile-backup.txt
-rw-rw-r-- 1 whb whb 22 Jan 11 15:47 myfile.txt
[whb@bite-alicloud test]$ tree dir
dir
├── myfile-backup.txt
└── myfile.txt
# cp如果⽬标⽂件存在,就覆盖
[whb@bite-alicloud test]$ echo "hello bite tech" > myfile.txt
[whb@bite-alicloud test]$ cat myfile.txt
hello bite tech
[whb@bite-alicloud test]$ cp myfile.txt myfile-backup.txt
[whb@bite-alicloud test]$ cat myfile-backup.txt
hello bite tech
# 拷⻉前询问
[whb@bite-alicloud test]$ cp -i myfile.txt myfile-backup.txt
cp: overwrite ‘myfile-backup.txt’? y
# 递归强制拷⻉整个⽬录
[whb@bite-alicloud ~]$ tree test
test
├── dir
│ ├── myfile-backup.txt
│ └── myfile.txt
├── myfile-backup.txt
└── myfile.txt
1 directory, 4 files
[whb@bite-alicloud ~]$ cp -rf test test-backup
[whb@bite-alicloud ~]$ tree test-backup
test-backup
├── dir
│ ├── myfile-backup.txt
│ └── myfile.txt
├── myfile-backup.txt
└── myfile.txt
1 directory, 4 files
9.mv 指令
mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move(rename)files,经常⽤来备份⽂件 或者⽬录
语法:mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:
1. 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其 移⾄⼀个新的⽬录中。
2. 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬ 录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
3. 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中。
常⽤选项:
• -f:force强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖
• -i:若⽬标⽂件(destination)已经存在时,就会询问是否覆盖!
举例:
# 更改名称
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:56 myfile.txt
[whb@bite-alicloud test]$ mv myfile.txt yourfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:56 yourfile.txt
# 如果当前路径存在同名⽂件,改名即覆盖
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:58 myfile.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 yourfile.txt
[whb@bite-alicloud test]$ mv yourfile.txt myfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 myfile.txt
# 如果当前路径存在同名⽂件,改名前可以添加i选项,让系统提出警告供⽤⼾做选择
[whb@bite-alicloud test]$ touch yourfile.txt
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:57 myfile.txt
-rw-rw-r-- 1 whb whb 0 Jan 11 15:59 yourfile.txt
[whb@bite-alicloud test]$ mv -i yourfile.txt myfile.txt
mv: overwrite ‘myfile.txt’? y
[whb@bite-alicloud test]$ ll
total 0
-rw-rw-r-- 1 whb whb 0 Jan 11 15:59 myfile.txt
# mv整个⽬录
[whb@bite-alicloud test]$ touch myfile.txt
[whb@bite-alicloud test]$ mkdir temp
[whb@bite-alicloud test]$ ll
total 4
-rw-rw-r-- 1 whb whb 0 Jan 11 17:56 myfile.txt
drwxrwxr-x 2 whb whb 4096 Jan 11 17:56 temp
[whb@bite-alicloud test]$ mv myfile.txt temp
[whb@bite-alicloud test]$ ls
temp
[whb@bite-alicloud test]$ mv temp ../
[whb@bite-alicloud test]$ ls
[whb@bite-alicloud test]$ ls -d ../temp
../temp
10.cat 指令
语法: cat [选项] [⽂件]
功能:查看⽬标⽂件的内容
常⽤选项:
• -b对⾮空输出⾏编号
• -n对输出的所有⾏编号
• -s不输出多⾏空⾏
举例:
# 命令⾏构建多⾏⽂本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 20 ]; do echo "hello bite";
let cnt++; done > temp.txt
# 测试cat基本命令
[whb@bite-alicloud test]$ cat temp.txt
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
# cat 输出携带⾏号
[whb@bite-alicloud test]$ cat -b temp.txt
1 hello bite
2 hello bite
3 hello bite
4 hello bite
5 hello bite
6 hello bite
7 hello bite
...
# 修改temp.txt,使其携带多⾏空⾏
[whb@bite-alicloud test]$ vim temp.txt
# 测试 -b 对⾮空输出⾏编号
[whb@bite-alicloud test]$ cat -b temp.txt
1 hello bite
2 hello bite
3 hello bite
4 hello bite
5 hello bite
6 hello bite
7 hello bite
...
# 测试-n 对输出的所有⾏编号
[whb@bite-alicloud test]$ cat -n temp.txt
1 hello bite
2 hello bite
3 hello bite
4
5
6
7 hello bite
8 hello bite
9
10 hello bite
11 hello bite
...
# 测试 -s 不输出多⾏空⾏,多⾏空⾏压缩成为⼀⾏
[whb@bite-alicloud test]$ cat -s temp.txt
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
11.more 指令
语法: more [选项]
功能:more命令,功能类似cat
常⽤选项:
• -n指定输出⾏数
• q退出more
举例:
1 # 命令⾏输出多⾏⽂本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello
bite"; let cnt++; done > temp.txt
# -n 指定输出⾏数
[whb@bite-alicloud test]$ more -10 temp.txt
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
hello bite
--More--(0%)
12.less 指令
• less⼯具也是对⽂件或其它输出进⾏分⻚显⽰的⼯具,应该说是linux正统查看⽂件内容的⼯具, 功能极其强⼤
• less的⽤法⽐起more更加的有弹性,在more的时候,我们并没有办法向前⾯翻,只能往后⾯看
• 但若使⽤了less时,就可以使⽤上下箭头等按键的功能来往前往后翻看⽂件,更容易⽤来查看⼀个⽂件的内容
• 除此之外,在less⾥头可以拥有更多的搜索功能,不⽌可以向下搜,也可以向上搜。
语法: less [参数] ⽂件
功能:less与more类似,但使⽤less可以随意浏览⽂件,⽽more仅能向前移动,却不能向后移动,⽽且less在查看之前不会加载整个⽂件。
选项:
• -i忽略搜索时的⼤⼩写
• -N显⽰每⾏的⾏号
• /字符串:向下搜索“字符串”的功能 (其实是全局搜索,但是表面呈现的是这种效果,?同理)
• ?字符串:向上搜索“字符串”的功能
• n:找到下⼀个搜索(与/或?有关)
• N:找到上⼀个搜索(与/或?有关)
• q:quit
举例:
# 命令⾏输出多⾏⽂本
[whb@bite-alicloud test]$ cnt=0; while [ $cnt -le 2000 ]; do echo "hello
$cnt"; let cnt++; done > temp.txt
# 测试搜索和-N等功能
[whb@bite-alicloud test]$ less -N temp.txt
1 hello 0
2 hello 1
3 hello 2
4 hello 3
5 hello 4
6 hello 5
7 hello 6
8 hello 7
9 hello 8
10 hello 9
11 hello 10
12 hello 11
13 hello 12
14 hello 13
...
# 其他选项也可以直接测试
13.head 指令
head与tail就像它的名字⼀样的浅显易懂,它是⽤来显⽰开头或结尾某个数量的⽂字区块,head⽤ 来显⽰档案的开头⾄标准输出中,⽽tail想当然尔就是看档案的结尾。
语法:
head[参数]...[⽂件]...
功能:head⽤来显⽰档案的开头⾄标准输出中,默认head命令打印其相应⽂件的开头10⾏。
选项: -n 显⽰的⾏数
举例:
[whb@bite-alicloud test]$ head temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
[whb@bite-alicloud test]$ head -5 temp.txt
hello 0
hello 1
hello 2
hello 3
hello 4
14.tail指令
tail命令从指定点开始将⽂件写到标准输出.使⽤tail命令的-f选项可以⽅便的查阅正在改变的⽇志⽂ 件,tail-f filename会把filename⾥最尾部的内容显⽰在屏幕上,并且不断刷新,使你看到最新的⽂件内容.
语法: tail 必要参数 [⽂件]
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理(与cat一样)。常⽤查看⽇志⽂件。
选项:
• -f循环读取
• -n显⽰⾏数
举例:
# 基本功能演⽰
[whb@bite-alicloud test]$ tail temp.txt
hello 1991
hello 1992
hello 1993
hello 1994
hello 1995
hello 1996
hello 1997
hello 1998
hello 1999
hello 2000
[whb@bite-alicloud test]$ tail -3 temp.txt
hello 1998
hello 1999
hello 2000
模拟动态⽇志查看功能:
简单讲解管道和重定向:
(1)管道
管道是一种将多个命令连接起来的技术,使得一个命令的输出可以直接作为另一个命令的输入。它是一种特殊的文件,可以在两个进程之间传送数据流,实现进程间的通信。
管道的基本用法
command1 | command2 | command3
用例:
#!/bin/bash
# 创建一个包含多行文本的文件
cat > sample.txt << EOF
apple
banana
orange
apple
grape
apple
pear
EOF
echo "原始文件内容:"
cat sample.txt
echo -e "\n使用管道和grep只显示包含'apple'的行:"
cat sample.txt | grep "apple"
echo -e "\n使用管道和wc统计行数:"
cat sample.txt | wc -l
echo -e "\n使用管道和sort排序:"
cat sample.txt | sort
echo -e "\n使用管道和uniq去重:"
cat sample.txt | sort | uniq
# 清理临时文件
rm sample.txt
(2)重定向(> 和 >>)
重定向是指将命令的输出或输入重新定向到其他地方,比如文件、设备等。在Linux系统中,常用的重定向符号有两个:“>“和”>>”
重定向的基本用法
>
:将命令的输出写入文件(覆盖原有内容)(注意>文件名,如果文件不存在就创建)>>
:将命令的输出追加到文件末尾(不覆盖原有内容)<
:将文件内容作为命令的输入
用例:
#!/bin/bash
# 创建一个包含多行文本的文件
cat > original.txt << EOF
第一行
第二行
第三行
EOF
echo "原始文件内容:"
cat original.txt
echo -e "\n使用>重定向(覆盖):"
echo "这是新内容" > new.txt
cat new.txt
echo -e "\n使用>>重定向(追加):"
echo "这是追加的内容" >> new.txt
cat new.txt
echo -e "\n使用<重定向(输入):"
wc -l < original.txt
# 清理临时文件
rm original.txt new.txt
# 综合问题
# 如何显⽰⽂件的[180,200]⾏的内容
[whb@bite-alicloud test]$ head -200 temp.txt | tail -20
hello 180
hello 181
hello 182
hello 183
hello 184
hello 185
hello 186
hello 187
hello 188
hello 189
hello 190
hello 191
hello 192
hello 193
hello 194
hello 195
hello 196
hello 197
hello 198
hello 199
15.find 指令
语法: find pathname -options
功能:⽤于在⽂件树中查找⽂件,并作出相应的处理(可能访问磁盘);
常⽤选项:
• -name按照⽂件名查找⽂件
• 其他选项需要在查,这个命令其实⽐较复杂
# 在指定路径下搜索执⾏名称的⽂件
[whb@bite-alicloud test]$ find ~ -name test.c
/home/whb/test_code/old_code/test.c
/home/whb/test_code/test.c
...
16.which 指令
功能:搜索系统指定的命令的路径
举例:
[whb@bite-alicloud test]$ which ls
alias ls='ls --color=auto'
/usr/bin/ls
[whb@bite-alicloud test]$ which pwd
5 /usr/bin/pwd
17.whereis 指令
功能:⽤于找到程序的源、⼆进制⽂件或⼿册 ;
举例:
[whb@bite-alicloud test]$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[whb@bite-alicloud test]$ whereis libc.so
libc: /usr/lib64/libc.so /usr/lib64/libc.a /usr/share/man/man7/libc.7.gz
18.alias 指令
功能:设置命令的别名
举例:
[whb@bite-alicloud test]$ alias hello='ls -a -l -n'
[whb@bite-alicloud test]$ which hello
alias hello='ls -a -l -n'
/usr/bin/ls
[whb@bite-alicloud test]$ hello
total 36
drwxrwxr-x 2 1003 1003 4096 Jan 11 17:59 .
drwx------ 22 1003 1003 4096 Jan 11 17:57 ..
-rw-rw-r-- 1 1003 1003 28667 Jan 11 18:29 temp.txt
19.grep 指令
语法: grep [选项] 搜寻字符串 ⽂件
功能:在⽂件中搜索字符串,将找到的⾏打印出来
常⽤选项:
• -i:忽略⼤⼩写的不同,所以⼤⼩写视为相同
• -n:顺便输出⾏号
• -v:反向选择,亦即显⽰出没有'搜寻字符串'内容的那⼀⾏
举例:
[whb@bite-alicloud test]$ cat temp.txt
abcd
ABCD
hello
bite
1234
#基本查找
[whb@bite-alicloud test]$ grep "abcd" temp.txt
abcd
# 忽略⼤⼩写的不同,所以⼤⼩写视为相同
[whb@bite-alicloud test]$ grep -i "abcd" temp.txt
abcd
ABCD
# 顺便输出⾏号
[whb@bite-alicloud test]$ grep -n "abcd" temp.txt
1:abcd
[whb@bite-alicloud test]$ grep -ni "abcd" temp.txt
1:abcd
2:ABCD
# 反向选择,亦即显⽰出没有 '搜寻字符串' 内容的那⼀⾏
[whb@bite-alicloud test]$ grep -v "abcd" temp.txt
ABCD
hello
bite
1234
[whb@bite-alicloud test]$ grep -vn "abcd" temp.txt
2:ABCD
3:hello
4:bite
5:1234
[whb@bite-alicloud test]$ grep -vni "abcd" temp.txt
3:hello
4:bite
5:1234
20.zip/unzip 指令
语法: zip 压缩⽂件.zip ⽬录或⽂件
功能:将⽬录或⽂件压缩成zip格式
常⽤选项:
- -r:递归压缩目录及其子目录,确保整个目录结构被包含在压缩包中。
- -j:只压缩文件本身,不保留目录结构。
- -m:压缩后从文件系统中删除原始文件
用例:
#!/bin/bash
# 创建测试文件
echo "这是文件1的内容" > file1.txt
echo "这是文件2的内容" > file2.txt
mkdir -p testdir
echo "这是目录中的文件" > testdir/file3.txt
# 压缩文件
echo "正在压缩文件..."
zip files.zip file1.txt file2.txt
echo "压缩完成: files.zip"
# 压缩目录
echo "正在压缩目录..."
zip -r dir.zip testdir
echo "压缩完成: dir.zip"
# 解压文件
echo "正在解压文件..."
mkdir -p extracted
cd extracted
unzip ../files.zip -d /tmp
echo "解压完成"
# 返回上级目录
cd ..
# 清理
echo "清理临时文件..."
rm -rf testdir file1.txt file2.txt extracted
rm -f files.zip dir.zip
echo "清理完成"
21.关于rzsz
这个⼯具⽤于windows机器和远端的Linux机器通过XShell传输⽂件.安装完毕之后可以通过拖拽的 ⽅式将⽂件上传过去.
rzsz包含两个主要命令:
- rz:用于在SSH会话中通过Zmodem协议接收文件到本地计算机
- sz:用于在SSH会话中Zmodem协议发送文件到远程计算机
22.tar指令(重要)
打包/解包,不打开它,直接看内容
语法: tar [-cxtzjvf] ⽂件与⽬录 ....
参数:
• -c:建⽴⼀个压缩⽂件的参数指令(create的意思);
• -x:解开⼀个压缩⽂件的参数指令!
• -t:查看tarfile⾥⾯的⽂件!
• -z:是否同时具有gzip的属性?亦即是否需要⽤gzip压缩?
• -j:是否同时具有bzip2的属性?亦即是否需要⽤bzip2压缩?
• -v:压缩的过程中显⽰⽂件!这个常⽤,但不建议⽤在背景执⾏过程!
• -f:使⽤档名,请留意,在f之后要⽴即接档名喔!不要再加参数!
• -C:解压到指定⽬录
案例:
范例⼀:将整个/etc⽬录下的⽂件全部打包成为`/tmp/etc.tar`
[root@linux ~]$ tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]$ tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]$ tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
特别注意,在参数f之后的⽂件档名是⾃⼰取的,我们习惯上都⽤.tar来作为辨识;
如果加z参数,则以.tar.gz或.tgz来代表gzip压缩过的tarfile;
如果加j参数,则以.tar.bz2来作为附档名;
范例⼆:查阅上述/tmp/etc.tar.gz⽂件内有哪些⽂件?
1 [root@linux ~]$ tar -ztvf /tmp/etc.tar.gz
由于我们使⽤gzip压缩,所以要查阅该tarfile内的⽂件时,就得要加上z这个参数了!这很重要的!
范例三:将/tmp/etc.tar.gz⽂件解压缩在/usr/local/src底下
[root@linux ~]$ cd /usr/local/src
[root@linux src]$ tar -zxvf /tmp/etc.tar.gz
//或者
tar -zxvf /tmp/etc.tar.gz -C /usr/local/src
范例四:在/tmp底下,我只想要将/tmp/etc.tar.gz内的etc/passwd解开⽽已
[root@linux ~]$ cd /tmp
[root@linux tmp]$ tar -zxvf /tmp/etc.tar.gz etc/passwd
我可以透过tar-ztvf来查阅tarfile内的⽂件名称,如果单只要⼀个⽂件,就可以透过这个⽅式来下 达!注意到!etc.tar.gz内的根⽬录/是被拿掉了!
范例五:将/etc/内的所有⽂件备份下来,并且保存其权限!
[root@linux ~]$ tar -zxvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本⽂件的属性时!
范例六:将/etc/打包后直接解开在/tmp底下,⽽不产⽣⽂件!
[root@linux ~]$ cd /tmp
[root@linux tmp]$ tar -cvf - /etc | tar -xvf -
要注意的地⽅在於输出档变成-,⽽输⼊档也变成-,⼜有⼀个|存在〜;
分别代表着标准输出,标准输入,与管道命令!
整体效果:
这个命令实际上是在内存中完成了一次打包和解包操作,没有创建任何临时文件。具体过程是:
- 第一个tar命令将/etc目录打包
- 通过管道将打包数据直接传给第二个tar命令
- 第二个tar命令立即解包这些数据
二.Linux权限的概念
1.权限的概念
Linux下有两种⽤⼾:超级⽤⼾(root)、普通⽤⼾。
• 超级⽤⼾:可以再linux系统下做任何事情,不受限制
• 普通⽤⼾:在linux下做有限的事情。
• 超级⽤⼾的命令提⽰符是“#”,普通⽤⼾的命令提⽰符是“$”
命令:su [⽤⼾名]
功能:切换⽤⼾。
例如,要从root⽤⼾切换到普通⽤⼾user,则使⽤ su user。要从普通⽤⼾user切换到root⽤⼾则使⽤ su root(root可以省略),此时系统会提⽰输⼊root⽤⼾的 ⼝令。
2.Linux权限管理
1. ⽂件访问者的分类(⼈) • ⽂件和⽂件⽬录的所有者:u---User(中国平⺠法律问题)
• ⽂件和⽂件⽬录的所有者所在的组的⽤⼾(所属组):g---Group(不多说)
• 其它⽤⼾:o---Others(外国⼈)
2.⽂件访问权限
◦ 读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权限
◦ 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除添加移动⽬录内⽂件的权限
◦ 执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权 限 ◦ “—”表⽰不具有该项权限
⽂件权限值的表⽰⽅法:
(1) • 字符表⽰⽅法
使用字符表示权限,直观易懂:
- r(read):读取权限
- w(write):写入权限
- x(execute):执行权限
- -(无权限)
组合表示:
- 所有者权限:rwx
- 组权限:r-x
- 其他用户权限:r–
示例:rwxr-xr--
表示所有者有读写执行权限,组用户有读和执行权限,其他用户只有读权限。
(2)• 8进制数值表⽰⽅法
使用数字表示权限,便于批量修改:
- 4:读权限(r)
- 2:写权限(w)
- 1:执行权限(x)
- 0:无权限
组合计算:
- rwx = 4+2+1 = 7
- r-x = 4+0+1 = 5
- r-- = 4+0+0 = 4
示例:754
表示所有者权限为7(rwx),组权限为5(r-x),其他用户权限为4(r–)。
3.⽂件访问权限的相关设置⽅法
1. chmod 功能:设置⽂件的访问权限
格式:chmod[参数] 权限 ⽂件名
常⽤选项:
• R->递归修改⽬录⽂件的权限
• 说明:只有⽂件的拥有者和root才可以改变⽂件的权限
chmod命令权限值的格式:
2.chown
功能:修改⽂件的拥有者
格式:chown[参数] ⽤⼾名 ⽂件名
实例:
• chown user1 f1
• chown -R user1 filegroup1
3. chgrp
功能:修改⽂件或⽬录的所属组
格式:chgrp[参数] ⽤⼾组名 ⽂件名
常⽤选项:
、 -R 递归修改⽂件或⽬录的所属组
实例: chgrp users /abc/f2
4. umask
功能:
• 查看或修改⽂件掩码
• 新建⽂件夹默认权限=0666
• 新建⽬录默认权限=0777
• 但实际上你所创建的⽂件和⽬录,看到的权限往往不是上⾯这个值。原因就是创建⽂件或⽬录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的⽂件权限是:mask& ~umask;
格式:umask权限值
说明:将现有的存取权限减去权限掩码后,即可产⽣建⽴⽂件时预设权限。超级⽤⼾默认掩码值为 0022,普通⽤⼾默认为0002。
实例:
• umask 755
• umask //查看
• umask 044//设置
4.⽬录的权限
• 可执⾏权限:如果⽬录没有可执⾏权限,则⽆法cd到⽬录中.
• 可读权限:如果⽬录没有可读权限,则⽆法⽤ls等命令查看⽬录中的⽂件内容.
• 可写权限:如果⽬录没有可写权限,则⽆法在⽬录中创建⽂件,也⽆法在⽬录中删除⽂件.
于是,问题来了~~换句话来讲,就是只要⽤⼾具有⽬录的写权限,⽤⼾就可以删除⽬录中的⽂件,⽽不论 这个⽤⼾是否有这个⽂件的写权限. 这好像不太科学啊,我张三创建的⼀个⽂件,凭什么被你李四可以删掉?
为了解决这个不科学的问题,Linux引⼊了粘滞位的概念.
粘滞位
[root@localhost ~]$ chmod +t /home/ # 加上粘滞位
[root@localhost ~]$ ls -ld /home/
drwxrwxrwt. 3 root root 4096 9⽉ 19 16:00 /home/
[root@localhost ~]$ su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别⼈的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/abc.c"?y
rm: ⽆法删除"/home/abc.c": 不允许的操作
当⼀个⽬录被设置为"粘滞位"(⽤chmod+t),则该⽬录下的⽂件只能由
1. 超级管理员删除
2. 该⽬录的所有者删除
3. 该⽂件的所有者删除
5.关于权限的总结
• ⽬录的可执⾏权限是表⽰你可否可以在⽬录下执⾏命令。
• 如果⽬录没有-x权限,则⽆法对⽬录执⾏任何命令,甚⾄⽆法cd进⼊⽬,即使⽬录仍然有-r读权限(这个地⽅很容易犯错,认为有读权限就可以进⼊⽬录读取⽬录下的⽂件)
• ⽽如果⽬录具有-x权限,但没有-r权限,则⽤⼾可以执⾏命令,可以cd进⼊⽬录。但由于没有 ⽬录的读权限 , 所以在⽬录下,即使可以执⾏ls命令,但仍然没有权限读出⽬录下的⽂档。
更多推荐
所有评论(0)