目录
1.功能命令
- startx:进入图形界面
- date:显示当前日期
- date +%Y-%m-%d" "%H:%M:按某格式显示当前日期2021-11-26 16:21
- cal:显示日历
- cal 12 2015:显示2015年12月的月历,可省略月则显示年历
- bc:计算器,可使用+、-、×、/、^(指数)、%,输入quit退出,默认运算结果取整
- 进入计算器后输入 scale=xx,为精确几位小数点
- locale:显示目前支持的语言语系
- 解决乱码问题:LANG=en_US.UTF-8(英文模式)或LANG=zh_CN.UTF-8(中文模式)
- uname:查看本机系统信息,-r查看内核版本,-m查看OS架构版本
- file:观察文件类型
热键:Tab文件、参数或命令补齐、Ctrl+c中断当前程序、Ctrl+d键盘输入结束(EOF)、[shift]pageup,pagedown翻页
2.求助命令
当你忘记命令时或想深入了解个命令的全部参数时使用
- 当你只记得命令的一部分,输入这一部分再连按两次tab,会让你记起来的
- [command] --help:选项,告诉你此命令可以接哪些选项和参数,并说明用途
- man [command]:进入该命令的详细说明文档,按q退出,空格翻页
- 进入里面时/string向下查找,?string向上查找,n查找下一个,N查找上一个
- 进入里面最上面可以看到命令后带了个(n),n代表该命令的代号,1表示shell环境可操作性的命令或文件 ;5表示配置文件;8表示系统管理员可用的管理命令。(只说重要的)
3.系统状态类
- su - 用户名:登录指定的用户,su - 登录管理员账户
- exit:退出当前账户(注销)
- passwd:修改当前用户密码,修改的是/etc/shadow中的数据
- who:当前Linux目前有谁在线
- sync:将数据同步写入到磁盘,即关机前应该把内存中缓存的数据写到磁盘,防止数据丢失
- shutdown
- shutdown -r:重启
- shutdown -h:关机
- shutdown -c:取消准备执行的shutdown命令
shutdown -r、shutdown -h不加时间参数默认1分钟后执行,时间参数如下
now:现在 、20:25:指定时间、+10:十分钟后; 如shutdown -h now
- reboot:重启
- poweroff:关机
- halt:系统停止
- init切换系统运行级别,如init 0进入关机状态
- 0关机、1单用户模式、2多用户无网络模式、3多用户有网络、5图形界面、6重启
4.文件和权限类
4.1概述权限
使用ls -l,显示的文件、目录的详细内容
- 文件类型:代表这个文件是文件、目录或链接文件等
- [d]是目录、[-]是文件、[l]是链接文件、[b]是块设备、[c]是串设备……
- 文件权限:r代表可读、w可写、x可执行(execute),rwx位置是固定顺序,没有权限则显示"-"
- 一共有三组权限,第一组3个表示文件拥有者、第二组此用户组的权限、第三组其他人
- r w x分别对应 4 2 1,如rw-为4加2等于6,r-x为5
目录的r权限为是否可以ls看到目录里的所有文件;文件则是可读的意思
目录的x权限表示能否cd进入该目录,成为工作目录;文件则表示是否可执行(windows的扩展名差不多意思)
目录的w权限表示是否可删除、新建、重命名和移动该目录或该目录下的操作,改动目录结构;文件则表示可以修改文件内容,但不能删除文件本身
- 链接数:如果是普通文件表示有多少文件链接到此节点(inode),即硬连接;如果该文件时目录则表示该目录下有多少个子目录(包括隐藏的 .和..)
- 文件名:以.开头的属于隐藏文件,需用-a参数才能看到
只有链接文件才有最后的那个"链接的谁"
4.2修改文件属性与权限
- chgrp:修改文件所属用户组,[-R]递归修改,连同其子目录下的所有都修改
- chgrp -R group1 test :递归修改test目录和所有其子文件(夹)的所属组为group1
- chown:修改文件拥有者和所属组,[-R]同上,
- chown -R jack:gropu1 test :递归修改test目录拥有者为jack,所属组为gropu1
- 还能单纯的修改所属组:chown -R .gropu1 test ,点.后面加组名
- chown jack test :单纯的修改所属用户
- chmod:修改文件权限,[-R],花样很多:
- chmod 777 test:设置test文件的权限为rwxrwxrwx(4+2+1=7)
- u代表所属用户(user)、g代表所属组(group)、o代表其他人(others)、a代表所有(all);
- +:在以前的基础上加权限、-在以前的基础减权限、=设置权限,覆盖以前的权限
- chmod u+r test:给test文件的所属用户加可读权限、chmod g-w test:剥夺用户组的写权限、chmod a=rwx test:test所有用户的权限都为rwx
复制(cp)文件(目录)的操作会复制文件的所有的属性和权限
5.文件与目录管理
5.1目录与路径
- . :代表当前目录,可以使用./表示
- .. :代表上一层目录,同可以使用../
- - :代表前一个目录,即我上一步是在哪个目录下
- ~:当前使用者的家目录
- ~root :root用户的家目录
- cd:切换目录,cd /usr/test:切换工作目录为/usr/test;cd ~:回城;cd ..:回上一层
- pwd:显示当前目录,[-P]显示真正的路径,而非链接路径,对于链接得到的目录有效
- mkdir:建立一个新目录 [-m]设置权限,[-p]递归创建多级目录
- mkdir -m 777 test2:创建出的test2权限为777
- mkdir -p test1/test2/test3:连续创建多级目录,需要加-p
- rmdir:删除一个空目录,[-p]连同上层的目录一起删除
- rmdir -p test1/test2/test3:3个多级目录全删
- rmdir只能删除空目录,有一丁点内容也不行,可以用rm删除,但不安全
5.2文件路径变量$PATH
我们随时随刻能使用ls,cd等命令,归因于环境变量的设置,这些命令都是某个目录的可执行文件
- 查看环境变量:echo $PATH 结果如下,冒号分割的
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/lxc/.local/bin:/home/lxc/bin
echo:显示打印的意思、$后面接变量
- 修改环境变量:PATH="${PATH}:/root" ,把/root也就入到环境变量
不同用户的环境变量不相同;环境变量里如有重名的像ls等命令,越前面的路径越优先找到
5.3文件与目录的查看
- ls:列出当前目录中所有的文件和目录
- ls -a :隐藏文件(开头为.的文件)也会被列出来
- ls -l :显示详细信息,权限等数据
- ls -d :仅列出当前目录的数据,而不是列出当前目录下的所有文件
- ls -F :根据文件和目录的信息,附加一个结构信息如*:可执行文件;/:目录;=:socket文件;|:管道文件
- ls -S :按文件容量大小排序,而不是文件名
- ls -r:将排序结果反向输出
- ls -t:按时间排序
- ls -R :递归,打印目录下的所有内容
- ls --full-time :打印出完整时间
可以使用多个选项,如 ls -ald
显示出来的结果蓝色表示目录,白色表示文件
5.4复制、删除与移动
- cp [-选项] 源文件 目标文件, 如cp test/t1 test2 ,test目录下的t1复制一份到test2目录
- cp -a :连同所有数据和权限一同复制过去,一模一样
- cp -d :源文件如果为链接文件(link),则复制链接文件而非文件本身,不加-d则复制link文件时会直接复制link的源文件
- cp -i :如果目标文件已存在,先询问是否覆盖
- cp -p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性
- cp -r :递归复制目录
- cp -u :目标文件与源文件有差异时才会复制,常用于备份
- cp -l:进行硬链接的链接文件建立,而非复制文件本身
- cp -s:复制成为符号链接,即"快捷方式"
- 硬链接创建后和源文件一模一样,只不过是把源文件上的链接数加了一
- 符号链接仅仅是个快捷方式,link文件,并指向源文件,链接数不加
- rm:删除文件或目录
- rm -f :强制删除,不显示任何提示
- rm -r :递归删除,非常危险
- rm -i :删除前询问
- mv [源] [目标]:移动文件或目录
- mv -f :强制移动,如果已有同名的直接覆盖掉
- mv -i:如有同名,先询问是否覆盖
- mv -u:目标文件已存在,但源文件更新,才会覆盖, 用来测试新旧文件
mv可以用来修改文件的文件名
5.5获取文件名和目录名
- basename /etc/systemconfig/network:获取此路径的文件名即network
- dirname /etc/systemconfig/network:获取此路径的路径即/etc/systemconfig
我们可以轻松的通过识别/来区分。获取文件名和路径通常用来写程序的时候判断之用
5.6文件内容查看
- cat :从第一行开始显示文件内容
- -n 、-b:打印出行号,区别:对于空白行 -b不标行号,-n标行号
- -A :清晰地打印出特殊字符 ,tab变为^I,$换行
- tac :单词都是cat反过来的,很好辨别
- nl :显示的时候,同时输出行号
- more :一页一页的显示文件内容,进入后的操作如下:
- space向下翻一页,Enter向下翻一行,b往回翻页
- /string向下查找字符串
- q 离开more显示的内容
- less :和more类似,但是可以向前翻页
- pagedown想下翻页,pageup向上翻页
- /字符串向下查找,?字符串向上查找,n重复前一个查找,N反向
- g回到数据第一行,G到数据最后一行
- head :只看前面几行
- -n number:显示前number行,如果是负数,如-100,则显示全部但不包括后100行
- tail :只看后面几行
- -n:同上
- -f :实时刷新文件内容(实时检测),ctrl+c结束刷新
- od :以特定的方式读取文件内容,默认2进制,一个内容可以显示好几种方式
- -t后面接显示类型,a默认字符,c为ASCLL码,d十进制,f浮点数,o八进制,x十六进制
- echo abc|od -t dCc :打印abc的十进制和ASCLL对照表
这一系列可以搭配管道符|,如我现在想显示/etc/man_db.conf 的第11行到20行
head -n 20 /etc/man_db.conf | tail -n 10
5.7修改文件时间或创建新文件
linux每个文件都有三个时间:
- 修改时间mtime:文件内容改变会更新该时间,默认显示的就是它
- 状态时间ctime:文件状态改变才会更新,如权限和属性
- 读取时间atime:文件内容被读取才会更新,例如使用上面的查看命令
使用ls -l --time=(ctime/atime)查看这几种时间
- touch:理解为摸一下文件,改变文件的时间为当前时间,默认没有该文件会新建一个
- touch -c:仅修改文件的时间,若不存对应文件则不建立新文件
- touch -d:后面接自定义的日期而不是当前日期
- 如touch -d "2days ago" test:将test文件的日期改为两天前
touch不会改变ctime(touch的新文件除外),只会更改mtime个atime,即使我们复制文件时都无法复制ctime这个属性
5.7文件与目录默认权限
umask指定了当前用户在建立文件或目录时候的默认权限。
系统默认情况:创建文件时-rw-rw-rw,创建目录时 drwxrwxrwx
- umask :打印0002数字,表示上面的默认权限减去(实际底层用的是求掩码、并运算)后面三位002,就是当前默认权限
- 第一个数字是SUID、SGID的内容
- umask -S:打印u=rwx,g=rwx,o=rx,用符号的形式打印,表示others用户被拿走了w(2)权限
- umask xxx:修改umask的值
如果umask为0002,我们创建文件是默认权限为:rw-rw-r--,创建目录默认权限为: rwxrwxr-x
5.8文件特殊权限
输入ls /tmp /usr/bin/passwd -ld查看/tmp和/usr/bin/passwd的内容,如下权限中有个s和t特殊权限
drwxrwxrwt. 29 root root 4096 12月 1 10:20 /tmp
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
1.Set UID(SUID)
passwd的-rwsr-xr-x.权限中s出现在文件拥有者的x属性上,此时就为SUID。注意该权限只对二进制文件程序有效(目录无效),且文件拥有者需要具备该程序的x权限。
作用:在执行该程序的过程中,执行者将具有该程序拥有者的权限,执行完了就没了。
passwd的作用是修改/etc/shadow中的数据,而/etc/shadow的权限为-----. 1 root root ,即只有root可以操作。所以可以看出其他用户执行的时候就已经暂时获得了passwd的拥有者root的所有权限,shadow就可以被passwd所执行的普通用户更改了。
2.Set GID(SGID)
查看/usr/bin/locate文件的权限,看出s出现在文件组的x属性上,此时为SGID。
-rwx--s--x. 1 root slocate 40520 4月 11 2018 /usr/bin/locate
程序执行的过程中,执行者将会短暂的得到该程序用户组的支持。
locate程序的作用是查看/var/lib/mlocate/mlocate.db文件,该文件的权限为-rw-r-----. 1 root slocate,可以看出只有slocate组里的成员才有r权限,其他人不可以r。
同理,当我们执行locate程序时,你就会暂时是该组的成员,也就获得了r的权限。
SGID的风险比SUID小得多,所以出于系统安全的考虑,应该尽量用SGID代替SUID的程序。
SGID可以用于目录,如果一个目录设置了SGID位,那么如果任何一个用户对这个目录有写权限的话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。
3.Sticky Bit(SBIT)
t出现在other的x权限上,就是有SBIT权限。
只对目录有效,即用户在该目录新建文件或目录时,仅有自己和root有权利删除。
如drwxrwxrwt. 29 root root 4096 12月 1 10:20 /tmp,/tmp文件夹就有SBIT权限。
其中的SUID表示4,SGID表示2,SBIT表示1。
例:
chmod 6777 test; ls -ld test 设置SUID的结果如drwsrwsrwx. 3 lxc lxc 29 11月 27 17:27 test;如果chmod 7666 test设置的话结果为drwSrwSrwT. 3 lxc lxc 29 11月 27 17:27 test,其中大写的S和T就是没有生效的意思,拿SUID说即设置权限时拥有者都没有x的权限,肯定其他的也没有。
6.查找命令
简单的查询命令:
- whereis xx:搜索系统命令的具体位置和man帮助文档的位置,如whereis cat。不能查找普通文件和目录
- whereis -l:列出该命令搜素的几个重要目录
- whereis -b xx:只会查找二进制文件
- which xx:同样是搜索系统命令,可以显示别名,但不显示帮助文档的位置,用法相同
6.1locate
用于查找文件,它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db,所以查找速度较快。此数据库每天更新一次,所以今天增删了某些文件可能查找的结果就有一点差距,查不到或者删除了的数据也查得到,原因是数据库还没更新。
可以使用updatedb命令手动更新该数据库.
- locate /etc/my:查询以/etc目录下以my开头的文件或目录,相当于后面有个*通配符
- 不会跨目录查找,find命令是跨目录的就是沿指定目录下的所有的子目录一直递归下去,更全
-i:忽略大小写,-l :输出几行,-c只显示找到了几个记录
6.2find查找
最复杂的一个查找命令,在整个目录结构中查找所有文件和目录,功能很强大,但非常耗时耗资源
①根据名称查找:
- find ./ -name test3.txt:查询当前目录下叫test.txt的文件或目录,精确查询
- find ./ -iname test3.txt:忽略大小写
- find ./ -name "*es*":模糊查询,*是任意多个字符,?是一个字符
find默认是从当前目录查找,查找的数据显示相对路径
②根据文件大小查询
- find ./ -size 100M:当前目录大小等于100M的文件
- find ./ -size -1G:查找小于1G的文件
- find ./ -size +100k:大于100k的文件
- find ./ -size +100c:大于100字节的文件
如果不加单位默认单位是数据块,1数据块=215字节=0.5k
③根据所有者和所有组
- find /tmp -user lxc:查找/tmp目录下用户为lxc的文件
- find /tmp -group root:查找用户组为root的文件
- find / -nouser:查找文件拥有者不在/etc/passwd中的文件
- find / -nogroup:同理,组不在/etc/group中的文件
④根据时间
- find /tmp -ctime 2:2天之前的【一天之内】ctime 被修改过
- find /tmp -atime +2:2天之前atime 被修改过的内容
- find /tmp -mtime -2:2天之内mtime 被修改过
⑤按类型查询
- find ./ -type l:查询当前路径下链接文件
- find ./ -name "*t*" -type f:模糊查询t有关的普通文件;文件类型跟上面讲的一样,除了普通文件不是-而是f外。
⑥多条件查询
- find ./ -size +2M -a -size -100M:查询大于2M并小于100M的文件,a表and
- find ./ -size +2M -o -size -100M:查询大于2M或者小于100M的文件,o表or
⑦附带执行命令
-exec或者-ok
- find ./ -name "*txt*" -exec ls -l {} \; :查询到的结果放在大括号里循环执行exec后面的命令。后面的\;表示-exec的结束,固定语法。
- 可以把-exec换成-ok,循环执行时会一个一个询问你
⑧通过inode查找
- find /root -inum 691212 :查找inode为691212的文件
- find ./ -inum 108 -exec rm -rf {} \; :查找并删除inode为108的文件
6.4grep查找
grep和find的就是:find用于找目录或文件;grep是找文件中的具体内容!