Linux常用命令
Tab键:命令补全
当我们在Linux系统的终端中,输入命令时,可以无需完整的命令,只需要记住命令的前几个字母即可,然后按Tab键,系统会自动进行补全操作。需安装命令补全工具bash-completion
[root@localhost ~]# yum install -y bash-completion
按一次Tab键,补全;按两次Tab键,显示所有符合补全的项
su切换用户
[root@server1 ~]# su - zhangsan <--超管切换普通用户不需要密码
[zhangsan@server1 ~]$ su - root <--普通用户切换超管或其他用户需要被切换用户的密码
密码:
上一次登录:日 8月 8 15:53:32 CST 2021从 192.168.226.1pts/0 上
[root@server1 ~]#
#加横杆表示切换用户的同时,切换用户的家目录
uname获取系统相关信息
[root@server1 ~]# uname -a
Linux server1 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
选项说明:
-a :all,显示所有(类型、全部主机名、内核版本、发布时间、开源计划)
ls显示文件信息
ls = list show
# ls <--显示当前目录下的文件信息
# ls [路径] <--显示其他目录下的文件信息
# ls [选项] [路径]
选项说明:
-l :ls -l,代表以详细列表的形式显示当前或其他目录下的文件信息(简写命令=>ll)
-h :ls -lh(ll -h也可),通常与-l结合一起使用,表以较高的可读性显示文件的大小(kb/mb/gb)
-a :ls -a,a是all缩写,代表显示所有文件(也包含隐藏文件=>大部分以.开头)
-i :ls -i,显示inode数目
pwd打印当前目录
pwd = print working directory
# pwd
cd切换目录
cd = change directory
# cd [路径]
选项说明:
路径既可以是绝对路径,也可以是相对路径
# cd /home/zhangsan
# cd ../../ #返回上两级目录
# cd ~ # 直接回家
# cd # 直接回家
clear清屏
# clear
reboot重启
# reboot
shutdown关机
# shutdown -h 0或now <--立即关机
# shutdown -h 10 <--代表10分钟后,自动关机
# shutdown -c <--取消关机(需要先按Ctrl + C)
选项说明:
-h :halt缩写,代表关机
在Linux系统中,立即关机除了使用shutdown -h 0以外还可以使用halt -p或者poweroff命令
history显示历史命令
- 默认显示前1000条命令
# history
选项说明:
‐ a : 追加本次会话执行的命令历史列表至历史文件中
‐ d :删除历史中指定的命令
‐ c : 清空历史命令
扩展:
支持光标上下键,复制可使用
^R:搜索历史命令(输入一段某条命令的关键字:必须是连续的)
!220:执行历史命令中第220条命令
!字符串xxxx:搜索历史命令中最近一个以xxxx字符开头的命令,例如!ser
!$
- 引用上一个命令的最后一个参数 ,当上一个命令没有参数的时候,!$代表的是上一个命令本身
hostnamectl修改主机名
hostnamectl : hostname + control
获取主机名
# hostname CentOS6
# hostnamectl CentOS7
设置主机名
Centos7中主机名分3类:
① 静态static主机名:长久生效
② 瞬态transient主机名:临时生效
③ 灵活pretty主机名:可以包含一些特殊字符
更改主机名称,让其永久生效?① 使用静态主机名 ②更 改配置文件/etc/hostname
① 瞬态主机名称(临时设置)
# hostnamectl --transient set-hostname 主机名
主机名称 建议遵循 FQDN协议(功能+公司域名)
# su 立即生效
② 静态主机名称(永久生效)
# hostnamectl --static set-hostname 主机名 (--static也可以省略)
只有这个常用:hostnamectl set-hostaname 主机名
③ 灵活主机名称(主机名称可以添加特殊字符)
# hostnamectl --pretty set-hostname 主机名(包含特殊字符)
查看灵活的主机名称
# hostnamectl --pretty
systemctl管理服务
显示系统服务
# systemctl list-units --type service --all 列出所有服务(包含启动的和没启动的)
# systemctl list-units --type service 列出所有启动的服务
# systemctl list-units --type service | grep sshd 列出所有含有ssh字段的启动的服务
系统服务管理
# systemctl status sshd 查询ssh服务的状态
# systemctl stop network 停止network服务
# systemctl start network 启动network服务
# systemctl restart crond 重启crond服务
# systemctl reload crond 热重载重载crond服务
reload:热重载,指重新加载指定服务的配置文件(并非所有服务都支持reload,但都支持restart)
服务持久化
# systemctl enable crond 设置crond服务开机自启
# systemctl disable crond 设置crond服务开机不自启
常见报错:
[root@server1 ~]# systemctl enable network network.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig network on 以上提示代表network.service不是一个本地的系统服务,所以想设置开机自启需要使用/sbin/chkconfig进行操作
解决方法:
[root@server1 ~]# /sbin/chkconfig network on
find文件搜索
通过文件名搜索文件
# find /etc -name "*.conf"
# find /etc -name "*.conf" -type f
# find ./ -name *.txt | xargs rm -rf
通过文件修改时间搜索文件
# find ./ -name "*.txt" -mtime +3 搜索三天前修改的文件(今天为25号,搜索的为22号之前的文件,不包含22号的文件)
# find ./ -name "*.txt" -mtime -3 搜索三天内修改的文件(今天为25号,搜索的为25.24.23号的文件)
通过文件大小搜索文件
# find /root -type f -size 5M 搜索/root目录下大小为5M的文件
# find /root -type f -size -5M 搜索/root目录下小于5M的文件
# find /root -type f -size +5M 搜索/root目录下大于5M的文件
选项说明:
-name :指定文件名,支持*通配符
-type :f代表普通文件、d代表文件夹
-mtime:指定修改时间,默认单位为天
-size :指定文件大小,常用单位k,M,G
dd生成指定大小的测试文件
# dd if=/dev/zero of=a.txt bs=1M count=1 创建一个1M大小的a.txt文件
选项说明:
if:input file输入文件
of:output file输出文件
bs代表字节为单位的块大小。
count代表被复制的块。
其中/dev/zero是一个字符设备,会不断返回0值字节。
[root@server1 ~]# dd if=/dev/zero of=a.txt bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00100714 秒,1.0 GB/秒
[root@server1 ~]# ll -h
总用量 1.1M
-rw-------. 1 root root 1.3K 7月 24 17:35 anaconda-ks.cfg
-rw-r--r-- 1 root root 1.0M 8月 21 13:04 a.txt
tree创建文件树形列表
[root@server1 ~]# tree
-bash: tree: 未找到命令
报错:-bash: tree: 未找到命令
原因:tree命令相关软件未安装
解决:yum install -y tree
# tree 显示当前目录
# tree /var/log 显示/var/log这个目录文件列表
[root@server1 ~]# tree /var/log
/var/log
├── anaconda
│ ├── anaconda.log
│ ├── ifcfg.log
│ ├── journal.log
│ ├── ks-script-r0lFV_.log
│ ├── ks-script-_vylTn.log
│ ├── packaging.log
│ ├── program.log
│ ├── storage.log
│ ├── syslog
│ └── X.log
├── audit
│ └── audit.log
├── boot.log
├── boot.log-20210816
├── btmp
├── btmp-20210816
├── ceph
├── cron
├── cron-20210816
├── dmesg
├── dmesg.old
├── firewalld
├── grubby
├── grubby_prune_debug
├── httpd
├── lastlog
├── maillog
├── maillog-20210816
├── messages
├── messages-20210816
├── ntpstats
├── rhsm
├── secure
├── secure-20210816
├── spooler
├── spooler-20210816
├── tallylog
├── tuned
│ └── tuned.log
├── wtmp
├── yum.log
└── zabbix
├── zabbix_agentd.log
└── zabbix_agentd.log-20210816
date获取系统当前时间
[root@server1 ~]# date
2021年 08月 21日 星期六 14:34:21 CST
[root@server1 ~]# date +%F
2021-08-21
[root@server1 ~]# date +%Y%m%d
20210821
[root@server1 ~]# date +%T
14:38:45
# date +"时间格式"
%F : 年-月-日
%T : 小时:分钟:秒
%Y : Year,年
%m : month,月
%d : day,日
%H : Hour,小时
%M : Minute,分钟
%S : Second,秒
[root@server1 ~]# cp a.txt $(date +%F).txt
[root@server1 ~]# ls
2021-08-21.txt anaconda-ks.cfg a.txt dir1 dir2 video.mp4
crontab计划任务-定时备份
# crontab -l 查询当前的计划任务
# crontab -e 编写计划任务
-l : list,查询当前用户的计划任务
-e : edit,编辑计划任务
计划任务编写格式:
分 时 日 月 周 执行的命令(要求使用完整路径,* 表示任何数字都符合)
0 2 * * * /run.sh # 每天的2点
0 2 14 * * /run.sh # 每月14号2点
0 2 14 2 * /run.sh # 每年2月14号2点
0 2 * * 5 /run.sh # 每个星期5的2点
0 2 * 6 5 /run.sh # 每年6月份的星期5的2点
0 2 2 * 5 /run.sh # 每月2号或者星期5的2点 星期和日同时存在,是或的关系
0 2 2 6 5 /run.sh # 每年6月2号或者星期5的2点
*/5 * * * * /run.sh # 每隔5分钟执行一次
0 2 1,4,6 * * /run.sh # 每月1号,4号,6号的2点
0 2 5-9 * * /run.sh # 每月5-9号的2点
* * * * * /run.sh # 每分钟
0 * * * * /run.sh # 每整点
* * 2 * * /run.sh # 每月2号的每分钟
周的范围比较特殊,计划任务范围0-7,0和7都代表周日,其他数字几代表周几
定时备份
# crontab -e
0 2 * * 1 /usr/bin/tar -zcf /tmp/etc.tar.gz /etc
每周一的凌晨2点把/usr/bin/tar目录备份(打包压缩)到/tmp目录下,命名为etc.tar.gz
每次备份时,生成的文件名称是一致的,后面备份的文件就会把前面备份的文件进行覆盖
为解决这个问题,可以在备份文件,按备份时间作为备份文件的名称
# crontab -e
0 2 * * * /usr/bin/tar -zcf /tmp/etc-$(date +"\%Y\%m\%d").tar.gz /etc
在编写计划任务时,%的意思是开启新一行,所以前面必须添加转义字符,否则计划任务不能正常执行