参考系列文章:
https://blog.youkuaiyun.com/wirelessqa/column/info/linuxcommad/2
https://www.cnblogs.com/cisum/category/1106231.html
可以迅速了解常用命令文章:http://www.cnblogs.com/laov/p/3541414.html#zhiling
Linux命令大全:
http://man.linuxde.net/
https://www.runoob.com/linux/linux-command-manual.html
1.PING
PING (Packet Internet Grope),因特网包探索器
检测网络的连通性:ping可以测试计算机名和计算机的 ip 地址,验证与远程计算机的连接,通过将 icmp 回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接,该命令只有在安装了 tcp/ip 协议后才可以使用。
TTL(Time To Live):生存时间,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
来看一个实例:
// -a 将地址解析为计算机名
ping -a www.baidu.com
64 bytes:表示本次传送的ICMP包的大小,此值为预设值
icmp_seq=0:ICMP所侦测的次数,第一次为0,第二次为1,依次类推
ttl=52:生存时间
time:响应时间
// -c <完成次数> 设置完成要求回应的次数
// -i <间隔秒数> 指定收发信息的间隔时间
ping -c 10 -i 1 www.baidu.com
2.shell数据重定向
linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,通过这个数字可以实现文件的读写操作。
linux启动后,会默认打开3个文件描述符,分别是:标准输入:0 标准输出:1 标准错误输出:2。
输入指令:输入可以从键盘或文件中得到
指令执行:如果成功会把正确的输出到屏幕(默认)或文件中,如果错误会把错误的输出到屏幕(默认)或文件中
如果不想默认输出到屏幕上那就需要重定向啦!
Linux下的输入输出操作符:
(1)标准输入(stdin):0,使用<或<<
(2)正确输出(stdout):1,使用>或>>
(3)错误输出(stderr):2,使用2>或2>>
> 将标准输出重定向到指定文件,是会覆盖
>> 将标准输出重定向到指定文件,是追加
2> 将错误输出重定向到指定文件,且会覆盖
2>> 将错误输出重定向到指定文件,且会追加
&> 将错误/正确输出重定向到指定文件夹,且会覆盖
&>> 将错误/正确输出重定向到指定文件夹,且会追加
输入重定向:
是指不使用系统提供的标准输入端口,而进行重新的指定。换言之,输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(重定向简单理解就是使用 “<”符来修改标准输入设备)
比如,默认情况下,cat命令会接受默认标准输入设备键盘的输入,并显示到控制台,但是可以通过“<”符号修改标准输入设备,指定文件作为标准输入设备,那么cat命令将指定的文件作为输入设备,并将文件中的内容读取并显示到控制台。
命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入。执行这个命令,将标准输入0,与文件或设备绑定。将由它进行输入。
command-line [n] <file或文件描述符&设备
cat < /etc/passwd # 而输入重定向,cat < /etc/passwd ,它是将passwd文件指定为输入设备,并将内容显示到控制台。
参考文章:
https://jingyan.baidu.com/article/ff411625e40b2f12e48237ba.html
https://www.jianshu.com/p/e7e5a073e11f
https://blog.youkuaiyun.com/world_zheng/article/details/83110029
3.管道命令
管道命令操作符是:”|”,它只能处理经由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入。
【指令1】正确输出,作为【指令2】的输入 然后【指令2】的输出作为【指令3】的输入 ,【指令3】输出就会直接显示在屏幕上面了。通过管道之后【指令1】和【指令2】的正确输出不显示在屏幕上面
//读出logcat.log文件的内容,通过管道转发给grep作为输入内容,过滤包含‘Displayed’的行
cat logcat.log | grep -n 'Displayed'
我们再介绍一些常用命令:
cat -连接文件
sort -排序文本行
uniq -报道或省略重复行
grep -打印匹配行
wc -打印文件中换行符,字,和字节个数
head 输出文件第一部分
tail -输出文件最后一部分
tee -从标准输入读取数据,并同时写到标准输出和文件
cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容。
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
head命令用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。
tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。
tee命令用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。
//sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
//uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。
sort file.txt | uniq
//输出包含匹配字符串的行数 -n 选项:
cat file_name | grep "text" -n
管道命令与重定向区别
1.左边的命令应该有标准输出 | 右边的命令应该接受标准输入
左边的命令应该有标准输出 > 右边只能是文件
左边的命令应该需要标准输入 < 右边只能是文件
2.管道触发两个子进程执行”|”两边的程序;而重定向是在一个进程内执行
【提醒注意】:
一般如果是命令间传递参数,建议用管道,如果处理输出结果需要重定向到文件,建议用重定向输出。
4.read命令
read命令从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量REPLY。
1.简单读取
read 1987name #等待读取输入,直到回车后表示输入完毕,并将输入赋值给变量answer
echo $1987name #打印变量
read one two three
1 2 3 #在控制台输入1 2 3,它们之间用空格隔开。
echo "one = $one, two = $two, three = $three"
one = 1, two = 2, three = 3
2.跟上提示-p
read -p "Enter your name: " #输出文本提示,同时等待输入,并将结果赋值给REPLY。
Enter you name: stephen #在提示文本之后输入stephen
echo $REPLY
stephen
read -p 'enter your name' yourname
3.计时输入read -t(如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。)
read -t 10 -p "请在10秒内输入毕小朋博客的地址: " website
4.计时输入read -n数量(当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量)
read -n1 -p "你喜欢老毕的博客吗[y/n]? " answer
5.隐藏输入read -s
read -s -p "请输入你的密码: " pass
5.date
1.当前日期
data
2.%a :显示星期简写
date +%a
二
3.%A :显示完整星期(Sunday..Saturday)
date +%A
星期二
6.type命令
type命令用来显示指定命令的类型。一个命令的类型可以是如下几种:
1.alias 别名
2.keyword 关键字,Shell保留字
3.function 函数,Shell函数
4.builtin 内建命令,Shell内建命令
5.file 文件,磁盘文件,外部命令
6.unfound 没有找到
它是Linux系统的一种自省机制,知道了是哪种类型,我们就可以针对性的获取帮助。比如:
内建命令可以用help命令来获取帮助,外部命令用man或者info来获取帮助。
常用参数
type命令的基本使用方式就是直接跟上命令名字。
type -a可以显示所有可能的类型,比如有些命令如pwd是shell内建命令,也可以是外部命令。
type -p只返回外部命令的信息,相当于which命令。
type -f只返回shell函数的信息。
type -t 只返回指定类型的信息。
7.time命令
Linux中time命令,我们经常用来计算某个程序的运行耗时(real),用户态cpu耗时(user),系统态cpu耗时(sys)
time ls
anaconda-ks.cfg install.log install.log.syslog satools text
real 0m0.009s
user 0m0.002s
sys 0m0.007s
输出的信息分别显示了该命令所花费的real时间、user时间和sys时间。
用户态(User Mode):
在用户态,代码不具备直接访问硬件或者访问内存的能力,而必须借助操作系统提供的可靠的,底层的APIs来访问硬件或者内存。由于这种隔离带来的保护作用,用户态的代码崩溃(Crash),系统是可以恢复的。我们大多数的代码都是运行在用户态的。
核心态(Kernel Mode):
在内核态,代码拥有完全的,不受任何限制的访问底层硬件的能力。可以执行任意的CPU指令,访问任意的内存地址。内核态通常情况下,都是为那些最底层的,由操作系统提供的,可信可靠的代码来运行的。内核态的代码崩溃将是灾难性的,它会影响到整个系统。
8.chown命令
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
chown [ -f ] [ -h ] [ -R ] Owner [ :Group ] { File ... | Directory ... }
chown -R [ -f ] [ -H | -L | -P ] Owner [ :Group ] { File ... | Directory … }
chown 命令将 File 参数指定的文件的所有者更改为 Owner 参数指定的用户。
Owner 参数的值可以是可在 /etc/passwd 文件中找到的用户标识或登录名。还可以选择性地指定组。
Group 参数的值可以是可在 /etc/group 文件中找到的组标识或组名。
注意:
1.只有 root 用户可以更改文件的所有者。 只在您是 root 用户或拥有该文件的情况下才可以更改文件的组。
2.如果拥有文件但不是 root 用户,则只可以将组更改为您是其成员的组。
3.虽然 -H、-L 和 -P 标志是互斥的,指定不止一个也不认为是错误。
1.更改文件testchown.txt的所有者
chown bixiaopeng testchown.txt
ls -al testchown.txt
-rw-rw-r-- 1 bixiaopeng bixiaopeng 22 8��� 14 08:08 testchown.txt
2.将文件夹testfile中所有文件的所有者和组更改为用户bixiaopeng 和组sambashare
chown -R bixiaopeng:sambashare testfile
ls -al testfile
-rw-rw-r-- 1 bixiaopeng sambashare 536870912 6��� 16 01:30 testfile
9.用户账号的管理
实现用户账号的管理,要完成的工作主要有如下几个方面:
1.用户账号的添加、删除与修改。
2.用户口令的管理。
3.用户组的管理。
/etc/passwd 存储当前系统中所有用户的信息
/etc/group存储当前系统中所有用户组信息
/etc/group 存储当前系统中所有用户组信息
显示信息:
Group X 123 abc,def,xyz
组名称 组密码占位符 组编号 组中用户列表
注:root组编号是0,1-499是系统预留组编号,用户手动创建的是从500开始
/etc/gshadow 存储当前系统中用户组的密码信息
Group * abc,def,xyz
组名称 组密码 组管理者 组中用户列表
组密码显示为*,表示密码为空,组管理者为空,说明都可以管理该用户组。
/etc/passwd 存储当前系统中所有用户的信息
root:x:0:0:root:/root:/bin/bash
-user: x : 123 : 456 : xxxx :/home/user :/bin/bash
用户名 密码占位符 用户编号 用户组编号 用户注释信息 用户主目录 shell类型
/etc/shadow 存储当前系统所有用户的密码信息
daemon: *: 15937:0:99999:7:::
用户名 密码 用户创建时间 用户信息上次被修改的时间
用户账号的管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
用户的基本命令:
1.创建用户:
useradd -g test1 sdf(test1是用户组,没有指定用户组名称,会默认创建和用户名称一样的用户组)
创建用户的同时,指定文件夹:(不指定是文件夹和用户同名)
useradd -d /home/xxx imooc
给用户添加备注:
usermod -c beizhu test1
改变用户名:
usermod -l test2 test1
给改变后的用户指定文件夹:
usermod -d /home/test2 test2
修改用户的所属用户组:
usermod -g 要切换的用户组名 用户名
2.删除用户:
userdel test2(但是不会删除用户的个人资料、文件夹之类)
删除用户(连带资料等):
userdel -r test3
禁止root之外的其他用户进入服务器:
touch /etc/nologin (创建这个空文件就可以达到目的)
用户组的管理
用户组的基本命令:
创建用户组:
groupadd test
修改用户组名称:
groupmod -n test1 test
修改主编号:
groupmod -g 668 test1
创建用户组同时指定用户编号:
group -g 888 test2
删除用户组:(必须先删除用户,才能删除用户组)
groupdel test2
其他一些常用命令
su 用户名 //切换到其他用户下
su 后面什么也不接 //表示切换到root用户下(注:普通用户进其他用户需要密码,root用户进普通用户不需要密码)
whoami //显示当前登录用户名
id 用户名 //显示指定用户信息,包括用户编号、用户编号、主要组编号及名称、附属组列表
groups 用户名 //显示用户所在的所有组,包括主要组和附属组
chfn 用户名 //设置用户资料,依次输入用户资料
finger 用户名 //显示用户详细资料
10.配置环境变量
环境变量:
1.永久变量:
通过修改配置文件,配置之后变量永久生效
2.临时性变量:
使用命令如export等命令设置,设置之后马上生效。当关闭shell的时候失效(这种主要用于测试比较多)
env #显示所有变量
echo $PATH #查看指定变量路径
Linux下环境变量设置的三种方法:
1.只对当前的shell起作用的环境变量
直接控制台中输入 : $PATH="$PATH":/NEW_PATH (关闭shell Path会还原为原来的path)
控制台中设置,不赞成这种方式,因为他只对当前的shell 起作用,换一个shell设置就无效了
2.对所有的用户都起作用的环境变量
vim /etc/profile
在/etc/profile的最下面添加: export PATH="$PATH:/NEW_PATH"
修改 /etc/profile 文件,如果你的计算机仅仅作为开发使用时推存使用这种方法,因为所有用户的shell都有权使用这个环境变量,可能会给系统带来安全性问题。这里是针对所有的用户的,所有的shell
3.针对当前特定的用户起作用的环境变量
vim ~/.bashrc
在下面添加:
Export PATH="$PATH:/NEW_PATH"
修改bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的 .bashrc文件就可以了。
参考文章:https://www.cnblogs.com/Joans/p/7760378.html
11.which命令
which 用来查看可执行文件的位置。
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
which pwd
/bin/pwd
12.whereis
whereis命令用来查找命令的位置,包括执行文件、源代码和手册页文件
whereis find
find: /usr/bin/find /usr/bin/X11/find /usr/share/man/man1/find.1.gz
比较find、locate、whereis、which、type
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
yangyang@ubuntu:~/test$ whereis grep
grep: /bin/grep /usr/share/man/man1/grep.1.gz
yangyang@ubuntu:~/test$ which grep
/bin/grep
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
参考文章:http://www.cnblogs.com/kex1n/p/5233821.html
13.whereis
whereis命令用来查找命令的位置,包括执行文件、源代码和手册页文件
14.locate
locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
15.find
find命令用于:在一个目录(及子目录)中搜索文件,你可以指定一些匹配条件,如按文件名、文件类型、用户甚至是时间戳查找文件。
16.grep
grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,不会修改原文件内容。
//命令会返回一个包含“match_pattern”的文本行:
grep match_pattern file_name
//在多个文件中查找:
grep "match_pattern" file_1 file_2 file_3 ...
17.alias
alias的用途是设置指令的别名
alias [别名]=[指令名称]
例子: alias rm='rm -i'
18.mkdir
mkdir 命令用来创建指定的名称的目录
1.创建目录的用户在当前目录中具有写权限
2.指定的目录名不能是当前目录中已有的目录。
mkdir empty
18.cp命令
cp命令用于复制文件或目录
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
1.如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。
2.若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
//下面的命令将指定文件复制到当前目录下:
cp ../mary/homework/assign .
//将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中
cp -r /usr/men /usr/zh
//交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中
cp -i /usr/men m*.c /usr/zh
19.ls命令
列出目录内容
20.rm和rmdir
删除文件命令rm
用来删除文件或目录的命令
该命令的各选项含义如下:
- f 忽略不存在的文件,从不给出提示。
- r 指示rm将参数中列出的全部目录和子目录均递归地删除。
- i 进行交互式删除
删除空目录命令rmdir
该命令从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限。
rmdir命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。
yangyang@ubuntu:~/test$ rmdir demo
rmdir: failed to remove ‘demo’: Directory not empty
yangyang@ubuntu:~/test$ rm -r demo
yangyang@ubuntu:~/test$ ls
a.txt b.txt read-simple.sh test test~ test1 test2
21.cd命令
切换到某个目录
//下面都可以切换到主目录
cd
cd ~