Linux基础命令
一. 常用命令
1.1 打包压缩与搜索命令
- tar命令:
tar 命令用于对文件进行打包压缩或解压
eg:压缩文件tar -czvf etc.tar.gz /etc、解压文件tar xzvf etc.tar.gz -C /root/etc
- grep命令:
grep 命令用于在文本中执行关键词搜索,并显示匹配的结果
eg:grep /sbin/nologin /etc/passwd
- find命令:
find 命令用于按照指定条件来查找文件
eg:find /etc -name "host*" -print
1.2 文本文件编辑命令
- cat命令:
cat 命令用于查看纯文本文件,内容较少时使用
eg:cat -n test.txt
- more命令:
more 命令用于查看纯文本文件(内容较多的),more 命令会在最下面使用百分比的形式来提示您已经阅读了多少内容,您还可以使用空格键或回车键向下翻页。
eg:more test.txt
- head命令:
head 命令用于查看纯文本文档的前N行
eg:head -n 20 initial-setup-ks.cfg
- tail命令:
tail 命令用于查看纯文本文档的后N行或持续刷新内容
eg:tail -f /var/log/messages
- tr命令:
tr 命令用于替换文本文件中的字符
eg:cat anaconda-ks.cfg | tr [a-z] [A-Z]
- wc命令:
wc 命令用于统计指定文本的行数、字数、字节数
eg:wc -l /etc/passwd
- stat命令:
stat 命令用于查看文件的具体存储信息和时间等信息,stat 命令可以用于查看文件的存储信息和时间等信息,命令 stat anaconda-ks.cfg 会显示出文件的三种时间状态(已加粗):Access、Modify、Change。
eg:stat anaconda-ks.cfg
- cut命令:
cut 命令用于按“列”提取文本字符
eg:cut -d: -f1 /etc/passwd
- diff命令:
diff 命令用于比较多个文本文件的差异,在使用 diff 命令时,不仅可以使用 --brief 参数来确认两个文件是否不同,还可以使用 -c 参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。
eg:diff --brief diff_A.txt diff_B.txt、diff -c diff_A.txt diff_B.txt
1.3 文件目录管理命令
- touch命令:
touch 命令用于创建空白文件或设置文件的时间,设置文件内容的修改时间(mtime)、文件权限或属性的更改时间(ctime)与文件的读取时间(atime)上面。
eg:touch -d "2017-05-04 15:44" anaconda-ks.cfg、touch anaconda-ks.cfg
- mkdir命令:
mkdir 命令用于创建空白的目录
eg:mkdir linuxprobe、mkdir -p a/b/c/d/e
- cp命令:
cp 命令用于复制文件或目录
eg:cp install.log x.log
- mv命令:
mv 命令用于剪切文件或将文件重命名
eg:mv x.log linux.log
- rm命令:
rm 命令用于删除文件或目录
eg:rm install.log
- dd命令:
dd 命令用于按照指定大小和个数的数据块来复制文件或转换文件
eg:dd if=/dev/zero of=560_file count=1 bs=560M
- file命令:
file 命令用于查看文件的类型
eg:file anaconda-ks.cfg
1.4 系统状态检测命令
-
sosreport命令:
sosreport 命令用于收集系统配置及架构信息并输出诊断文档,格式为 sosreport。当 Linux 系统出现故障需要联系技术支持人员时,大多数时候都要先使用这个命令来简单收集系统的运行状态和服务配置信息,以便让技术支持人员能够远程解决一些小问题,亦或让他们能提前了解某些复杂问题。 -
history命令:
history 命令用于显示历史执行过的命令 -
last命令:
last 命令用于查看所有系统的登录记录 -
who命令:
who 用于查看当前登入主机的用户终端信息 -
free命令:
free 用于显示当前系统中内存的使用量信息 -
uptime命令:
uptime 用于查看系统的负载信息 -
uname 命令:
uname 命令用于查看系统内核与系统版本等信息,一般会固定搭配上 -a 参数来完整地查看当前系统的内核名称、主机名、内核发行版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称等信息。 -
ifconfig命令:
ifconfig 命令用于获取网卡配置与网络状态等信息
1.5 常用系统工作命令
- echo命令:
echo 命令用于在终端输出字符串或变量提取后的值
eg:echo $SHELL
-
date命令:
date 命令用于显示及设置系统的时间或日期 -
reboot命令:
reboot 命令用于重启系统 -
poweroff命令:
poweroff 命令用于关闭系统 -
wget命令:
wget 命令用于在终端中下载网络文件
eg:wget http://www.linuxprobe.com/docs/LinuxProbe.pdf
-
ps命令:
ps 命令用于查看系统中的进程状态 -
top命令:
top 命令用于动态地监视进程活动与系统负载等信息 -
pidof命令:
pidof 命令用于查询某个指定服务进程的 PID 值
eg:pidof sshd
- kill命令:
kill 命令用于终止某个指定 PID 的服务进程
eg:kill 2156
- killall命令:
killall 命令用于终止某个指定名称的服务所对应的全部进程
eg:killall httpd
二. 基础命令
2.1 输出重定向:
输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中
eg:echo "My Name Is WuKun" >> test.txt、ls -l test.txt >> test.txt
2.2 管道命令符(|):
把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入
eg:grep "/sbin/nologin" /etc/passwd | wc -l
2.3 命令行的通配符:
通配符就是通用的匹配信息的符号,比如星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。
2.4 常用的转义字符:
- 反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
- 单引号(’’):转义其中所有的变量为单纯的字符串。
- 双引号(""):保留其中的变量属性,不进行转义处理。
- 反引号(``):把其中的命令执行后返回结果。
2.5 Vim文本编辑器:
- 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
- 输入模式:正常的文本录入。
- 末行模式:保存或退出文档,以及设置编辑环境。
- 运行原理:在每次运行 Vim 编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在 Vim 中,无法直接从输入模式切换到末行模式。
- 命令模式常用命令:
命令 作用
dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标处开始的5行
yy 复制光标所在整行
5yy 复制从光标处开始的5行
n 显示搜索命令定位到的下一个字符串
N 显示搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面
- 末行模式常用命令:
命令 作用
:w 保存
:q 退出
:q! 强制退出(放弃对文档的修改内容)
:wq! 强制保存退出
:set nu 显示行号
:set nonu 不显示行号
:命令 执行该命令
:整数 跳转到该行
:s/one/two 将当前光标所在行的第一个 one 替换成 two
:s/one/two/g 将当前光标所在行的所有 one 替换成 two
:%s/one/two/g 将全文中的所有 one 替换成 two
?字符串 在文本中从下至上搜索该字符串
/字符串 在文本中从上至下搜索该字符串
2.6 Shell脚本:
- 可以将 Shell 终端解释器当作人与计算机硬件之间的“翻译官”,它作为用户与 Linux 系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。
- Shell脚本命令的工作方式:
交互式(Interactive):用户每输入一条命令就立即执行。
批处理(Batch):由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本中诸多的命令。
- 运行Shell脚本的方式:
bash example.sh
./example.sh:第二种运行脚本程序的方法是通过输入完整路径的方式来执行。但默认会因为权限不足而提示报错信息,此时只需要为脚本文件增加执行权限即可
- 接收用户的参数:
eg:[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "当前脚本名称为 $0"
echo "总共有 $# 个参数,分别是 $*。"
echo "第1个参数为 $1,第5个为 $5。"
[root@linuxprobe ~]# sh example.sh one two three four five six
当前脚本名称为 example.sh
总共有6个参数,分别是 one two three four five six。
第1个参数为 one,第5个为 five。
- 判断用户的参数:
条件测试语句可分为四种:
文件测试语句;
逻辑测试语句;
整数值比较语句;
字符串比较语句。
文件测试所用的参数:
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
整数比较运算符:
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
常见的字符串比较符:
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
2.7 流程控制语句
- if 条件测试语句示例:
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi
- for循环条件语句示例:
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done
- while 条件循环语句示例:
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
- case 条件测试语句示例:
#!/bin/bash
read -p "请输入一个字符,并按 Enter 键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac
2.8 计划任务服务程序
-
一次性计划任务:
at 时间:设置一次性计划任务时间,之后可以设置计划内容
at -l:显示所有的一次性计划任务
atrm 任务序号:删除一次性计划任务 -
计划任务:
创建、编辑计划任务的命令为“crontab -e”,
查看当前计划任务的命令为“crontab -l”,
删除某条计划任务的命令为“crontab -r” -
crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
2.9 用户身份与能力
-
在 Linux 系统中,UID 就相当于我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。
root用户之所以是超级管理员,是因为它的的用户身份为0,系统用户和普通用户的用户身份有有其范围。 -
在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。
一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。 -
useradd命令:
用于创建新的用户,格式为“useradd [选项] 用户名”。
可以使用 useradd 命令创建用户账户。使用该命令创建用户账户时,默认的用户家目录会被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,
而且默认会创建一个与该用户同名的基本用户组。默认属性可以通过下面属性的更改而变化。
-d 指定用户的家目录(默认为/home/username)
-e 账户的到期时间,格式为 YYYY-MM-DD.
-u 指定该用户的默认 UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认 Shell 解释器
使用示例:
useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
-
groupadd命令:
groupadd 命令用于创建用户组,格式为“groupadd [选项] 群组名”。 -
usermod命令:
usermod 命令用于修改用户的属性,格式为“usermod [选项] 用户名”。
Linux 系统中的一切都是文件,因此在系统中创建用户也就是修改配置文件的过程。用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用户参数项目,
也可以用 usermod 命令修改已经创建的用户信息,诸如用户的 UID、基本/扩展用户组、默认终端等。
usermod中的参数及作用:
-c 填写用户账户的备注信息
-d -m 参数 -m 与参数 -d 连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e 账户的到期时间,格式为 YYYY-MM-DD
-g 变更所属用户组
-G 变更扩展用户组
-L 锁定用户禁止其登录系统
-U 解锁用户,允许其登录系统
-s 变更默认终端
-u 修改用户的 UID
- passwd命令:
passwd 命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。
passwd命令中的参数及作用:
-l 锁定用户,禁止其登录
-u 解除锁定,允许用户登录
--stdin 允许通过标准输入修改用户密码,如 echo "NewPassWord" \
-d 使该用户可用空密码登录系统
-e 强制用户在下次登录时修改密码
-S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称
- userdel命令:
userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。
userdel命令中的参数及作用:
-f 强制删除用户
-r 同时删除用户及用户家目录
2.10 文件
权限与归属:
尽管在 Linux 系统中一切都是文件,但是每个文件的类型不尽相同,因此 Linux 系统使用了不同的字符来加以区分,常见的字符如下所示。
-:普通文件。
d:目录文件。
l:链接文件。
b:块设备文件。
c:字符设备文件。
p:管道文件。
通过 ls 命令查看到的文件属性信息
包含了文件的类型、访问权限、所有者(属主)、所属组(属组)、占用的磁盘大小、修改时间和文件名称等信息。
特殊权限:
-
SUID :是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效,如尚方宝剑效果)
-
SGID:第一种功能是参考 SUID 而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。第二个功能,即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
-
SBIT:SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。与前面所讲的 SUID 和 SGID 权限显示方法不同,当目录被设置 SBIT 特殊权限位后,文件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T,原本有 x 执行权限则会写成 t,原本没有 x 执行权限则会被写成 T,对应的参数 o+t 代表设置 SBIT 粘滞位权限:chmod -R o+t linux/
-
chmod命令:chmod 命令是一个非常实用的命令,能够用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”。eg:chmod 760 test
-
chown命令:设置文件或目录的所有者和所属组,这里使用的命令为 chown,其格式为“chown [参数] 所有者:所属组 文件或目录名称”。eg:chown root:bin test
-
chmod 和 chown 命令是用于修改文件属性和权限的最常用命令,它们还有一个特别的共性,就是针对目录进行操作时需要加上大写参数 -R 来表示递归操作,即对目录内所有的文件进行整体操作。
隐藏属性:
-
chattr命令
用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。
eg:chattr +a linuxprobe -
lsattr命令
lsattr 命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。在 Linux 系统中,文件的隐藏权限必须使用 lsattr 命令来查看。
eg:lsattr linuxprobe -
访问控制列表(ACL):
定义:如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。通俗来讲,基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。
另外,如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。 -
setfacl命令:
setfacl 命令用于管理文件的 ACL 规则,格式为“setfacl [参数] 文件名称”。文件的 ACL 提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,
使用 setfacl 命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用 -R 递归参数;针对普通文件则使用 -m 参数;
如果想要删除某个文件的 ACL,则可以使用 -b 参数。
eg:setfacl -Rm u:linux-wukun:rwx /root -
getfacl命令:
getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称”。
2.11 sudo命令功能
-
限制用户执行指定的命令:
-
记录用户执行的每一条命令;
-
配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
-
验证密码的后5分钟内(默认值)无须再让用户再次验证密码。