linux基础学习随笔【根本没有排序哈】

直接整:
init 3 5 6 0;init 3代表切换到字符界面,5代表切换到图形界面;6表示重启,等同于reboot;0表示关机=poweroff;
改主机名:hostnamectl set-hostname centos7.localdomain;[记不住,TAB键补全]
查看操作系统linux版本:cat /etc/centos-release;或者通过安装lsb_release -a ;查看内核版本: uname -r
lscpu 查看CPU使用情况;lsblk查看硬盘;free - h查看内存或者cat /proc/meminfo;查看磁盘的使用情况使用df -h;查看inode号【索引节点号】使用:ls -i命令【磁盘空间的使用情况没有满,但是无法在某个分区下创建新的文件,原因是因为该分区下的inode索引节点号使用完毕了,可以删除该分区内临时文件等无用的文件】
使用CRT或者Xshell模拟的伪终端是pts/3类型的【通过tty查看】;centos/ubuntu字符界面中tty看到的终端类型是tty/3等,属于虚拟终端;使用centos/ubuntu图形终端tty得到的也是pts类型的;
系统根据uid是否为0,判断出当前的用户属于root用户还是普通用户,=0为超级用户,非0就是普通用户;
id -u /id -u 用户名
type 命令;可以查看该命令是外部命令还是内部的命令;内部命令已经被集成在bash中了,系统开机后就会被加载到内存,访问速率快,但是外部命令是处于磁盘的路径下,访问速度稍慢,which 后面必须跟外部命令,查看外部命令的路径;whereis 命令,可以更详细的查看外部命令的路径及其帮助信息;【查看外部命令保存的路径echo $PATH】
who ,查看连接服务器的所有用户;whoami查看当前连接的是谁;
who am i ;可以打印出[root@centos7 /]#who am i
root pts/1 2018-12-15 09:01 (192.168.170.1);
echo $SHELL,查看当前使用的shell类型;
cat /etc/shells,查看系统支持shell类型【不是全部】;
更改提示符的样式:使用PS1=" ";【echo $PS1 查看提示符样式】,想要永久的生效,可以在配置文件进行配置,在/etc/profile.d/env.sh中进行如下格式的配置>>>br/>PS1="\[\e[31;36m\][\u@\h\W]\\$\[\e[0m\]"
配置历史记录的时间,可以在/etc/profile中进行如下格式的配置export HISTTIMEFORMAT="%F %T"

想要保证新建的别名永久生效,可以保存在当前用户家目录下的隐藏文件.bashrc文件中【对当前用户生效,对其他用户无效啊】;也可以保存在/etc/bashrc文件中【对所有用户均生效】
内存中的数据临时有效,想要永久,需要进行配置文件的编写,但是配置文件不会马上生效,可以重启终端,也可以执行source 配置文件名;或者.配置文件名,重新读取一下配置文件到内存即可。

重启网络服务3种方式:
1,service restart network
2,restart NetworkManger
3,systemctl restart network

屏幕共享:
创建会话:screen -S 名字
查询会话:screen -ls 显示所有已经打开的screen会话
加入会话:screen -x 名字
退出exit
Screen另一个应用场景:备份【使用wins操作远程的linux主机】
,恢复screen使用screen -r 名字;和screen剥离,使用ctrl +a,d;

外部命令很多需要安装,使用rpm -ivh /run/.../Packages/...
很多的外部命令都是安装在Packages这个包中;
linux基础学习随笔【根本没有排序哈】

命令优先级:
1,别名alias
2,内部命令,集成在bash中了
3,hash缓存表
4,$PATH【外部命令的路径,存储在磁盘路径中】
5,没有找到命令

反向单引号hostname,内部会被视为一个命令和$( hostname )是等效的;
使用场景:
linux基础学习随笔【根本没有排序哈】

{}大括号的使用:
linux基础学习随笔【根本没有排序哈】

!180;!-20根据历史记录的编号,可以达到某个历史命令的快速执行【180和20表示历史记录的编号】

Whatis 是帮助命令,例如:whatis rm是查看rm命令的帮助信息;需要依赖数据库,centos7中的命令是mandb,centos6中是makewhatis。Whereis 命令,可以查看命令所属的路径和帮助信息;which 后必须跟外部命令;内部命令帮助命令可以使用help +内部命令;外部命令的帮助命令格式是:外部命令+ --help;

linux基础学习随笔【根本没有排序哈】
linux基础学习随笔【根本没有排序哈】

date -d "-1 day" +%F 根据操作的对象来展示时间,但并不会更改当前系统和主板的时间;

w命令是显示当前登入到服务器中的用户正在做的事【案例如下】
linux基础学习随笔【根本没有排序哈】

其中load average表示当前系统的负载情况,0.00, 0.01, 0.05分别代表1分钟内负载,5分钟内的负载和15分钟内的负载;

统计命令:wc
1,wc -l 统计文件中行数;
2,wc -w统计单词个数
3,wc -c 统计字节数

第3天文件管理
1,stat a.txt可以详细查看这个文件的三个时间戳,包含atime,读取文件内容时间;mtime修改文件内容数据的时间;ctime文件元数据的改变时间【元数据就是文件的属性】;文件包含两种数据,1是文件的元数据,也就是文件的属性;2是文件的内容数据;ll 文件查看看到的时间默认是修改的时间,也就是mtime;
2,touch命令会创建一个空的新文件,如果创建的文件已经存在,就不会重新创建【即不会把存在的文件覆盖掉】,而是刷新这个已经存在的文件的时间戳,即最后的修改时mtime;所以采用touch创建新文件相对来说还是很安全的;但是如果是采用> acbd.txt的方式创建文件的时,如果有abcd.txt文件存在了,那么就会把原来的abcd.txt 的文件给覆盖掉,即刷新了时间戳mtime;所以不安全,慎用;但是我们可以使用>>方式创建文件,这种方式创建的文件,如果原来的文件已经存在,那么不会覆盖掉原来的文件,并且连时间戳都不会刷新/更改,比touch方式还要安全;但是>>和>本身并不属于命令,所以一旦我们更改了使用的shell的类型,可能会不支持【即创建文件失败】,在linux系统中的默认的bash中是完全支持的,因为>>和>毕竟不是bash中集成的命令;
3, touch 创建文件的时候,可以指定参数 -a ,-m ,-t ;-a的意思只改变atime和ctime;-m的意思是只改变mtime和ctime;-t的意思是只改变atime和mtime;格式和案例如下:
linux基础学习随笔【根本没有排序哈】
linux基础学习随笔【根本没有排序哈】

cp命令默认复制的是文件,想要复制文件夹,必须加参数,-r或者-R【递归复制】;
想要保证复制过来的文件的一切属性和源文件的属性相同,那么可以使用参数-a;
linux基础学习随笔【根本没有排序哈】
单独的使用-d的参数,表示的是如果想要复制一个软链接文件,而不是软链接文件指向的真实文件时,可以使用-d,否则不加-d会把软链接文件指向的文件复制过来,那么复制过来的文件不具备源文件的全部属性【即文件属性丢失】;
linux基础学习随笔【根本没有排序哈】

所以-a是一个备份的命令,可以吧复制过来的文件夹或文件的所有原有属性全部的保留,完全的保留,也叫归档;-即 -a相当于_r/R和-d和--preserv=all的组合;
还可以这样的备份;
linux基础学习随笔【根本没有排序哈】

-v可以保证拷贝时的可视化;单独的-p参数保留的是mode,所属用户所属组,合时间戳,即三者的组合;-f强制覆盖,相当于把原来已经存在的文件删除了,又重新建立了一个新文件;-b是覆盖前自动备份,很有用
linux基础学习随笔【根本没有排序哈】

所以生产中我们可以吧cp命令定义别名cp=’cp -b’,和安全;途中生成的f2~就是保留下来的原始文件;还可以使用下面这个备份,只是格式稍变动了一下
linux基础学习随笔【根本没有排序哈】

连续三次执行下面命令:cp -r /boot /data/dir【最开始data目录下没有dir目录】
linux基础学习随笔【根本没有排序哈】

第1次就是直接把boot目录复制到data下,然后改名字为dir;第2次是发现dir已经存在了,所以直接把boot复制到dir目录下了,即把boot目录作为dir目录的子目录;第3次是dir目录下已经有boot目录了,所以直接把里面原来存在的boot目录覆盖了;

mv命令和cp命令基本上很相似,参数有-i交互式,如果目标文件存在,则覆盖前会提示是否覆盖;-f强制覆盖,不提示;-b覆盖前会先进行备份;当然mv不仅可以操作文件,还可以操作文件夹;

rm命令【危险命令,建议定义使用mv的别名】
linux基础学习随笔【根本没有排序哈】

当df-h时候发现某个磁盘的使用率马上100%了,马上满了,我们想要删除不需要的文件来释放空间,但是这个文件可能正在被使用,或者无法停掉【比如日志文件,不能随便停止】所以我们即便停掉且删除了文件,空间也不会立即的释放,所以我们可以采用> 要删除的文件,比如/boot/a下的a文件,因为a存在所以> 方式会把a文件覆盖掉【即清空a中的所有数据内容】,此时a文件不再占用空间,释放了系统资源,我们可以随时的把a文件删除;
linux基础学习随笔【根本没有排序哈】

删除一些带有特殊符号的文件【比如 ~ ,-h,-】:
linux基础学习随笔【根本没有排序哈】

当然我们还可以直接把目录删除【目录中的奇怪文件都被删除了】当然这个目录应该是一个普通的目录,不能是挂载点,挂载点删除不了,虽然挂载点删除不了,但是我们执行完毕后,作为挂载点的目录中的数据依然可以被清空;

tree命令:
参数-d,tree dir -d ,即只是显示dir目录下的文件夹,不显示文件;
参数-L,指定显示的层级;
mkdir命令:
-p表示直接创建不存在的父目录;-v可视化;想要创建dir1111目录,但是父目录dir111和dir11不存在,所以使用-p参数直接把需要的父目录创建出来;
linux基础学习随笔【根本没有排序哈】

rmdir命令可以删除空的目录:
参数-p,可以反向递归删除空的父目录,例子如下:
linux基础学习随笔【根本没有排序哈】

批量改名使用rename;
linux基础学习随笔【根本没有排序哈】

索引节点编号:inode【index node】:
文件夹和文件都有属于自己的节点编号,同一个分区中节点编号唯一,不同分区中节点编号可以相同;采用命令ll -i可以查看文件的节点编号
linux基础学习随笔【根本没有排序哈】

文件包含数据内容和元数据,元数据包含一些文件的属性,比如文件的类型,时间戳,文件大小,文件所属用户所属组,链接数等等一系列的属性信息,当然必须有指向文件数据内容本身的指针;所以一个文件在磁盘中是分为两部分组成的,简图如下:
linux基础学习随笔【根本没有排序哈】

节点表中的一行就代表一个文件的元数据,根据元数据中记录的指针会指向下面某个文件数据内容的数据块;
即便文件的数据内容大小为0【图中红框】,但是文件的元数据会占用极少数的磁盘空间
linux基础学习随笔【根本没有排序哈】

但是一旦系统给某个分区分配的节点编号全部使用完毕的话,那么造成的就是明明磁盘使用率较低,但是却不能在该分区内创建新的文件,其实就是该分区内所有的inode号全部被使用了,造成了该现象;
linux基础学习随笔【根本没有排序哈】

所以再次创建新文件时,报错如下
linux基础学习随笔【根本没有排序哈】

关于目录和节点编号的关系:
简单理解,目录中存放的就是众多的文件名,而每一个文件名上都会对应着一个唯一的节点编号,因为每个文件是由元数据和数据内容本身组成的,且文件的元数据中存在着文件唯一的节点编号inode,因为目录属于特殊的文件,所以目录的元数据上也会有直接或间接的指针,指向了装有文件名的数据块,因为数据块中的每个文件上都有一个唯一的节点编号,所以想要访问某一个文件的具体内容,那么根据4k数据块存放的每个文件名上的节点编号,就可以匹配到对应的文件元数据上同一个节点编号,从而根据文件元数据中的指针的指向找到对应的文件,进而访问到文件中的数据;

硬链接:
给同一个分区内的一个文件创建硬链接,简单理解就是给这个文件起了一个另外的名字,即链接数多了一个【链接数也是存在于文件的元数据条目中的】,源文件和连接文件除了名字不同,其余的全部相同,其实就是一个文件,对其中的任何一个进行文件操作,两个文件都会达到同步更新的效果,当删除一个文件时,其实只是删除了一个链接而已,并没有把磁盘中文件内容所在的数据块删除,只有把该文件的所有的链接数全部删除后,此时该数据块会被标记为垃圾,但不会立即释放资源,而是等待系统垃圾回收机进行不定时的回收;
linux基础学习随笔【根本没有排序哈】

硬链接不支持目录,一般的目录有2个或多个的链接数,是因为每一个目录中都会有一个隐藏的 . ;并且硬链接不支持跨分区,因为硬链接的本质是同一个文件,如果是不同的分区了,那么根本就不可能是同一个文件了,即使不同分区中的具有相同节点编号的两个文件也不是同一个文件,所以为了不违背硬链接是同一个文件的原则,那么硬链接就不支持跨分区;使用场景稍少;

软链接:给一个文件或者目录创建软链接,得到的软链接文件和原文件或者原目录的的inode号不同,所以不是同一个文件,即软链接文件和原来的文件不是同一个文件,而且原始文件的链接数不会增长;支持给目录创建软链接,并且支持跨分区创建;当吧原文件删除以后,软链接找不到原文件,会闪红色警告,虽然吧原文件删除了,但是软链接文件并没有被删除,只不过因为找不到目标文件而失效;支持绝对路径跨分区创建软链接,但是注意:当跨分区创建软链接时,相对路径是有要求的,相对的是将来要创建软链接文件的这个路径;
linux基础学习随笔【根本没有排序哈】

下面的写法是错误的:
linux基础学习随笔【根本没有排序哈】

猜你喜欢

转载自blog.51cto.com/14135556/2331261