本节内容
基础命令二:
1. alias:查看和设置别名(alias:别名)
alias 'ren=ls -ld'
2. unalias:取消别名
unalias ren
3. uname:查看系统信息
-r:查看内核(release释放、发布--显示操作系统发行版本)
-a:查看所有信息
4. hostname:查看和设置主机名(立即生效,但是重启失效)
hostname ren
5. hostnamectl set-hostname ren (立即生效,重启也生效)
6. history:显示历史命令(1000)
grep -i "hist" /etc/profile #在这个文件中可以进行设置
HISTSIZE=1000
!缩写(后面 + 某个字母(命令首字母),
可执行最近第一个以该字母开头的命令(history中从下往上数))
7. which:显示命令的路径
8. wc:统计信息
-l: 统计行数(line)
-c: 统计字符数(character)
-w: 统计单词(word)
9. w: 显示当前登陆的用户信息
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
10. who:显示正在登陆的用户
11. whoami:显示当前登陆的用户(who am i)
12. ping:测试主机在线
-c: count 指定发送包的次数
-i: intervel 间隔时间
-w: wait 超时等待时间
13. kill: 终止进程
kill -15/-9 PID (唯一标识一个进程)
14. du:查看文本大小(实际大小)
-s: 查看目录总大小(summarize)
-h: 人类易读(human readable)
15. df:查看磁盘使用情况(查看挂载点)(disk free)
-h: 人类易读
16. free:查看内存使用情况
-h:
-m: 以M为单位显示
-s: 刷新显示([-s delay ]连续抽样显示)
17. date:查看和设置系统时间
-s:设置时间(+日期,只设置日期;+时间,只设置时间;
+日期时间,设置日期时间;设置完成后可使用clock -w锁定)
%Y 年
%m 月
%d 日
%H 时
%M 分
%S 秒
%F:年月日
%T:时分秒
高级命令进阶:
1. 输出重定向
>: 正确覆盖输出
>>: 正确追加输出
2>: 错误覆盖输出
2>>: 错误追加输出
&>: 正确和错误覆盖输出
&>>: 正确和错误追加输出
2. 输入重定向
<
3. 管道符
|
前一个命令的输出作为下一个命令的输入
前面命令输出的结果,交给后面的命令继续处理
4. 通配符
*: 表示匹配0或者多个
?: 表示匹配单个字符,该字符必须存在
[0-9]: 表示匹配0-9之间的一个数字
[123]: 表示匹配1或者2或者3
[a-z]: 表示匹配a-z之间的一个字母
[abc]: 表示匹配a或者b或者c
[A-Z]:表示匹配A-Z之间的一个字母
[0-9a-zA-Z]:表示匹配0-9或a-z或A-Z之间的一个字母
5. /
/root: root用户家目录
/home: 普通用户家目录
/media: 挂载光盘
/etc: 存放配置文件
/tmp: 共享临时文件
/var: 放置经常变动的文件如日志
/bin,/sbin: 放置二进制命令
/dev: 磁盘设备
基础命令二
1. alias
设置和查看别名(谨慎使用)
例子1:查看别名
[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'
例子2:设置别名
[root@localhost ~]# alias ren="ls -l"
[root@localhost ~]# ren(命令相当于 ls -l)
总用量 8
-rw-------. 1 root root 1770 6月 18 16:49 anaconda-ks.cfg
-rw-r--r--. 1 root root 1818 6月 18 16:52 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 6月 18 16:53 公共
drwxr-xr-x. 2 root root 6 6月 18 16:53 模板
drwxr-xr-x. 2 root root 6 6月 18 16:53 视频
drwxr-xr-x. 2 root root 6 6月 18 16:53 图片
drwxr-xr-x. 2 root root 6 6月 18 16:53 文档
drwxr-xr-x. 2 root root 6 6月 18 16:53 下载
drwxr-xr-x. 2 root root 6 6月 18 16:53 音乐
drwxr-xr-x. 2 root root 28 7月 8 19:08 桌面
2. unalias
取消别名
[root@localhost ~]# unalias ren
[root@localhost ~]# ren
bash: ren: 未找到命令...
注意:
以后在接手一台服务器的时候要看一下已经设置了哪些别名!
3. uname
查看主机信息
-a 显示所有的信息
-r 显示内核版本号(重点)
例子1:查看主机信息
[root@localhost ~]# uname
Linux
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
例子2:查看内核版本号
[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64
4. hostname
查看和设置主机名
例子1:查看主机名
[root@localhost ~]# hostname
localhost.localdomain
例子2:设置主机名
[root@localhost ~]# hostname renyz
[root@localhost ~]# hostname
renyz
注意:
hostname修改的主机名是立即生效但是重启系统就失效了
如果不想开机失效的话可以写入到配置文件/etc/hostname
[root@localhost ~]# echo "renyz" > /etc/hostname
[root@localhost ~]# cat /etc/hostname
renyz
5. hostnamectl
设置主机名
设置的主机名立即生效而且重启系统依然有效
例子1:设置主机名立即且永久有效
[root@localhost ~]# hostnamectl set-hostname renyz(重点)
6. history
显示执行过的命令
[root@renyz ~]# history
特殊用法:
[root@renyz ~]#!c #执行从下到上数最后一个以c开头的命令(history中)
7. which
显示命令的完整路径
命令都是一个可以执行的文件
[root@renyz ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
[root@renyz ~]# ls -l /usr/bin/ls
-rwxr-xr-x. 1 root root 117680 10月 31 2018 /usr/bin/ls
可以查看命令依赖于那个程序!
8. wc
统计文本信息
-l 统计行数
-w 统计单词数
-c 统计字符
例子1:统计当前系统中有多少用户
[root@renyz ~]# wc -l /etc/passwd
44 /etc/passwd(passwd用户目录,每一行就是一个用户)
例子2:统计单词数
[root@renyz ~]# echo "this is renyz"|wc -w
3
例子3:统计字符
[root@renyz ~]# echo "this is renyz"|wc -c
14(“|”管道符)
[root@renyz ~]# printf "this is renyz"|wc -c
13(真实字符数量)
9. w
显示当前登录的用户
[root@renyz ~]# w
02:50:53 up 21 min, 2 users, load average: 0.01, 0.07, 0.17
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root :0 :0 02:30 ?xdm? 59.55s 0.30s /usr/libexec/gnome-ses
root pts/0 :0 02:31 5.00s 0.19s 0.05s w
主要关注:登录用户、登录IP
10. who
显示正在登陆的用户
[root@renyz ~]# who
root :0 2019-07-10 02:30 (:0)
root pts/0 2019-07-10 02:31 (:0)
11. whoami
显示当前登录的用户
[root@renyz ~]# whoami
root
12. ping
测试主机是否在线
-c 发送包的数量
-i 发送包的间隔数
-w 超时等待时间
例子1:测试本机是否可以通外网
[root@renyz ~]# ping baidu.com(在Linux系统下不会自动停止)
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=42.7 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=128 time=49.3 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=128
例子2:发送两个包
[root@renyz ~]# ping -c 2 baidu.com
PING baidu.com (123.125.114.144) 56(84) bytes of data.
64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=1 ttl=128 time=42.9 ms
--- baidu.com ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1001ms
rtt min/avg/max/mdev = 42.961/42.961/42.961/0.000 ms
例子3:指定发送包的间隔时间为5秒钟
[root@renyz ~]# ping -c 3 -i 5 baidu.com
例子4:指定超时等待时间(到达等待时间自动停止退出)
[root@renyz ~]# ping -w 2 google.com
13. kill
终止进程
-9 强制终止进程
格式:
kill -9 PID(process ID)
默认是 -15 不是立即退出,而是完成自己的工作后再退出!
显示进程:
[root@renyz ~]# ps aux
oot@renyz ~]# ps -ef
例子1:关掉进程
kill -9 1818
14. du
查看文件和目录的大小
-h 人类易读的方式显示文件大小
-s 目录的总大小(summary)
注意:
du查看的是文件占用的block块的大小
ls -lh才是文件的实际大小
例子1:
[root@renyz ~]# du -h anaconda-ks.cfg
4.0K anaconda-ks.cfg
[root@renyz ~]# ls -lh anaconda-ks.cfg
-rw-------. 1 root root 1.8K 6月 18 16:49 anaconda-ks.cfg
例子2:查看目录总大小
[root@renyz ~]# du -sh /etc
38M /etc
15. df
显示查看磁盘的大小及挂载点
-h 人类易读的方式显示文件大小
例子1:
[root@renyz ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 3.7G 14G 22% /
devtmpfs 470M 0 470M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.5M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 166M 849M 17% /boot
tmpfs 98M 24K 98M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
16. free
显示内存信息
-h 人类易读的方式
-m 以M单位显示
例子1:
[root@renyz ~]# free -hm
total used free shared buff/cache available
Mem: 972M 635M 74M 51M 262M 88M
Swap: 2.0G 16M 2.0G
17. date
显示和设置系统时间
例子1:查看时间
[root@renyz ~]# date
2019年 07月 09日 星期二 19:39:28 CST
例子2设置时间
[root@renyz ~]# date -s "2019-7-9 19:42:00"
2019年 07月 09日 星期二 19:42:00 CST
例子3:格式化输出时间
%Y 年
%m 月
%d 天
%H 小时
%M 分钟
%S 秒
[root@renyz ~]# date "+%Y/%m/%d %H:%M:%S"
2019/07/09 19:49:13
例子4:
%F 年月日
%T 时分秒
[root@renyz ~]# date "+%F %T"
2019-07-09 19:50:01
高阶命令进阶
1. 输出重定向
>:覆盖输出,会覆盖掉原先的文件内容
>>:追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加
2>:错误输出,会覆盖掉原先的文件内容
2>>:错误追加输出,会覆盖掉原始文件内容,会在原始内容末尾继续添加
&>:将标准输出与错误输出共同写入到文件中。覆盖原有内容
&>>:将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)
例子1:覆盖输出
[root@renyz ~]# echo "123">test
[root@renyz ~]# cat test
123
例子2:追加输出
[root@renyz ~]# echo "2354">>test
[root@renyz ~]# echo "2354">>test
[root@renyz ~]# echo "2354">>test
[root@renyz ~]# cat test
123
2354
2354
2354
例子3:错误覆盖
[root@renyz ~]# ren 2>test
[root@renyz ~]# cat test
bash: ren: 未找到命令...
例子4:错误追加
[root@renyz ~]# ren 2>>test
[root@renyz ~]# ren 2>>test
[root@renyz ~]# cat test
bash: ren: 未找到命令...
bash: ren: 未找到命令...
总结:
要是一个>都是覆盖,只要是两个>>都是追加,无论是正确还是错误输出
例子5:无论是错误的还是正确的都输出倒文件中
[root@renyz ~]# ls &>>test
[root@renyz ~]# cat test
bash: ren: 未找到命令...
bash: ren: 未找到命令...
bash: ren: 未找到命令...
bash: ren: 未找到命令...
anaconda-ks.cfg
initial-setup-ks.cfg
test
2. 输入重定向
<
[root@renyz ~]# wc -l </etc/passwd
44
[root@renyz ~]# wc -l /etc/passwd
44 /etc/passwd
3. 管道符(|)
管道命令符(|)的作用是把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入。
一条命令中管道符可以使用多个,只要前面的命令有输出结果,管道符后面的命令即可再执行!
例子1:
[root@renyz ~]# cat /etc/passwd | wc -l
44
例子2:
[root@ken245 ~]# cat /var/log/nginx/access.log | awk ‘{print $1}’ | sort | uniq -c | sort -rn | head -3awa
501 61.148.243.143sor
118 114.242.248.85
110 122.71.224.158
4. 通配符
* 表示匹配的任意内容,可以是0个也可以是很多个字符
? 表示匹配单个字符,必须存在
[] 表示匹配括号里面的任意一个字符
例子1:找到所有以/dev/sda开头的文件
[root@renyz ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2
例子2:找到以/dev/sda开头并且后面跟一个字符的文件
[root@renyz ~]# ls /dev/sda?
/dev/sda1 /dev/sda2
例子3:找到以/dev/sda开头并且后面跟一个数字的文件
[root@renyz ~]# ls /dev/sda[0-9]
/dev/sda1 /dev/sda2
例子4:找到以/dev/sda开头并且后面跟一个字母的文件
[root@renyz ~]# ls /dev/sda[a-z]
/dev/sdae
例子5:
[root@renyz ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdae /dev/sdaewef /dev/sdan /dev/sdass
[root@renyz ~]# ls /dev/sda[and]
/dev/sdan
注意:
不要把中括号里面的字符当做一个整体,二是匹配中括号里面的单个字符
例子6:删除当前目录中所有以test开头的文件
[root@renyz ~]# ls
abb anaconda-ks.cfg ande efds sdf test1
adfe and ddd initial-setup-ks.cfg test wqs
[root@renyz ~]# rm -rf test*
[root@renyz ~]# ls
abb anaconda-ks.cfg ande efds sdf
adfe and ddd initial-setup-ks.cfg wqs
5. 一切从“/”开始
在Linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,即“Linux系统中一切都是文件”。既然平时我们打交道的都是文件,那么又应该如何找到它们呢?在Windows操作系统中,想要找到一个文件,我们要依次进入该文件所在的磁盘分区(假设这里是D盘),然后在进入该分区下的具体目录,最终找到这个文件。但是在Linux系统中并不存在C/D/E/F等盘符,Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT均代表不同的目录,并且文件名称中不得包含斜杠(/)。Linux系统中的
文件存储结构如图所示:
前文提到的FHS是根据以往无数Linux系统用户和开发者的经验而总结出来的,是用户在Linux系统中存储文件时需要遵守的规则,用于指导我们应该把文件保存到什么位置,以及告诉用户应该在何处找到所需的文件。但是,FHS对于用户来讲只能算是一种道德上的约束,有些用户就是懒得遵守,依然会把文件到处乱放,有些甚至从来没有听说过它。这里并不是号召各位读者去谴责他们,而是建议大家要灵活运用所学的知识,千万不要认准这个FHS协定只讲死道理,不然吃亏的可就是自己了。在Linux系统中,最常见的目录以及所对应的存放内容如表所示。
Linux系统中常见的目录名称以及相应内容
目录名称 |
应放置文件的内容 |
/boot |
开机所需文件—内核、开机菜单以及所需配置文件等 |
/dev |
以文件形式存放任何设备与接口 |
/etc |
配置文件 |
/home |
用户主目录 |
/bin |
存放单用户模式下还可以操作的命令 |
/lib |
开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数 |
/sbin |
开机过程中需要的命令 |
/media |
用于挂载设备文件的目录 |
/opt |
放置第三方的软件 |
/root |
系统管理员的家目录 |
/srv |
一些网络服务的数据文件目录 |
/tmp |
任何人均可使用的“共享”临时目录 |
/proc |
虚拟文件系统,例如系统内核、进程、外部设备及网络状态等 |
/usr/local |
用户自行安装的软件 |
/usr/sbin |
Linux系统开机时不会使用到的软件/命令/脚本 |
/usr/share |
帮助与说明文件,也可放置共享文件 |
/var |
主要存放经常变化的文件,如日志 |
/lost+found |
当文件系统发生错误时,将一些丢失的文件片段存放在这里 |
绝对路径vs相对路径
在Linux系统中另外还有一个重要的概念—路径。
路径指的是如何定位到某个文件,分为绝对路径与相对路径。
绝对路径指的是从根目录(/)开始写起的文件或目录名称
相对路径则指的是相对于当前路径的写法。