一、Linux系统上的文件类型
1、- :常规文件:在其它程序中用f表示。比如我们用ls -l命令查看的第一个内容
[root@localhost ~]# ls -l total 4 -rw-------. 1 root root 1252 Oct 24 2018 anaconda-ks.cfg
2、d:directory,目录文件
3、b:block device,块设备文件,以"block"为单位进行随机访问
[root@localhost ~]# ls -l /dev/sda* brw-rw---- 1 root disk 8, 0 Dec 14 17:42 /dev/sda brw-rw---- 1 root disk 8, 1 Dec 14 17:42 /dev/sda1 brw-rw---- 1 root disk 8, 2 Dec 14 17:42 /dev/sda2
4、c:character device,字符设备文件,支持以“character”为单位进行线性访问
major number:主设备号,用来标识设备类型,进而确定要加载的驱动程序
minor number:次设备号,用来标识同一类型中的不同的设备
8位二进制:0-255
5、l:symbolic link,符号链接文件,也叫软连接文件
6、p:pipe,命名管道
7、s:socker,套接字文件,主要用于服务提供
二、常用的基本命令
1、外部命令和内部命令
a、linux上的命令根据其是否在文件系统上存在一个与之对应的同名的文件。在我们文件系统上某一个路径下是否与这个命令本身有一个独立的文件我们可以把命令分为内建命令和外部命令。在我们文件系统的路径上有一个独立的文件而命令名就是文件名,这种就叫外部命令其实所有的文件都必然是外部命令,那么为什么会出现内建命令呢?是因为有一个外部命令自带有很多命令,我们有一个外部命令叫bash,bash就是外部的,但是bash自身很强大,他自带有很多小命令,所以这些小命令就是内部命令。
b、我们如何去区分内部命令还是外部命令呢?我们可以用type来查看
type COMMAND:
内部: builtin
[root@localhost /]# type cd
cd is a shell builtin
外部:显示为命令文件路径
注意,命令可以有别名,别名可以与原名相同,此时原名被隐藏,此时如果要运行原命令,则使用 COMMAND
[root@localhost /]# type bash
bash is /usr/bin/bash
[root@localhost /]# type ls #表示ls其实是 ls --color的简称 ls is aliased to `ls --color=auto' [root@localhost /]# ls application bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [root@localhost /]# ls #表示只运行ls application bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
c、命令别名
获取所有可用别名的定义:
[root@localhost /]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
定义别名,注意,此定义方式只对当前shell有效
[root@localhost /]# alias cls="clear" [root@localhost /]# alias alias cls='clear' alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
撤销别名
[root@localhost /]# unalias cls [root@localhost /]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
2、which,显示命令的完整路径
a、which --skip-alias COMMAND && which COMMAND ,忽略别名
[root@localhost /]# which --skip-alias ls /usr/bin/ls [root@localhost /]# which ls /usr/bin/ls
3、whereis命令,显示命令文件,源码文件及手册页
[root@localhost /]# whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
a、-b,仅搜索二进制程序路径
b、-m,仅搜索使用手册文件路径
4、who命令,查看登陆当前系统的相关用户信息
[root@localhost /]# who root pts/0 2019-12-14 17:43 (192.168.10.1) root pts/1 2019-12-14 18:37 (192.168.10.1)
a、-b,系统此次启动的时间
[root@localhost /]# who -b system boot 2019-12-14 17:42
b、-d,显示死亡的进程
c、-l,显示登陆进程
[root@localhost /]# who -l LOGIN tty1 2019-12-14 17:43 672 id=tty1
d、-r,查看进程级别
[root@localhost /]# who -r run-level 3 2019-12-14 17:43
5、w 命令,他不但能显示谁登陆了还能显示他们在干嘛,相当于增强版的who命令
[root@localhost /]# w 18:52:24 up 1:09, 2 users, load average: 0.06, 0.03, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.10.1 17:43 0.00s 0.12s 0.00s w root pts/1 192.168.10.1 18:37 14:39 0.02s 0.00s less -s
三、bash的基础特性
1、命令历史:shell进程会在其会话中保存此前用户提交执行过的命令
a、history命令可用查看
[root@localhost /]# type history
history is a shell builtin
定制history的功能,可通过环境变量实现:
HISTSIZE:shell进程可保留的命令历史的条数,默认为1000条
[root@localhost /]# echo $HISTSIZE 1000
HISTFILE:持久保存命令历史的文件,每一个用户登陆时命令历史会首先从历史文件中加载此前所有的命令到内存中,而后新的命令就补充在附加在这个内存中历史命令后面,所以使用history命令看到的是整个内存中的历史,使用cat看到的是文件中的内容。当我们用户shell登出时会自动保存相应命令
[root@localhost ~]# echo $HISTFILE /root/.bash_history
HISTFILESIZE:命令历史文件的大小,文件保存一千条命令
[root@localhost ~]# echo $HISTFILESIZE 1000
2、history命令用法
a、history [-c] [-d offset] [n]:操纵命令历史中多少条的
b、history -anrw [filename]:操纵历史文件的
c、history -ps arg [arg...]:定义history自己的工作特性的
history -c:清空历史命令,只清空内存中不会清空文件中。
history -d offset:删除某一个历史命令
删除id为200的历史命令
[root@localhost ~]# history -d 200
从id为200的历史命令开始删除,删除5条
[root@localhost ~]# history -d 200 5
history -r:读取历史文件并将内容追加到历史列表中
history -w:将当前历史写入到历史文件中,并追加到历史列表中
d、显示最近10条的命令历史
[root@localhost ~]# history 10 352 cat /root/.bash_history |wc -l 353 cat /root/.bash_history 354 cat /root/.bash_history |wc -l 355 history -w 356 history 357 history -d 351 358 history 359 history -d 353 5 360 history 361 history 10
3、调用命令历史列表中的命令
a、!#:再一次执行历史列表中的第#条命令
[root@localhost ~]# history 4 363 ls 364 history 365 history 2 366 history 4 [root@localhost ~]# !363 ls anaconda-ks.cfg
b、!!:再一次执行上一条命令(或者按上键也可以)
c、!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令
注意:命令的重复执行有时候需要依赖于幂等性;
4、调用上一条命令的最后一个参数
a、ESC,.
b、!$
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33 [root@localhost ~]# cat !$ cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no ...
5、控制命令历史纪录的方式
a、环境变量:HISTCONTROL
[root@localhost ~]# echo $HISTCONTROL ignoredups #忽略重复的,连续的就是重复的,比如多次执行某一个命令
ignoredups:忽略重复的命令
ignorespace:忽略以空白字符开头的命令
ignoreboth:以上两者同时生效
b、修改变量的值
NAME='VALUE',这种修改只对当前shell进程有效