- 前言
- alias / unalias 命令别名
- cd 切换目录
- cp 复制文件或目录
- cat 查看文件内容
- chage 设置密码有效期
- chown 更改文件所属
- chmod 设置文件rwx权限
- chattr / lsattr 隐藏属性
- crontab 定时任务
- df 磁盘使用情况
- date 系统时间 / hwclock 硬件时钟
- diff 文件比较
- echo 标准输出
- find / locate 文件搜索
- free 查看内存使用
- head 查看文件前面的内容
- history 命令历史
- ip 网络配置管理
- kill 结束进程
- ln 创建链接(快捷方式)
- ls 查看目录中的内容
- less 分页查看文件
- mv 剪切 / 重命名 文件或目录
- mkdir 创建目录
- ps 查看进程
- pwd 显示当前目录
- passwd 修改密码
- rm 删除文件或目录
- su 切换用户
- stat 查看文件详细信息
- sort 排序 / uniq 去重
- split 分割文件
- tar 打包
- top 动态查看进程
- tail 查看文件末尾内容
- touch 修改文件的时间属性或创建空文件
- useradd / groupadd 用户和组管理
- vi / vim 文本编辑器
- wc 统计字数行数
- xargs 参数传递
- yum 红帽系列包管理工具
- zip / unzip 压缩与解压
前言
- 以下命令测试环境为
CentOS7.8
- 使用的
shell
为系统默认的bash
- Linux下是区分大小写的,这点和Windows不同
- Linux大部分命令语法为
命令 [选项] [参数]
,我所介绍的选项为常用选项并不包含全部
alias / unalias 命令别名
alias
命令用于给指令设置一个别名,unalias
命令用于取消设置
-
可以给长命令起一个简单的别名便于使用,如:
alias ens33="vi /etc/sysconfig/network-scripts/ifcfg-ens33"
-
取消已设置的别名命令
unalias ens33
-
可以避免危险操作,如系统默认的命令
rm
mv
cp
等,都是通过alias
加了-i
参数的# 查看所有的使用别名的命令 [root@God ~]# alias alias cp='cp -i' 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'
-
在命令前加
或者使用命令全路径可忽略使用别名
# 不进行询问直接删除mail.log文件 m /var/log/mail.log 或 /usr/bin/rm /var/log/mail.log
-
在命令行通过
alias
和unalias
设置或取消的别名都是暂时性的,仅作用于当前登录的会话。如果想要永久生效,可以在~/.bashrc
文件添加别名设置
cd 切换目录
cd
命令用于切换工作目录至指定的目录,可用相对路径和绝对路径
-
选项
/
表示根目录.
表示当前目录..
表示上一级目录-
表示上次所在的目录~
表示当前用户的家目录
# 进入用户家目录 cd ~ # 进入指定目录 cd /etc # 进入上两级目录 cd ../..
cp 复制文件或目录
cp
用来复制文件或目录到指定位置
-
语法
cp [选项] 源 目标
-
选项
-a
相当于同时指定-dpr
-d
复制时保留链接(相当于Windows系统中的快捷方式)-p
保留源文件或目录的属性-r|R
对目录进行递归处理,复制目录时必须加上它才能复制-f
覆盖已存在的目标而不给出提示-i
与-f
相反,如果目标文件存在,则提示是否覆盖
# 复制文件/etc/hosts到目录/local下 cp /etc/hosts /local # 复制文件/etc/hosts到目录/local下并命名为hosts.bak cp /etc/hosts /local/hosts.bak # 复制目录/etc到目录/local下,如果/local/etc已存在直接覆盖 cp -af /etc /local # 复制目录/etc到目录/local下并重命名为etc.bak cp -a /etc /local/etc.bak
cat 查看文件内容
cat
命令适合查看少量内容,并可将多个文件连接到一起进行标准输出,当文本数据内容量过大时,推荐使用less
或 more
进行查看
-
语法
cat [选项] 文件1 [文件2 文件N]
-
选项
-n
输出时显示行号-s
当遇到有连续两行以上的空白行,就替换成一个空白行
# 查看resolv.conf的内容 cat /etc/resolv.conf # 将/etc/resolv.conf和/etc/hosts两个文件连接到一起进行标准输出,并显示行号 cat -n /etc/resolv.conf /etc/hosts
-
cat
还可以配合重定向将标准输入写到文件中[root@God ~]# cat > demo.txt << EOF > 我在命令行打上 cat > demo.txt << EOF > 在 > 后面写的东西都能写入到文件中 > 写完了所有内容后,在最后单独写个EOF就可以了 > EOF [root@God ~]# cat -n demo.txt 1 我在命令行打上 cat > demo.txt << EOF 2 在 > 后面写的东西都能写入到文件中 3 写完了所有内容后,在最后单独写个EOF就可以了
chage 设置密码有效期
chage
命令本质是修改通过/etc/shadow
文件中的内容来设置账号密码有效期限的
-
语法
chage [选项] 用户
-
选项
-l
列出用户的当前设置-d DATE
DATE为日期,格式YYYY-MM-DD
,即设置上次修改密码的时间,设置为0
则下次登录时必须改密码,设置为-1
则密码永不过期,密码是否过期就是根据这个时间计算的-E DATE
DATE为日期,格式YYYY-MM-DD,设置账号失效日期(对root慎用),设置为0
则立即失效,设置为-1
则永不失效-M N
N为天数,密码有效期,即每过N天不修改密码的话密码就会过期-m N
N为天数,即距离上次修改日期N天后,才可以更改密码,设置为0
表示随时可更改-W N
N为天数,即距离密码过期日N天前开始发出警告信息-I N
N为天数,即如果一个密码已过期N天,那么该账号将失效
# 列出 jet 用户的账号密码有效日期详细信息 chage -l jet # 使 jet 用户下次登陆时必须修改密码 chage -d 0 jet # 设置 jet 用户2020年8月8日账号失效 chage -E '2020-8-8' jet # 设置用户至少每90天就需要改一次密码,并在15天之前提醒 chage -M 90 -W 15 jet
chown 更改文件所属
chown
命令可以更改Linux下文件或目录的所属用户、所属组,Linux下一切皆文件,而文件必须有所属
-
语法
chown [用户][:用户组] 文件或目录
-
选项
-R
递归处理,将指定目录下所有文件及子目录一并处理-v
显示执行过程
# 更改/local/myfile.txt的拥有者为root用户 chown root /local/myfile.txt # 更改/local/myfile.txt的群组的使用者为root组 chown :root /local/myfile.txt # 更改/local/myfile.txt的拥有者为root用户,群组的使用者为root组 chown root:root /local/myfile.txt # 更改目录/local的拥有者为root用户 chown -R root /local
chmod 设置文件rwx权限
chmod
命令可用于更改文件的r
读、w
写、x
执行权限, 通过ls -l
或stat
命令可查看文件的权限-rw-r--r--
第一位表示文件类型,后9位每三位为一组,分别表示所属用户、所属组、其他用户的权限。
-
语法
chmod [选项] rwx的权限分值 文件或目录
- 权限分值 r=4, w=2, x=1
chmod [选项] 身份标识(+|-)(r|w|x) 文件或目录
- 身份标识 u=user所属用户 , g=group所属组, o=other其他用户, a=all(u+g+o)所有用户
-
选项
-R
递归处理,将指定目录下所有文件及子目录一并处理
# 更改文件/local/myscript.sh的权限 # 文件拥有者权限=7(r+w+x) 同组用户权限=5(r+x) 其他用户权限=5(r+x) chmod 755 /local/myscript.sh # 去掉其他用户对文件/local/myscript.sh的写权限 chmod o-w /local/myscript.sh # 去掉其他用户对文件/local/myscript.sh的写权限,给同组用户加上执行权限 chmod o-w,g+x /local/myscript.sh # 更改目录/local的权限 chmod -R 754 /local
chattr / lsattr 隐藏属性
chattr
命令可以用来修改文件或目录的隐藏属性,只有root用户可以使用
-
语法
chattr [选项] (+|-|=)属性 文件或目录
+
表示增加该属性-
表示去掉该属性=
表示去掉其他属性,只保留该属性
-
选项
-R
递归处理,将指定目录下所有文件及子目录一并处理
-
属性
a
设置后只能增加数据,而不能删除或修改数据i
设置后不能被删除、改名、设定链接也无法新增,相当于锁定s
彻底删除的属性,即有该属性的文件删除后无法恢复u
当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复,预防意外删除
# 给test.txt文件添加a属性,使其只能增加数据 chattr +a /local/test.txt # 去掉改属性 chattr -a /local/test.txt
lsattr
命令可以查看隐藏属性
-
语法
lsattr [选项] [文件或目录]
-
选项
-a
显示隐藏文件-d
显示目录的属性,而不是目录中内容
# 查看test.txt文件的隐藏属性 lsattr /local/test.txt # 查看/local目录的隐藏属性 lsattr -d /local # 查看当前目录下的文件或目录的隐藏属性,包含吟唱文件 lsattr -a
crontab 定时任务
crontab
命令用来管理需要周期性执行的任务,与Windows下的计划任务类似,依赖于crond
服务执行,定时任务的配置文件一般以用户为单位,放在/var/spool/cron
目录中,执行日志是/var/log/cron
。crontab
通过cron 表达式
来进行定时任务的配置
- 避免资源分配不均匀,即多个定时任务在同一时间点执行时,尽量错开
- 取消不要的输出选项,将执行结果
>> /dev/null
中,避免一直发邮件 - 一般情况下周与日、月不可同时共存
anacron
是可唤醒关机期间的工作任务的配置,有检测机制,针对不24小时开机的服务器,需要的自行百度
# cron表达式 分时日月周:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# * 代表任何时刻
# , 代表分隔时段
# - 代表时间范围
# /N N为数字,表示执行几次
-
crontab
常用命令# 显示当前用户crontab配置 crontab -l # 编辑当前用户crontab配置 crontab -e # root用户可以帮其他用户新建/删除crontab配置 crontab -u guest
-
crontab
配置示例# 每1分钟执行一次 * * * * * echo $(date) >> /dev/null # 每5分钟执行一次后面的命令 */5 * * * * echo $(date) >> /local/my_crontab.txt # 每2小时执行一次后面的命令 * */2 * * * echo $(date) >> /local/my_crontab.txt # 在3:00与10:00的时候执行一次 * 3,10 * * * echo $(date) >> /local/my_crontab.txt # 在10:00到22:00之间每2小时执行一次 * 10-22/2 * * * echo $(date) >> /local/my_crontab.txt # 在21:00到21:30之间每5分钟执行一次 0-30/5 21 * * * echo $(date) >> /local/my_crontab.txt # 每周一0点执行一次 0 0 * * 1 echo $(date) >> /local/my_crontab.txt # 每年的5月20日00:00分都会给rose发一封情书邮件 0 0 20 5 * mail rose < /home/jack/lover.txt
df 磁盘使用情况
df
命令用于显示文件系统的磁盘使用信息
-
语法
df [选项]
-
选项
-h
以人类可读的格式显示(K|M|G)-i
显示inode文件的数量和使用量-T
显示磁盘的文件系统类型
# 显示磁盘使用情况 df -h # 显示inode信息 df -hi
date 系统时间 / hwclock 硬件时钟
linux系统有两个时钟:一个是由主板电池驱动的硬件时钟(Real Time Clock),也叫做RTC或者叫CMOS时钟。当操作系统关机的时候,用这个来记录时间,但是对于运行的系统是不用这个时间的;另一个时间是系统时钟(System clock)也叫内核时钟或者软件时钟,是由软件根据时间中断来进行计数的,内核时钟在系统关机的情况下是不存在的,所以,当操作系统启动的时候,内核时钟是要读取RTC时间来进行时间同步。并且在系统关机的时候将系统时间写回RTC中进行同步。
date
命令比较常用,可以用来显示和设定系统的日期和时间,在显示方面还可以自定义格式
-
语法
date [+格式] [选项]
-
格式
%Y
年 {0000..9999}%m
月 {1..12}%d
日 {01..31}%H
时 {00..23}%M
分 {00..59}%S
秒 {00..59}%N
纳秒 {000000000..999999999}%u
星期 {1..7}%j
一年的第多少天 {001..366}%F
完整的日期,相当于%Y-%m-%d
%T
完整的时间,相当于%H:%M:%S
%R
钟表上显示的时间, 相当于%H:%M
%s
从1970-01-01 00:00:00 UTC 到现在的秒数
# 格式化显示当前系统时间 [root@God ~]# date "+%F %T.%N" 2020-06-22 20:34:36.179451922 # 显示今天是今年的第多少天 [root@God ~]# date "+%j" 174 # 设置系统时间为2012-12-12 12:12:12 [root@God ~]# date -s "2012-12-12 12:12:12" Wed Dec 12 12:12:12 CST 2012 [root@God ~]# date Wed Dec 12 12:12:12 CST 2012
-
选项
-d DATESTR
该选项非常强大,可以根据DATESTR的描述显示时间-s DATESTR
根据DATESTR的描述,设置系统时间,把-d
换成-s
即可
# 年year 月month 日day 时hour 分min 秒seconds # 显示1天前的时间 date -d "-1day" # 显示100天后的时间 date "+%F %T" -d "+100day" # 显示新中国成立100周年是哪天 date "+%F" -d "1949-10-01 +100year" # 设置日期为新中国成立100周年那天 date "+%F" -s "1949-10-01 +100year"
-
硬件时钟
hwclock
的常用命令# 显示硬件时钟时间 hwclock # 将当前系统时间写入硬件时钟 hwclock -w # 以系统时钟为准,同步硬件时钟 hwclock --systohc # 以硬件时钟为准,同步系统时钟 hwclock --hctosys # 将硬件时钟设置成指定的时间 hwclock --set --date="2008-08-08 08:08:08"
-
使用
ntpdate
命令将本机时间与时间服务器的时间进行同步,没有这个命令使用yum install ntpdate
安装# 将本机时间与阿里云时间服务器时间进行同步 ntp[1-7].aliyun.com ntpdate ntp7.aliyun.com
diff 文件比较
diff
命令可以快速比较两个文件或目录是否有不同
-
语法
# 比较文件 diff [选项] 文件1 文件2 # 比较目录 diff [选项] 目录1 目录2
-
选项
-b
忽略一行当中仅有多个空白的区别(例如"about me"与"about me"视为相同)-B
忽略空白行的区别-i
忽略大小写的区别
# 比较两个文件 diff /etc/hosts /etc/hosts.bak
echo 标准输出
echo
命令用于打印字符串或变量的值,在shell脚本中极为常用,可以做出进度条效果,也可以打印彩色文字,详情自行百度
-
选项
-e
开启转义字符
# 转义:开启与不开启的区别 [root@God test]# echo "Hello World" Hello World [root@God test]# echo -e "Hello World" Hello World # echo 单引号与双引号的区别 [root@God test]# echo "$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin [root@God test]# echo '$PATH' $PATH [root@God test]# echo "Hello,World!" -bash: !": event not found [root@God test]# echo 'Hello,World!' Hello,World!
find / locate 文件搜索
find
支持各种姿势的查找方式,提供了相当多的查找条件,功能很强大。也正因如此它的选项也很多,有时使用起来也是比较耗费系统资源的,特别是直接从 /
下查找的时候,在实际使用中应尽量缩小查找目录范围,把/
替换成你指定的查找路径即可
-
语法
find [选项] 查找路径 查找条件 动作
-
选项
-L
跟随符号链接,加上此选项意味着会搜索链接指向的目录
-
条件
-name NAME
根据名称进行查找,支持通配符-mtime +-DAY
根据修改时间按天查找。如+7
代表7天(不含)前,-7
代表7天(含)内-mmin +-MIN
根据修改时间按分钟查找。-type TYPE
根据文件类型查找 TYPE的值有d
目录,f
普通文件,l
符号链接等-size +-SIZE
根据文件大小查找。如+100M
代表大于100MB的文件,-50M
代表小于50MB的文件-perm MODE
根据文件权限查找-maxdepth N
N为数字,表示查找深度-user USER
根据用户名查找-uid UID
根据用户ID查找-gid GID
根据组ID查找-empty
查找空文件或空目录,即大小为0bytes
-
动作
-delete
删除查找出来的文件,目录只能删除空目录-ok CMD {} ;
交互式执行命令,每次执行前会询问-exec CMD {} ;
直接执行命令,不询问- 说明
{}
表示的是查找出来的结果;
表示的是结束命令,因为;
在各个系统中会有不同的意义,所以在前面的是转义字符,为了防止系统出错。如果你不愿意
,使用
';'
结束也是可以的
# 查找下1层的目录 find / -maxdepth 1 -type d # 查找下2层的目录 find / -maxdepth 2 -type d # 根据名称精确查找 find / -name "restart_tomcat.sh" # 根据名称模糊查找 find / -name "*.log" # 根据修改时间查找 find / -name "*.log" -mtime +7 # 查找是否有权限为777的文件 find / -type f -perm 777 | xargs ls -l # 找到7天前的日志文件,直接将其删除 find / -type f -name '*.log' -mtime +7 -delete # 找到7天前的日志文件,并询问是否将其删除 find / -type f -name '*.log' -mtime +7 -ok rm -rf {} ; # 找到7天前的日志文件,直接将其删除 find / -type f -name '*.log' -mtime +7 -exec rm -rf {} ; # 使用 xrags 命令实现删除 find / -type f -name '*.log' -mtime +7 | xargs rm -rf
locate
命令用来查找文件或目录,要比find
命令快很多,原因在于它不搜索具体目录,而是通过/var/lib/mlocate/mlocate.db
自身创建的数据库进行搜索,这个数据库含有本地所有文件信息。每天自动更新一次库中的数据,有时刚创建的文件使用locate
搜索不到时就是因为库中的数据没有及时更新,为了避免这种情况,在使用locate
命令之前可以使用updatedb
命令手动更新。如果没有locate
命令,则需要安装一下yum -y install mlocate
-
语法
locate [选项] 查找条件 # 查找条件支持通配符和正则表达式
-
选项
-c
只显示找到的数量-i
忽略大小写-r
使用基础正则表达式--regex
使用扩展正则表达式
# 使用前最好先更新一下数据库 updatedb # 查找包含 myfile 的文件和目录 locate myfile # 查找以myfile开头的文件和目录 locate myfile* # 查找以myfile结尾的文件和目录 locate *myfile # 查找文件名为 1.txt 的文件 locate -r "/1.txt$"
free 查看内存使用
free
命令可以显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存
-
语法
free [选项]
-
选项
-k
以KB为单位进行显示-m
以MB为单位进行显示-g
以GB为单位进行显示-h
以人类可读的格式显示(K|M|G)-s N
N为数字,表示间隔描述,用于持续观察内存使用状况
# 3秒一刷新,显示内存使用情况 free -h -s 3
head 查看文件前面的内容
head
命令用于查看文件头部或行内头部的内容
-
语法
head [选项] 文件
-
选项
-n N
N为数字,表示前N行-c N
N为数字,表示行内的前N个字节。UTF-8编码中一个字母占1字节,一个汉字占3字节
# 显示前100行内容
head -n 100 /local/
# 显示前5个字节的内容
echo "Hello,World" | head -c 5
history 命令历史
history
命令用于记录和显示你在命令行敲过的每一条命令,相邻的重复命令默认会合并成一个。命令历史记录太多会让系统变得不安全,可以根据自己的需求自定义以下环境变量进行限制
# 记录命令历史的文件
HISTFILE=/root/.bash_history
# 记录命令历史的文件最大记录条数
HISTFILESIZE=1000
# 内存中命令历史的最大记录条数
HISTSIZE=1000
# 可以通过添加HISTTIMEFORMAT环境变量,记录命令执行时间
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
-
语法
history [选项]
-
选项
N
N为数字,显示最近执行过的N条命令-c
清空内存中的历史命令-r
将HISTFILE
设置的文件中的内容读取到内存-w
与-r
相反,把内存中的命令历史写入到文件中
# 查看命令历史 history # 执行第66条命令 !66 # 执行上一条命令 !!
ip 网络配置管理
ip
命令作为iproute2
工具包的核心命令,它是linux下管理网络和流量控制的工具包,旨在替代老牌的工具链net-tools
,即ifconfig, arp, route, netstat
等命令。net-tools
通过procfs(/proc)
和ioctl
系统调用去访问和改变内核网络配置,而iproute2
则通过netlink
套接字接口与内核通讯。抛开性能而言,net-tools
的用法给人的感觉是比较乱,而iproute2
的用户接口相对net-tools
来说相对来说,更加直观。比如,各种网络资源(如link、IP地址、路由和隧道等)均使用合适的对象抽象去定义,使得用户可使用一致的语法去管理不同的对象。如今很多系统管理员依然通过net-tools
配置管理网络,但自2001年起,Linux社区已经对齐停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools
,只支持iproute2
。如果你仍在使用net-tools
,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2
的阵营了。原因就在于使用iproute2
可以做很多net-tools
无法做到的事情。ip
命令非常强大,如果要完全运用的话估计能写一本书了。这里就随用随加了,需要深入自行查阅官方文档。
-
语法
ip [选项] 对象 {命令}
ip
命令的选项不支持连着写,每个都要加-
并用空格分隔
-
选项
-c
加上颜色显示-s
显示更多的信息
-
对象
address
IP协议设备link
网络设备route
路由表- 所有对象的名称均支持完整写法和缩写,如
address
可写成addr add a
# 查看IP地址 ip -c addr
kill 结束进程
kill
命令可以发送一个信号SIGTERM
默认为15给进程,可将指定程序终止。程序或工作的编号可以利用ps
命令和jobs
命令查看
-
语法
kill -信号 进程ID|工作ID
-
信号
1
启动被终止的进程,可让该PID重新读取自己的配置文件,类似重新启动2
相当于用键盘Ctrl+c来中断一个进程的进行9
强制中断一个进程的执行,如果该进程进行到一半,那么尚未完成的部分可能会有"半产品"产生,比如vim
会有.filename.swp
保留下来15
以正常的进程结束方式来结束进程17
相当于用键盘Ctrl+z来暂停一个进程的进行
# 强制结束PID为8886的进程 kill -9 8886 # 强制结束JOBNUMBER为2的进程 kill -9 %2 # 强制结束所有的以httpd启动的进程 killall -9 httpd
ln 创建链接(快捷方式)
ln
命令可以为文件或目录创建一个链接(link),链接可分为两种:硬链接和软链接。软链接相当于windows下的快捷方式
-
语法
ln [选项] 源 目标
-
选项
-s
创建为软链接
# 在家目录下创建一软连接 ln -s /etc/sysconfig/network-scripts/ifcfg-ens33 ~/ifcfg-ens33
ls 查看目录中的内容
ls
命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。ll
命令是系统自带的一个别名命令,主要用于进行长列表显示内容
-
语法
ls [选项] [文件或目录]
-
选项
-a
显示所有内容,包括隐藏文件-d
显示目录本身,而不是目录中的内容-t
按照时间进行排序,最新的在最上面-r
对排序进行翻转-l
使用长列表显示内容-h
以人类可读的格式显示(K|M|G)--full-time
显示精确时间
# 显示目录下的所有内容 ls -a # 快速找到修改时间最新的文件,最下面那个就是 ls -lrth
less 分页查看文件
less
是对文件或其他输出进行分页显示的工具,功能十分强大,而且不会一开始就加载整个文件,在性能和用法上比more
更加的有弹性。使用less
命令打开的内容可以使用各种功能按键来操作,个人感觉完全可以替代more
,所以有人说less is more
,相比于more
,我更喜欢用less
。
-
语法
less [选项] 文件
-
选项
-s
显示连续的空行为一个空行-N
显示行号-m
显示类似于more
命令的百分比-g
只标记最后搜索的关键词-i
搜索时忽略大小写
-
按键
h
查看帮助↑↓
向上或向下一行b
向上滚动一页 PageUpspace
向下滚动一页 PageDowng
移动到第一行G
移动到最后一行N g/G
N为数字,移动到第N行q/Q
退出/ KEYWORD
进入向下搜索模式,可根据关键字进行搜索,n
继续往下找,N
继续往上找& KEYWORD
输入关键字,可仅显示包含关键字的行F
类似于tail -f
,实时读取文件最新内容,按ctrl + c
停止
# 使用 less 命令查看文件 less -smN /etc/service # 使用 less 命令接收其他命令的标准输出 history | Dless
mv 剪切 / 重命名 文件或目录
mv
命令用来为文件或目录重命名或移动文件或目录(剪切)
-
语法
mv [选项] 源 目标
-
选项
-i
若指定目录已有同名文件,则先询问是否覆盖旧文件;-f
如果目标存在,直接覆盖不提示
# 移动文件/local/hosts.bak到/local目录下 mv /etc/hosts.bak /local # 重命名文件hosts.bak为hosts mv /etc/hosts.bak /etc/hosts
mkdir 创建目录
mkdir
命令用来创建目录
-
语法
mkdir [选项] 目录
-
选项
-m
创建目录的同时设置权限-p
如果父目录不存在,则创建
# 创建目录/local/script,如果目录/local不存在,会报错 mkdir /local/script # 创建目录/local/script,如果目录/local不存在,则创建 mkdir -p /local/script # 创建目录/local/script,如果目录/local不存在,则创建,并给script目录设定755的权限分数 mkdir -pm 755 /local/script
ps 查看进程
ps
命令用于显示当前进程的状态,这个状态是当前那些进程的快照,如果想要动态查看进程,请使用top
命令,常用来通过管道命令搭配grep
命令进行查询,然后通过kill
命令,删除不需要的进程
-
语法
ps [选项]
-
选项
-e
显示所有进程-f
显示全格式列表,增加 UID、PPID、C与STIME栏位的显示
# 根据关键字查找进程 ps -ef | grep tomcat
pwd 显示当前目录
pwd
用于显示当前所在的路径,加-P
可显示真实路径,而非链接路径
[root@God /]# ll -d /sbin
lrwxrwxrwx. 1 root root 8 Jun 21 11:20 /sbin -> usr/sbin
[root@God /]# cd sbin/
[root@God sbin]# pwd
/sbin
[root@God sbin]# pwd -P
/usr/sbin
passwd 修改密码
passwd
可以用来更改用户的密码,还可以锁定与解锁用户
-
语法
passwd [选项] 用户
-
选项
-d
删除密码-f
强迫用户下次登录时必须修改密码-w
设置密码到期前提前警告的天数-l
锁定账户-u
解锁账户-x
设置密码有效天数
# 修改当前用户的密码 passwd # 修改其他用户的密码,root用户修改其他用户密码,不需要提供原密码 passwd jack # 锁定用户 passwd -l jack # 解锁锁定的用户 passwd -u jack
rm 删除文件或目录
rm
用于删除文件或目录,生产服务器执行删除命令前一定要备份
-
语法
rm [选项] 文件或目录
-
选项
-i
删除前询问-f
直接删除,不确认-r
删除目录时使用,否则无法删除目录
# 删除目录下所有内容,并且不经过确认,慎用 rm -rf /local # rm 删除目录下所有隐藏文件 rm /local/.* # rmdir 只能删除空目录,目录不为空无法删除 rmdir /local
su 切换用户
su
命令用于切换当前用户,除了root外,需要输入该用户的密码
su
命令和su -
命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误。su
切换成root用户以后,pwd
一下,发现工作目录仍然是普通用户的工作目录;而用su -
命令切换以后,工作目录变成root的工作目录了。用echo $PATH
命令看一下su
和su -
以后的环境变量有何不同。以此类推,要从当前用户切换到其它用户也一样,应该使用su -
命令。
# 切换到用户执行命令,命令执行完在自动切换回来
[root@God ~]# su jet -c ls
ls: cannot open directory .: Permission denied
[root@God ~]# su - jet -c ls
1.txt
stat 查看文件详细信息
stat
命令可以查看文件的详细信息
-
语法
stat [选项] 文件
-
选项
-c FORMAT
格式化显示 FORMAT的取值可以查看帮助
# 查看文件的权限 [root@God ~]# stat -c %A testfile -rw-r--r-- [root@God ~]# stat -c %a testdir/ 755
sort 排序 / uniq 去重
sort
命令用于对文本内容或者是对其他命令的输出进行排序显示。
-
语法
sort [选项] 文件
-
选项
-u
合并重复的行-r
反向排序-g
按照数字大小排序-t SEP
按照SEP
进行分列,默认为空格-k N
N为数字,表示根据第N列排序
# 根据进程号排序查看进程 ps -ef | sort -rgk 2
uniq
命令用于去除重复的行,一般与sort
搭配使用
-
语法
uniq [选项] 源数据
-
选项
-c
统计重复行出现的次数-d
仅显示重复出现的行-u
仅显示出现一次的行
# 统计IP地址出现的次数 cat ip.txt | sort | uniq -c
split 分割文件
split
可以将大文件分割成若干个小文件
-
语法
split [选项] 文件 前缀
-
选项
-d
给文件添加数字后缀-b SIZE
根据大小进行分割,可以添加单位(b|k|m|g)等-l N
N为数字表示行数,按照行数进行分割
# 将catalina.out按照300m的大小进行分割,分割的文件会以catalog00,catalog01,catalog02的方式来建立 split -db 300m catalina.out catalog # 将分割后的若干个小文件在还原 more catalog* >> catalina.out
tar 打包
tar
命令用来打包或压缩文件,选项相当多。一般只打包不压缩的文件以.tar
结尾,通过gzip
进行打包压缩的文件以.tar.gz
结尾,通过bzip2
进行打包压缩的文件以.tar.bz2
结尾
-
语法
tar [选项] 压缩文件名 操作目标
-
选项
-c
创建打包文件-x
释放打包文件-t
查看包文件内容-v
显示详细过程-z
使用gzip
的方式进行压缩或解压-j
使用bzip2
的方式进行压缩或解压-h
同时打包链接指向的文件-C
指定解压目录
# 将目录/local进行打包并使用gzip进行压缩 tar -zcvf local.tar.gz /local # 将local.tar.gz进行解压并将打包文件释放到当前目录 tar -zxvf local.tar.gz # 仅解压指定的档案local/script到当前工作目录 tar -zxvf local.tar.gz local/script # 将目录/local进行打包并使用gzip进行压缩,但排除以.log结尾的文件 tar -zcvf local.tar.gz --exclude=*.log /local
top 动态查看进程
top
命令可以实时的查看系统运行的整体情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。
-
语法
top [选项]
-
选项
-d N
N为数字,表示刷新秒数间隔-b
以追加的方式显示结果-n N
N为数字,表示刷新次数-p PIDLIST
只显示指定PID
的进程,多个PID
之间用,
分隔-u USER
只显示指定用户的进程
# 以1秒的时间间隔来动态查看进程 top -d 1 # 查看进程ID为 1 12 38 的进程信息 top -d 1 -p 1,12,38
tail 查看文件末尾内容
tail
命令和head
命令相反,用于查看文件末尾的内容,而且可以实时刷新
-
语法
tail [选项] 文件
-
选项
-n N
N为数字,表示末尾N行-c N
N为数字,表示行内的末尾的N个字节。UTF-8编码中一个字母占1字节,一个汉字占3字节-f
实时刷新显示文件内容
# 实时查看文件/local/mylog.log末尾100行的内容 tail -100f /local/mylog.log
touch 修改文件的时间属性或创建空文件
touch
命令用于修改文件或者目录的时间属性,若文件不存在,则创建一个新的空文件。Linux下的三个时间属性概念分别是atime(access time)
读取时间 、 mtime(modify time)
修改时间、ctime(change time)
,注意ctime
不是create time
。实际工作中使用touch
修改这些时间属性的需求极少,相反大多数是用来创建一个或多个空文件。有点喧宾夺主的意思~
-
语法
touch [选项] 文件或目录
-
选项
-a
修改文件或目录的读取时间-m
修改文件或目录的修改时间-t STAMP
指定时间戳,格式为[YYYY]MMDDhhmm[.ss]
-c
如果文件不存在,不要创建文件
# 使用{}可一次性创建多个空文件,如 {1..10} {a..z} {1,3,5,7,9} # 创建一个空文件 touch olympic.txt # 创建99空文件 touch olympic{1..99}.txt # 修改文件的修改时间 mtime touch -cmt 200808080808.08 olympic.txt
useradd / groupadd 用户和组管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的密码。用户在登录时键入正确的用户名和密码后,就能够进入系统和自己的家目录。
-
添加用户
# 添加一个普通用户,不指定组的话会自动创建一个同名组 useradd jack # 添加一个普通用户,并指定现有的组(组必须先存在) useradd -g root jet # 添加一个系统用户,并不让其登录 -r 代表系统用户,系统用户不会有家目录 useradd -r -s /sbin/nologin rose
-
删除用户
# 只删除用户 userdel jack # 删除用户,并删除该用户的家目录(包括目录中的内容) # 家目录外的用户所属文件会替换成用户ID,当有新的用户使用这个ID时,该文件自动归属新用户 userdel -r jack
-
修改用户
# 修改用户的初始用户组,通过名称修改 usermod -g root jack # 修改用户的初始用户组,通过GID修改 usermod -g 888 jack # 相当于passwd -l,锁定用户 usermod -L jack # 相当于passwd -u,解除锁定 usermod -U jack # 禁止用户登录 usermod -s /sbin/nologin jack # 修改用户ID usermod -u 888 jack
-
查看用户
# 查看当前用户 id # 查看当前登录的用户 w # 查看所有的用户 cat /etc/passwd cat /etc/passwd | cut -d ':' -f 1
-
添加用户组
# 建立一个一般用户组 groupadd mygroup # 建立一个系统用户组 groupadd -r admingroup
-
删除用户组
# 删除用户组 groupdel admingroup
-
修改用户组
# 修改组ID groupmod -g 888 mygroup # 修改组名称 CIA为新名称 groupmod -n CIA mygroup
-
查看用户组
cat /etc/group
vi / vim 文本编辑器
vi
和vim
用法基本一致,它们的关系有些类似于Windows下notepad与notepad++的关系,不过vim
有时默认没有安装,需要yum -y install vim
手动安装一下。因为vim
相比vi
,功能更强大,又有语法高亮等功能。所以个人还是习惯并推荐使用vim
。下面介绍的vim
的使用方法,通常在vi
上同样适用,网上介绍vim
使用的方式基本上就是说在三种模式下使用总结,即命令模式、输入模式、底线命令模式,介绍十分详尽,简直快把整个vim
的帮助给弄下来了。我这里介绍的常用操作为单位,不是很全,但日常使用应该足够了。
-
打开文件
# 打开一个文件 vim /tmp/yum.log # 按 ctrl+w 然后按 上下左右键 可在窗口之间切换 # 打开多个文件,纵向窗口分割,左右一边一个窗口 vim -O /etc/hosts /etc/hosts.bak # 打开多个文件,横向窗口分割,上下一遍一个窗口 vim -o /etc/hosts /etc/hosts.bak
-
编辑文本
- 打开文件后,按
i
键可在光标处插入内容;按o
键可在光标处的下一行插入内容。此时底部会显示-- INSERT --
字样,按Esc
键可退出编辑模式
- 打开文件后,按
-
快速定位
: set nu
显示行号, 按:
然后输入set nu
敲回车: set nonu
取消显示行号: N
N为数字,表示行号,按:
然后输入11
,敲回车即可快速移动光标到第11行,输入$
则移动到最后一行N%
N为数字,表示百分比,比如按58
然后按一下%
,即可移动光标到文件58%的部分H | M | L
按这三个键可快速移动光标到屏幕的顶部、中间、底部位置ctrl+u
往上翻半页ctrl+d
往下翻半页↑↓←→
移动光标Home/End
移动光标到行首或行末PageUp/PageDown
翻页
-
快速编辑
N yy
N为数字,复制光标所在行以下的N行,默认N为1,即当前行。如复制 20 行,就按20,然后按yy
就复制了N dd
和yy
用法一样,只不过它是剪切。所以它也能当删除使用p
在光标所在行的下一行粘贴刚复制或剪切的内容u
按u
键,撤销刚才的操作ctrl+r
反撤销v
进入视图模式,可通过上下左右移动光标选择一片文本,此时底部会显示-- VISUAL --
字样(按Esc
键可退出视图模式)然后按y
复制或按d
剪切,按p
在光标处后面粘贴V
和v
一样,只不过是以行为单位ctrl+v
和v
一样,只不过是以列为单位,类似于在notepad++中,按住Alt选文字
-
查找
/ KEYWORD
按/
进入查找,在底部/
的后面输入想查找的内容,按回车搜索,然后按n
往下继续查找,按N
往上查找
-
替换
:%s#OLD#NEW#gic
个人习惯先按:%s###g
,然后移动光标到OLD位置输入要替换的字符串,在移动光标到NEW位置,输入新字符串,敲回车进行文字替换,%
表示全文,不加代表当前行,用10,20
替换百分号则表示替换10到20行;后面的gic
,g
表示全局替换不加只替换每行的第一个;i
表示忽略大小写,c
表示在替换前进行确认,需要哪个加哪个
-
退出和保存
Esc
当你进入编辑模式、命令模式等其他模式时,都可按Esc
键退出:w
保存:wq
保存并退出q!
强制退出不保存
wc 统计字数行数
wc
命令可以统计字节数、行数、单词数
-
语法
wc [选项] 文件
-
选项
-l
统计行数-c
统计字节数-m
统计字符数
# 依次列出/etc/passwd中的 行数、字数、字符数 wc /etc/passwd # 查看有多少个进程数 ps -ef | wc -l
xargs 参数传递
xargs
是给命令传递参数的一个过滤器,也是组合多个命令的一个工具,它可以将管道或标准输入的数据转换成命令行参数,也能够从文件的输出中读取数据。它能够捕获一个命令的输出,然后传递给另外一个命令,一般与管道在一起使用
# 找到修改日期在7天前的日志,并将其删除
find /local/server -name "*.log" -mtime +7 | xargs rm -rf
yum 红帽系列包管理工具
yum
,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器,适用于Redhat系列的系统。用python写成,yum
的宗旨是自动化地升级,安装/移除rpm
包,收集rpm
包的相关信息,检查依赖性并自动提示用户解决。yum
主要功能是更方便的添加/删除/更新rpm
包,自动解决包的依赖性问题,便于管理大量系统的更新问题。yum
可以同时配置多个资源库(Repository),简洁的配置文件(/etc/yum.conf
),自动解决增加或删除rpm
包时遇到的依赖性问题。
-
语法
yum [选项] 命令 [包名]
-
选项
-y
对所有的确认都回答yes
-
命令
install PACKAGE
安装包,PACKAGE替换成要安装的包名update PACKAGE
更新包remove PACKAGE
卸载包
# 安装 vim yum -y install vim
zip / unzip 压缩与解压
zip
是个广泛使用的压缩程序,压缩后的文件后缀名为.zip
# 将当前目录下所有txt文本压缩在一起
zip txt.zip *.txt
# 将目录/local压缩成local.zip文件
zip -r local.zip /local
# 将local.zip解压缩到指定目录,不加-d选项,则解压到当前目录
unzip local.zip -d ~/