Linux命令基本原则:
1、由目的单一的小程序组成,组合小程序完成复杂任务;
2、一切皆文件
3、尽量避免捕获用户接口;(如一条命令开始运行就不再需要进行其它用户交互操作)
4、配置文件保存为纯文本格式;
GUI接口;(也叫shell)Graphic User Interface Linux可以启动多个图形界面的。X-Window桌面协议
CLI接口:命令提示符,prompt(命令提示符),bash(shell)
#:root $:普通用户
命令格式:命令 选项 参数
选项:短选项:多个选项可以组合: -a -b = -ab
长选项:一般不能组合 --h
参数:命令的作用对象
虚拟终端(terminal)切换 —— Ctrl+Alt+F1~F6 Ctrl+Alt+F7启动图形界面,或shell里面start X,
图形界面里的终端,叫做模拟终端,因为图形界面就是一种终端嘛。
以上来自马哥教育运维,课程包括
RHCE+RHCA+shell编程+MySQL+Web集群+NoSQL+Hadoop+Hbase+Openstack。算是一个学习线路了好多呀。
这些运维知识不难理解,糅合起来也能需要灵活运用,但是量大,全靠下功夫、练
ls -l:长格式
文件类型:
-:普通文件(f)
d:目录文件
b:块设备文件(character)
c:字符设备文件(symbolic link file)
i:命令管道文件(pipe)
s:套接字文件(socket)
文件权限:9位,每三位一组,每一组:rwx(读 写 执行),r--,只能读,不能修改,执行
文件硬链接的次数:
文件的属主(owner)
文件的属组(group)
文件大小(size),单位是字节
时间戳(timestamp),每个文件都有三个时间戳,
访问(access);
修改(modify);文件内容g
改变(change);元数据发生改变,如属性。
-A 不显示 . .. 相对路径,,
-d:显示目录自身属性
-i:index node,inode
-r:逆序显示
-R:递归(recursive)显示。
type:显示指定属于那种类型。
变量类型中,有堆,还有栈。用来各自放置不同类型的数据的。内存申请的两种机制。内存地址空间中也是不同的。
通常栈当中,放置本地声明的变量或静态变量等等;
堆中,比如打开一个文件,这个文件要被程序访问是必须访问内存的,这个文件不是变量,只是申请到内存当中进行存置。存放在堆当中。
hash命令,显示各种命令hit(命中)过的次数,命令执行过之后会保存到内存中。也能清空这个缓存。
内存为王,hash is king。 hash是一个键值对。
从hash表中找,hash表无论有多长,从一万个里面找,与从一个里面找,速度是一样的,我们将hash是o(1)的。因为它是单一比较的,是有索引的。比在文件系统中找快无数倍。
内核功能:
进程管理、内存管理、文件系统、网络功能、硬件驱动、安全机制。
Linux本身是比Windows更简单的系统,只不过有种特性,叫作学习曲线比较陡峭,一旦入门就发现很简单了,比win简单的多。
所以有人说,Windows是个好看的东西,Linux是个智慧的东西。。更重要是稳定,能做到超长时间可以不重启,
(如果多个应用程序都需要用到打印功能,那么每个程序都需要携带打印模块,意味着计算机上大量的功能是重复的,这种重复会额外占用空间,)操作系统需要把自己内核提供的系统调用通过比较高层的调用接口来输出出来,叫做库(library),对于库本身也是一种应用程序,只不过没有程序的执行入口,需要被调用才会执行,叫它API(Application Program Interface)
有些库也可能会调用一些内核的功能,而内核提供的功能也可能调用一些库所提供的功能
程序员在使用库进行编程的时候,叫做库调用。更容易方便
也可以不使用库,直接在内核上进行编程,叫做系统调用。如果使用内核调用,它的执行效率也可能更大,得到的操作权限也可能会更高,所以有些黑客会直接使用内核调用来进行编程,甚至直接利用硬件特性进行编程的。
shell也是一个应用程序,可以通过系统调用(system call)来操作,也可通过人机交互接口shell来操作(GUI或CLI)
1. 目录管理类命令
1.1 cd
命令
格式:cd [-L|[-P [-e]] [-@]] [dir]
被你忽略的小知识:
- 在这里科普一个小小的知识点,就是关于
cd -
为什么可以自由的在当前目录和之前目录相互切换?
其实,在我们的 Shell 的环境变量当中保存了两个相关的环境变量,即为PWD
和OLDPWD
。顾名思义,我们很容易会想到当我们执行命令时,实际上就是在这个两个环境变量之间切换。我们可以使用echo $PWD
、echo $OLDPWD
或者env
命令来查看环境变量信息。
实例演示:
[root@localhost ~]# cd /home/ #切换到home目录
[root@localhost home]# cd - #返回切换到home前的目录
/root
[root@localhost ~]# cd ../ #切换到上一级目录
[root@localhost /]# cd ~ #切换当前用户的home目录
1.2 pwd
命令
pwd - print name of current/working directory
格式:pwd [OPTION]...
实例演示:
[root@rudder home]# pwd #显示当前目录
/home
[root@web mail]# pwd -P #目录是软连接,显示实际物理地址
/var/spool/mail
[root@web mail]# pwd -L #-L显示,逻辑地址
/var/mail
1.3 mkdir
命令
mkdir - make directories
格式:mkdir [OPTION]... DIRECTORY...
参数选项:
-m
,--mode=模式
设置权限模式(类似chmod
),而不是rwxrwxrwx 减umask
-p
,--parents
需要时创建目标目录的上层目录,但即使这些目录已存在也不当作错误处理-v
,--verbose
每次创建新目录都显示信息
实例演示:
[root@localhost ~]# mkdir aaa #创建目录
[root@localhost ~]# mkdir -m a=rw bbb #创建指定属性的目录
[root@localhost ~]# mkdir -p 111/abc #创建目录,父目录存在,建之
练习测试:
-
(1) 如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b, /tmp/x/y2/a, /tmp/x/y2/b
mkdir /tmp/x/{y1,y2}/{a,b}
-
(2) 如何创建x_m, y_m, x_n, y_n
mkdir {x,y}_{m,n}
-
(3) 如何创建/tmp/bin, /tmp/sbin, /tmp/usr, /tmp/usr/bin, /tmp/usr/sbin
mkdir -p /tmp/{bin,sbin,usr/{bin,sbin}}
1.4 rmdir
命令
rmdir - remove empty directories
格式:rmdir [OPTION]... DIRECTORY...
参数选项:
--ignore-fail-on-non-empty
忽略仅由目录非空产生的所有错误-p
,--parents
删除指定目录及其上级文件夹,例如"rmdir -p a/b/c"与"rmdir a/b/c a/b a" 基本相同-v
,--verbose
输出处理的目录详情--help
显示此帮助信息并退出--version
显示版本信息并退出
实例演示:
[root@localhost ~]# rmdir test #删除test目录,注意必须是空目录
[root@localhost ~]# rmdir -p a/b/c #删除指定目录及其上级文件夹
1.5 tree
命令
tree - list contents of directories in a tree-like format
格式:tree [OPTION] [PATH]
参数选项:
-a
显示所有文件和目录,全部深度-A
使用ASNI绘图字符显示树状图而非以ASCII字符组合-C
在文件和目录清单加上色彩,便于区分各种类型-d
显示目录名称而非内容,常用选项-D
列出文件或目录的更改时间-f
在每个文件或目录之前,显示完整的相对路径名称-F
在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号-g
列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码-i
不以阶梯状列出文件或目录名称-I
不显示符合范本样式的文件或目录名称-l
如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录-L level
指定显示的层级数目,常用选项-n
不在文件和目录清单加上色彩-N
直接列出文件和目录名称,包括控制字符-p
列出权限标示-P
只显示符合范本样式的文件或目录名称-q
用"?"号取代控制字符,列出文件和目录名称-s
列出文件或目录大小-t
用文件和目录的更改时间排序-u
列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码-x
将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目予以排除在寻找范围外
实例演示:
[root@localhost ~]# tree -L 2 #-L n 只显示 n 层目录 (n 为数字)
[root@localhost ~]# tree -t #-t 用文件和目录的更改时间排序
[root@localhost ~]# tree -r #-r 以相反次序排列
[root@localhost ~]# tree -F #-F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号
[root@localhost ~]# tree -f #在每个文件或目录之前,显示完整的相对路径名称
[root@localhost ~]# tree -d #只显示目录
[root@localhost ~]# tree -a #显示所有文件和目录
1.6 ls
命令
ls - list directory contents
格式:
ls [OPTION]... [DIR]...
显示指定路径下的文件列表
参数选项:
-a
,--all
:
显示所有文件,包括隐藏文件-l
长格式显示-h
,--human-readable
单位化显示-d
显示目录自身的相关属性;通常要与-l一起使用-r
,--reverse
逆序显示-R
,--recursive
递归
实例演示:
[root@localhost dev]# ls -d */
block/ bus/ cpu/ fd/ input/ net/ raw/ snd/
[root@localhost ~]# ll -Z -d /var/www/html/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@localhost ~]# ls -l
总用量 8
drwxr-xr-x 2 root root 4096 4月 27 12:34 bak
drwxr-xr-x 4 tnak tnak 4096 4月 28 14:25 tank
2. 文本文件查看类命令
2.1 more
命令
more - file perusal filter for crt viewing
格式:more [options] file...
参数选项:
-d
显示翻页及退出提示
实例演示:
[root@localhost ~]# more test.php #查看文件
[root@localhost ~]# netstat -tpnl |more #常用方式,分页显示
2.2 less
命令
less - opposite of more
格式:less [OPTIONS...] FILE...
实例演示:
[root@localhost ~]# less test.php #查看文件
[root@localhost ~]# netstat -tpnl |less #常用方式,分页显示
2.3 head
命令
head - output the first part of files
格式:head [OPTION]... [FILE]...
参数选项:
-c
,--bytes=[-]K
指定获取前#字节-n
,--lines=[-]K
指定获取前#行-q
,--quiet
,--silent
不显示包含给定文件名的文件头
实例演示:
[root@localhost ~]# head /etc/passwd #默认,显示开头前10行
[root@localhost ~]# head -k /etc/passwd #显示开头前k行
[root@localhost ~]# head -q -n k file1 file2 file3 #显示多文件开头前k行,并且不显示文件名的文件头
[root@localhost ~]# head -n -k /etc/passwd #除最后k行外,显示剩余全部内容
2.4 tail
命令
tail - output the last part of files
格式:tail [OPTION]... [FILE]...
参数选项:tail [OPTION]... [FILE]...
-c #
指定获取后#字节-n #
指定获取后#行-f
跟踪显示文件新追加的内容;
实例演示:
[root@localhost ~]# tail /etc/passwd #默认,显示最后10 行。
[root@localhost ~]# tail -n 2 /etc/passwd #显示最后2行
[root@localhost ~]# tail -q -n k file1 file2 file3 #显示多文件最后k行,并且不显示文件名的文件头
[root@localhost ~]# tail -n +k /etc/passwd #从开头第k字节处开始输出。
[root@localhost ~]# tail -f /var/log/messages #参数-f使tail不停地去读最新的内容,因此有实时监视的效果,用Ctrl+c来终止
[root@localhost ~]# tail -n+10 file.txt | head -1 #显示file.txt的第10行
3. 文件的时间戳管理工具
3.1 touch
命令
touch - change file timestamps
被你忽略的小知识:
三个时间戳:
- access time:访问时间,简写为atime,读取文件内容
- modify time: 修改时间, mtime,改变文件内容(数据)
- change time: 改变时间, ctime,元数据发生改变
格式:touch [OPTION]... FILE...
参数选项:
-a
只更改访问时间-d
,--date=字符串
使用指定字符串表示时间替代当前时间-m
只更改修改时间-r
,--reference=文件
使用指定文件的时间属性替代当前时间-t STAMP
使用[[CC]YY]MMDDhhmm[.ss]
格式的时间替代当前时间--time=WORD
使用WORD 指定的时间:access、atime、use 都等于-a选项的效果,而modify、mtime 等于-m 选项的效果--help
显示此帮助信息并退出--version
显示版本信息并退出
请注意:-d 和-t 选项可接受不同的时间/日期格式
实例演示:
[root@localhost ~]# touch test.php #将test.php的档案时间改为,当前时间,文件不存在建之
[root@localhost ~]# touch -c -t 05061803 test.php #将档案时间改为,5月6日18点3分
[root@localhost ~]# touch -r abc.php test.php #将test.php档案改成根abc.php一样
4. 文件管理类命令
4.1 cp
命令
cp - copy files and directories
格式:
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
参数选项:
-i
交互式-r
,-R
递归复制目录及内部的所有内容;-a
归档,相当于-dR --preserv=all
-d
,--no-dereference --preserv=links
,--preserv[=ATTR_LIST]
mode: 权限
ownership: 属主属组
timestamp
links
xattr
context
all-p
,--preserv=mode,ownership,timestamp
-v
,--verbose
-f
,--force
实例演示:
[root@localhost ~]# cp -p test.rb /home/test #将test.rb copy到test目录,并且保留原文件的属性
[root@localhost ~]# cp -r Dir/ /home/test #将Dir目录copy到test目录下
[root@localhost ~]# cp -fr Dir/* /home/test #将Dir下面的所有文件强制copy到test目录下
[root@localhost ~]# cp test.rb{,.bak} #备份test.rb,并在尾部加上.bak后缀
4.2 mv
命令
mv - move (rename) files
格式:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
参数选项:
-i
交互式-f
强制
实例演示:
[root@localhost ~]# mv abc abc.php #将abc移动成abc.php
[root@localhost ~]# mv test.php{,.sh} #将test.php增加后辍
[root@localhost ~]$ mv -t ./database 1.sql #将1.sql移动到database目录下
[root@localhost ~]$ mv aaa bbb #将目录或者文件重命名,如果存在bbb目录,则是将aaa移到bbb目录下
4.3 rm
命令
rm - remove files or directories
格式:rm [OPTION]... FILE...
参数选项:
-i
交互式-f
强制删除-r
递归
实例演示:
[root@localhost ~]# rm test.php #删除文件需要确认
[root@localhost ~]# rm -f test.php #强制删除文件不确认
[root@localhost ~]# rm -rfv ./test #强制删除当前的test目录,并显示删除的详细过程
5. 系统管理类命令
5.1 shotdown
命令
5.2 reboot
命令
5.3 poweroff
命令
5.4 halt
命令
5.5 w
命令
5.6 who
命令
思维导图
Linux中你不得不知道管理类命令