linux 指令
命令
●内部命令,随Shell启动,常驻内存
●外部命令,需要找到文件加载进程,查找路径就是$PATH
。hash, 外部命令路径可以保存在一个hash表中
命令格式
命令本身可以接受选项和参数,而选项可以有自己的参数。
●短选项: -h使用-加一个字母,短选项可以合并,但是如果选项需要提供参数,必须放后面。 短选项往往都是最常用的选项,为了简化而提供
●长选项: -all使用–加单词,长选项不可以合并写
●Ctl+ c可以结束正在运行的命令
●\ 命令续行符
●;一行多个命令使用分号分割
●使用tab键补全,tab 2次可以提示补全的候选
命令扩展
常用命令
●查帮助
。help 内部命令
。man查看Man文档
。命令h或命令–helpI
●命令
。type命令类型 wc -l 统计条数
。hostname 主机名
。who登录信息, who am i或whoami, w
。whatis 命令有什么功能
。which 命令在哪里
。whereis 命令程序二进制文件、man文档
。 uname -a查看操作系统信息,比如内核版本-r
。alias别名 。强制执行文件 bash+文件
。echo 回显字符
■-n取消自动附加最后的换行符
■-e使用解释功能,$ echo -e “a\tb\nc"使用转义符
。 date日期
■date +”%Y%m%d %H:%M:%S"
■date [MDDhhmm[[CC]YY][.ss]][.ss]]修改时间
●开关机
。halt, poweroff
。reboot重启
。shutdown [optionl... TIME
■-r重启
■-h关机
■TIME: now立即执行; +3几分钟后执行; hh:mm几点几分开始执行
■-c末执行前,还可以取消
●网络
。 ping -c 20 -w 5 www. magedu. com
。ip a
。ss -tanlp
绝对路径和相对路径
●相对路径,不以/开始的路径
●绝对路径, 以/开始的路径
●因为常常当前工作路径会变化,有时候从当前路径为参照,找其它路径中的文件会出错,往往就从根开始写
绝对路径,减少路径错误
●相对路径用在相对于当前路径的某个文件, 相对关系不变的情况
●basename基名和dirname目录名
dirname /etc/ sysconfig/ network-scripts/ifcfg- ens33
/etc/sysconfig/ network-scripts
basename /etc/sysconfig/network-scripts/ ifcfg-ens33
ifcfg-ens33
文件类型
●-或f 普通文件
●d目录directory
●I 符号链接或软链接symbolic link,相当于快捷方式
●b块设备block device, 随机访问,磁盘
●c字符设备character device, 线性访问,键盘
●p管道pipe
●s socket文件
通配符Wildcard
● * 匹配0个或多个字符
● ?匹配一个字符
● [a-z]、 [A-Z]、 [0-9]、 [acdf]匹配一 个字符; 【^a-z】匹配a-z之外的任意- 个字符
● [:space:]空白字符; [:digit:]表示0-9; [:lower:]小写; [:upper:]大写; [:alpha:]字母; [:alnum:]字 母和数字等。
。当一个字符用,所以test[:alnum:]]
grep -E [a-z]+ 同等于 egrep [a-z]+
grep -v ^# -v:除什么之外 ^:以什么开头
文件系统命令
● Is列出目录内容
。-a显示所有文件,包括隐藏文件,即以开头的文件
。-l长格式显示。别名ll即Is -l。 显示了stat的部分内容
。-h, -human-readable配合-I,人可阅读的,size显示为K、M、G等
。-R递归目录
。-d或-ld 显示目录自身
。-i显示inode号
●stat 显示文件的信息(元数据metadata)
。access time, atime,读取文件内容则设置
。modify time, mtime,改变文件自身内容则设置。Is -I显示的时间就是mtime
。change time, ctime, 元数据发生变化则设置
●cd 切换目录change directory
。cd或cd ~回家
。cd -最后两次目录切换
●pwd显示当前工作路径; basename基名,路径中最后-部分; dirname目录名
●file 显示文件格式
●cat 读取文件或stdin到stdout; tac每个文件倒着读取行
●more, less比more功能更强
。回车向后- -行,y向前一-行
。空格向后-页,b向前-页
。d向后半页, u向前半页
。g首行,G末行
。u向前
。/或?搜索
。q退出
●head -n 20 /etc/passwd
●tail-n10 /etc/passwd; tail -f /var/log/messages
●touch没有文件创建空文件,如果文件存在,改变时间戳
。-a改变atime、 ctime
。-m改变mtime、 ctime
。-c如果文件不存在,则不创建
●mkdir 创建目录
。-p创建父目录
。-v详情
●tree递归显示目录树
。-d只显示目录
。-L n显示的最大层数
●rmdir删除空录
●rm慎用!!!
。-i交互式提醒; -f强制不提醒
。-r递归删除
。rm -rf
●In创建链接文件
。-S 创建符号链接
。-v详情
●cp复制目录或文件,从源复制到目标。默认不递归复制
。如果源是文件
■目标是文件,目标不存在,直接创建指定名称文件。如果目标存在,覆盖
■目标是路径,复制到指定的路径下,不存在新建,存在则覆盖
。如果源是目录
■目标是文件,不可以
■目标是目录
■如果目标目录存在,就在该目标目录下复制源目录内容
■如果不存在,创建目标目录,复制源的内容
。如果有多个源,目标只能是目录了,且目标必须存在
。-i交互式提醒; -f强制覆盖不提示
。-R-r递归复制
。-perserv 保留指定的元数据信息,all保留所有即包含权限、属主、属组等
。-d表示–no-dereference -preserv=links不复制源文件,只复制链接名
。-a归档,相当于-dR --reserv=all, 递归复制所有文件包括软链接,但不跟踪软链接
●mv移动或重命名
。和cp很像
●find [指定目录][指定条件] [指定动作] [指定动作]
。find / -name *.py
符号链接
$ ln -sv test test.link
$ stat test
$ stat test.link
$ stat -L test.link
使用In命令加上-s选项就可以创建符号链接,也称软链接。软链接也是文件,60个字符以内,在软链接的inode entry中记录着链接到的文件的路径(相对或绝对路径字符串)。而大多数软链接记录的路径字符串长度都小于60,应当尽量避免为软链接分配块,太浪费空间了。
软链接里面记录着路径字符串,所以软链接的size就是路径字符串的长度。
stat的-L选项跟进符号链接。
inoda
每一个文件包括目录都有唯一的一个inode号
目录也是文件,在目录文件本身的数据.上存储着其下的文件的文件名到inode号的映射信息。
一般inode表会占用磁盘空间的1%,所以inode记录数有限制。可能会造成文件太多, inode用完了,可以磁盘还
有空间。因此,小文件多,要适当增加inode空间。inode不跨分区。
查看inode可以使用ls -i
●假设1个block为4KB
●有15个块指针区, 每个块指针占4个字节
●direct block直接块指针,有12个,那么所有直接块指针最大管理48KB的数据
●single indirecti间接块指针1个,指针占4个字节,1个块就可以存储1 k即1024个指针, 1K * 4KB=4MB, 说明间接块指针可以管理4MB数据
●double indirect二级间接块指针1个,一级指针可以存1K个指针,每一个-级指针有可以保持1K个二级指针,由此可得1K* 1K* 4K=4G,可以管理4G数据
●triple indirect三级间接块指针1个, 4G* 1K= 4T,可以管理4T数据
文件查找
/的inode在ext文件系统中是保留的,inode是2。
假设需要查找/d1/f1这个文件,首先找到inode表中查找2对应的块block. /是目录,所以块信息中存储的是它里面的子目录或文件的inode号和文件名。匹配d1文件名后就知道了它的inode号,假设是1234。
再去inode表中找1234对应的inode entry中块信息,然后读取块中信息,由于d1也是目录,从中找出f1和f1的inode。
使用f1的inode去inode表中找到f1的块信息,就可以读取f1的数据了。
注:文件名是目录的数据,也就是说存在目录的块上。
硬链接:如果两个文件没有跨分区,且2个文件指向同一个inode,这就是硬链接,即文件的引用计数。ln test test1来创建文件test1,硬链接数加1。如果硬链接数为0,则文件才被清除了。
进程的状态返回值
每一个进程可以有输入和输出,但是每一个进程还可以有一 个状态返回值, 来表示进程是否成功地执行。
0在绝大多数操作系统中都表示成功;
非0表示进程一定没有成功执行,但非零数表示什么意思,要看不同程序的帮助文档或编程手册。在bash中使用$?查看这个状态返回值。 echo $? 来查看
文件描述符
一切皆文件。每一个打开的文件分配一个文件描述符(Flle Descriptor),负整数。
管道
使用 |,上一个程序的标准输出通过管道送给下一个命令的标准输入。
重定向
重定向就是改变程序的输入或输出。
●>输出重定向: 相当于 w+ 把标准输出或者文件内容输出给目标 在最后添加 &> c = 2>&1 = 1>&2 在>c前面添加 2>&1 相当于 2 指向1的引用stdout 1也指向stdout 则都只接受stdout id abc > c 2>/dev/null stdout = c stderr = null(黑洞)
●》追加输出重定向:相当于尾部追加
●<输入重定向 :cat < c 原来读取键盘输出内容现在换出读取文件c内容字 符流
●<< Here Document >> cat > test << EOF:直接编辑test文件 buffer 遇到EOF之后结束
输出重定向和输出追加重定向
表示1先指向文件,2指向1,也就指向该文件 >files 2>&1
2>&1 > files表示2指向1即stdout,然后1重新指向一个文件
输入重定向
Here Document
用户和组
*nix(unix)是多用户系统
●用户
。管理员
■root用户是必须有的管理员账户,特权用户,无所不能。慎用
■uid为0
■家目录在/root
。系统用户
■普通授权用户,不用登录,- -般不需要家目录
■uid 1-499,CentOS7 1-999
。普通用户
■普通授权用户,交互式登录,需要家目录在/home/
■uid 500+,CentOS 1000+
。用户id为2字节无符号整数,0是root, 其它用户使用1-65535
●组
。用户属于不同的组
。管理员组
■名为root, gid为0
。系统组
■普通组,gid为1-499, CentOS7 1-999
。普通组
■普通组, gid为500+,CentOS 1000+
●用户的组
。主要组、基本组primary group
■每一个用户都仅能属于一个组,这个组称为主组,创建用户是指定
。附加组supplementary group
■一个用户可以属于零个或多个附加组
主要配置文件
●/etc/passwd保存用户及id、主组id等属性信息 nologin 不允许登录 bash 登录需要密码
。登录名:密码(shadow中):uid:gid主组:注释:家目录:shell
●/etc/shadow保存用户密码及相关属性
●/etc/group组及属性信息
。组名:组密码(gshadow中):gid:以当前组为附加组的用户列表逗号分隔
用户和组命令
●用户、组
。id
■id 当前用户
■id wayne指定用户信息
■-u用户id; -g主组; -G附加组; -n使用名字
。useradd
■-r 创建系统用户,默认没有家目录
■-u UID指定uid
■-g GID指定主组,如果没有指定,则创建与用户名相同的同名主组
■-m系统用户默认不创建家目录,使用该选项创建家目录
■-M非系统用户默认创建家目录,使用该选项则不创建
■-d 指定家目录
■-s 指定shell,查看/etc/shells
■-G g1[g2,…]指定用户的附加组,附加组必须存在 usermod -aG user1 wayne 为wayne加个附加组 user1
。su切换用户
■su- wayne常用,登录式切换,读取该用户的配置文件,并切换到该用户的家目录
■suwayne 用得少,非登录式切换,不读取用户配置文件,也不改变当前工作目录
; # su wayne -C "id"常用,只是为了使用wayne用户启动- 个程序,没必要登录
■当前是root用户, su切换时,无需密码,其它用户切换需要密码
。passwd
■; passwod当前用户修改密码
■# echo 12345678 I passwd - -stdin wayne为wayne用户设置密码
■密码应该足够强,或有过期
■-d删除密码; -I锁定用户; -u解锁用户
■-Xx maxdays密码最大使用期限,超过宽限期后用户将不能自己修改密码
■-w warndays提前多少天警告密码要到期了; i inactivedays超期后修改密码的宽限期
usermod修改用户、userdel 删除用户
groupadd增加组、groupmod修改组、 groupdel删除组
进程的安全上下文
每一个进程启动起来,都有一个用户身份,这个身份决定着进程能访问什么资源。
文件的元数据中定义了权限mode,三部分为属主、属组、其它。
Read Write Execute
r w x
-ord rwx rwx rwx
FileType Owner Group Other Users
当一个进程访问-个资源时,首先进行属主权限匹配,未匹配再进行属组、附加组权限匹配。
如果都没匹配上,那么就是other其它用户,就匹配mode中的最后部分。
文件权限含义
权限命令
●chmod
。-R 目录递归设置,不推荐
。chmod [OPTION… OCTAL-MODE FL…使用3位八进制数修改文件mode
。chmod [OPTION… MODE[MODE]… FILE…
■修改某-组3位权限u、g、o、a
■u=、g=、o=、a=、ug=、 uo=、 go=
■修改组内3位中的某- -位
■u+、g+、o+、a+、+
■u-、g、o-、a-、-
●umask
。目录-般有x才能cd进入,文件-一般不要随便给x权限
。默认情况下,管理员umask是022,普通用户是002
。文件666-022=644
。目录为777-022=755
。umask 022修改掩码,非永久有效
●chown
。-R目录递归修改
。| chown [OPTION]… [OINER][: [GROUP]] FILE… 改文件的属主、属组