【Linux】linux基础指令
目录
- 管理用户相关
- useradd
- paaswd
- userdel
- Linux中的用户文件结构
- ls
- -a
- Linux目录中的.和..是什么?
- -l
- -d
- -F
- Linux指令使用多个选项
- pwd
- cd
- 绝对路径与相对路径
- touch
- mkdir
- -p
- rmdir
- -p
- rm
- -r
- -i
- -f
- man
- cp
- mv
- echo
- 输出重定向和追加重定向
- cat
- -b
- -n
- -s
- more
- less
- -N
- -i
- head
- tail
- 管道文件搭配head与tail指令实现任意区块的读取
- date
- 显示时间
- 修改时间
- 时间戳
- cal
- -j
- -y
- -3
- find
- 通配符
- find与which与whereis
- grep
- -v
- -n
- -i
- -R
- 压缩相关
- zip
- unzip
- tar
- 查主机参数的一些指令
- uname
- free
- df
- lscpu
- alias
- Linux的几个常用的热键
- [Tab]按键
- [Ctrl]-c按键
- [Ctrl]-d按键
- [Ctrl]-r按键
- 命令行解释器的作用
管理用户相关
在Linux中的用户分为超级用户(root)和普通用户,超级用户才有权限管理普通用户。
useradd
useradd 用户名
在root账户下使用可以用来创建普通用户
paaswd
passwd 用户名
我们使用adduser创建用户之后可以使用paaswd设置密码,之后想要更改也能使用这个命令更改,在使用这个命令之后,命令行会出现,
这样的两行,我们会发现此时输入密码好像没有反应,但这并不是真的没有反应,只是Linux系统你输入密码它是不回显的,也就是虽然输密码不会显示在屏幕上,但是其实你是输进去了,这点要注意。
userdel
userdel -r 用户名
使用这个命令可以删除普通用户,使用这个命令时最好加上选项-r表示递归式的删除,我们在创建普通用户后会在/home/下生成对应用户名的家目录,用户可能会在家目录对应的目录中创建各种文件和目录,如果不加-r选项就不会删除用户对应的目录,使用的话就会递归删除用户目录及其目录下的所有文件,所以最好还是加上。
Linux中的用户文件结构
Linux的文件结构本质是一种多叉树,/是Linux的根目录,对应多叉树中的根,由根目录向外不断扩展着各种的文件与目录。我们的root账户所对应的家目录直接就在/根目录之下,而所有的普通用户的家目录则都在/根目录下的home目录中,Linux的普通用户主要在自己的家目录下拥有完整的读写权限,所以用户的家目录下保存着各种目录与文件,这也就是为什么删除用户时要加-r删干净的原因,谁也不想删完用户还留下一堆文件在磁盘中。
ls
ls 文件名或目录名
对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。另外,在Linux中如果在一个要加目录名的指令后面我们什么都没加,那它默认就是自己所在的目录。ls指令十分强大,拥有很多选项,下面讲几个实用的。
-a
ls -a 目录名
-a可以显示目录下的所有文件包括隐藏文件,Linux中文件名前面有.的文件是隐藏文件,只使用ls指令是看不见的,使用-a可以将它们全部显示出来。
Linux目录中的.和…是什么?
ls -a可以显示目录下的所有文件包括隐藏文件,当我们随便创建一个文件后会发现对其使用ls -a其目录下面就会有一个名字叫.的文件和一个名字叫…的目录,
这两个是什么呢?我们不妨进去看看,cd 指令可以转盘,这个之后就会讲到,当我们cd .时,
会发现我们还在当前目录中,当我们cd …时,
会发现此时我们回到了上一级目录。在Linux中创建的目录都会自动生成这两个目录,.就是目录本身,…表示上级目录。.目录表示当前目录本身,在路径中使用.可以表示当前目录。…表示上级目录,在路径中使用…可以表示上级目录下,例如很常用的cd …可以直接回退到上级目录。这两个目录虽说是目录,但不是普通的目录,它们本质上是一种目录级别的硬链接。
-l
ls -l 文件名或目录名
-l可以显示目录下所有子目录和文件的详细信息或文件的详细信息。ls -l可以简写成ll。
-d
ls -d
-d可以将目录像文件一样显示,之前也说了,ls如果跟的是目录名则会显示目录下的子目录和文件,使用这个则会只显示目录本身,就像文件一样。
-F
-F可以在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;“/”表示目录;“@”表
示符号链接;“|”表示FIFOs;“=”表示套接字(sockets)。
Linux指令使用多个选项
Linux中的指令很多都有许多选项提供各种额外的功能,有时我们会遇到想要使用多个选项的时候,这时我们可以
写一个选项空一格再写下一个选项这样写多个选项,当然,还能再进一步,
在一个-后面加上所有想要加的选项,这种更方便,也更实用。
pwd
pwd
显示用户当前所在的目录 ,没有选项。简单但相当实用。
cd
cd 目录名
改变当前的工作目录。将当前工作目录改变到指定的目录下。
绝对路径与相对路径
由于Linux的文件结构是一颗多叉树,一个目录或文件的上级目录是唯一确定的,且同一个目录下不允许有同名文件,这就使得我们使用路径可以找到Linux的唯一指定目录或文件。什么是路径呢?我们可以使用一下pwd指令,
熟悉windows操作系统的应该对此不会陌生,Linux与windows都是一样的,这种使用路径分割符(/在Linux中即表示根目录也表示路径分割符)将从根目录出发到目标目录或文件途中所经过的所有目录都表示出来的一串就是路径。当然,这种从根目录出发到目标目录或文件途中所经过的所有目录都表示出来的路径我们叫做绝对路径,而使用某种相对位置表示的我们就叫做相对路径,比如…/test就表示当前文件的上级目录下的test目录或文件。这两种表示方式各有各的好处也各有各的坏处。绝对路径的好处是严谨,除非文件位置本身发生改变不然不会出现找不到的情况,坏处是有时会太长,写着很麻烦。相对路径的好处是写着方便,很短,坏处是不严谨,比如…/test这种方式倘若自己的位置发生了改变就会导致找不到目标文件。所以我们应该做的就是各取所长,在现写现用的情况比如我就是cd转个盘,那我就用相对路径,方便快捷,但当我先写一个长期运作的文件比如配置文件时,我就用绝对路径,严谨准确,不会轻易发生错误。
cd指令没有什么选项,但有很多路径的表示方式:
cd … : 返回上级目录
cd /home/thx: 绝对路径
cd …/test : 相对路径
cd ~:进入用户家目录
cd -:返回最近访问目录,多次使用可以反复横跳
touch
touch 文件名
touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。修改日期用的不多,一般就是touch 文件名创建新文件,注意是文件,不能创建目录。touch后面可以加很多文件名批量创建新文件。
mkdir
mkdir 目录名
mkdir可以在当前目录下创建一个新目录。简单实用。
-p
mkdir -p 路径或目录
mkdir后面可以加上-p选项,此时后面的目录名就可以是一串路径,这时系统就会在当前路径下顺着路径向下,如果路径上没有的目录也会自动创建,直到路径最后的文件被创建。注意在使用mkdir 目录名时如果创建一个已经存在的文件时会报错说文件已经存在,而mkdir -p 路径或目录不会。
rmdir
rmdir 目录名
rmdir可以删除目录,但只能删除空目录,所以其实不是很实用。
-p
当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除。
rm
rm 文件名
rm指令可以说完爆rmdir,rm指令既能删除目录,也能删除文件,不论是不是空文件。但是在不加选项时是只能删文件。
-r
删除目录及其下所有文件,Linux的文件结构是一棵多叉树,学过数据结构都知道,删除二叉树要使用递归到最底层删除。-r就是表示要求系统递归式的删除指定目录中的所有文件。
-i
要求删除前逐个询问,我们可以通过这个指令查看系统的删除顺序,
这里使用的tree指令可以以树状结构展示指定目录的文件结构,我们可以看到我们要删除的文件是d1/d2/d3一层套一层的。在删除时可以明显地看到是先递归向下到最底层,再递归回来的删除方式,这与我们删除二叉树的方式一致。
-f
我们在删除指定目录时,出现权限相关的问题是时会弹出询问是否要删除,此时这个目录要是内容很多,因为递归的关系会询问超级多次,此时我们就可以使用这条选项表示强制删除,这时系统就不会询问了。
man
man 命令
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。man后面加上命令可以查看对应的手册,Linux的操作手册也有很多个,我们可以通过man man指令查看
man指令是从1号手册开始向后查找的,有时会出现因为顺序查找导致想要查的手册不是自己想要的那个的情况,比如在Linux中有C语言的手册,Linux中也有printf这个语法,所以当我们想要查一下C语言中的printf库函数时会因为先在1号手册中找到了所以就不去后面的手册中找的情况。这是我们可以指定手册号码来找,printf库函数在3号手册,所以我们就可以指定去3号手册去找。
cp
cp [选项] 源文件或目录 目标文件或目录
cp指令用于复制文件或目录,先指定源文件或目录,再指定目标文件或目录。指定文件时,后一个可以是文件,也可以是目录。文件只写文件名就默认在当前目录下,这时就不能是同名文件了,因为系统规定一个目录下不能有同名文件或目录,如果指定了在其他目录下,就可以指定任意名字,如果指定文件存在,就是拷贝覆盖该文件,不存在就是拷贝创建指定名字的文件。如果写的是目录,就会默认在目录下创建一份拷贝文件,当然,如果指定目录下有同名文件,就不是创建拷贝文件了,而是覆盖该同名文件。如果我们使用在目录末尾加/的方式显式表示这是一个目录,这时这个目录要是不存在就会报错,不写的话系统会把它当成文件名自动创建拷贝一份文件而不会报错。指定目录时,cp后面必须要加选项-r表示递归拷贝,这时后一个必须是目录,这时就会把目录拷贝到指定目录下面,如果目标目录是不存在的,也是会自动创建一个的,但不能是多层不存在的目录。如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现报错。
mv
mv [选项] 源文件或目录 目标文件或目录
mv命令是move的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。 根据不同的用法,mv可以实现文件重命名,文件剪切,文件剪切并重命名。如果第一个参数是文件, 第二个参数是文件名时,就表示将文件剪切到指定路径下并重命名,如果第二个参数的文件名没有路径也就是默认自己所在目录,那就相当于重命名了。如果第一个参数是文件, 第二个参数是目录名时,就是将当前文件剪切到指定目录下不重命名。如果第一个参数是目录, 第二个参数是目录名时,此时第二个参数的目录名存在就是将源目录剪切到指定目录下,如果不存在,就是剪切并重命名,目录前没有路径默认当前目录,此时就是直接重命名。
echo
echo 字符串
echo可以输出后面的字符串到屏幕上。这个指令看起来很无聊,但是其实很有用,我们可以配合输出重定向符号和追加重定向符号使用。
输出重定向和追加重定向
Linux中的输出重定向符号是>,在使用echo时,我们看到echo后面的字符串被打印到了屏幕上,这是不使用输出重定向的默认行为,默认会将字符串输出到屏幕上,Linux下一切皆文件,屏幕设备也被视为文件,所以echo指令在输出重定向的情况下就是输出到屏幕文件中打印到屏幕上。我们使用输出重定向就可以指定任意文件,也就是向任意文件输出字符串,
这样就能向文件写入了字符串了,cat指令可以查看文件内容,之后会讲。当然,这里的写入是覆盖写入,之前文件中的内容会被覆盖掉,怎么办呢?我们可以使用追加重定向,即不覆盖掉之前的文件内容,而是在此基础之上追加内容,
这里默认换行了,因为echo输出的字符串默认带换行符,想要不换行可以使用printf指令,这是我之前提到过的指令,它是默认不换行的,也可以使用输出重定向和追加重定向。另外,在使用输入重定向的情况下,如果指定的文件没有创建系统会默认创建一个,我们也可以使用这种方式创建新文件。
cat
cat [选项][文件]
查看目标文件的内容,这个符号可以加输入重定向,在选项和文件之间表示重定向输入的文件,但是一般加不加没什么太大的区别,与echo一样,不加文件的话是有默认输入的文件的,那就是键盘文件,什么文件都不加就是默认从键盘读取,这时我们键盘输什么屏幕就会打印什么。
-b
cat -b [文件]
对打印文件的非空行进行编号
-n
cat -n [文件]
对打印文件的所有行进行编号
-s
不会打印多行空行,对于多个空行只会打印一次。
more
more [选项][文件]
more指令与cat指令类似,都是查看文本,但是more跟适合查看大文本。在使用cat指令查看大文本时,会因为文本过大直接刷屏,
查看很麻烦,这时我们就能使用more,more指令会先把一整个屏幕刷满,
之后可以按回车向下翻,但是不能上翻。我们也可以通过 /搜索内容 的方式指定行数快速跳转,但是同样不能向上跳转。在使用指令时,我们也能直接接-数字的选项快速跳转到指定位置。
less
less [选项][文件]
less指令与more类似,但是less指令比more 指令强大得多,不仅可以上下翻页,还能上下查找,还能显示行号忽略大小写查找,可以说完爆more指令。在使用less指令之后,和more指令一样,会先把一面填满之后就不显示了,这时我们可以按键盘上的上下箭头或jk键或PgUp和PgDn来上下移动或回车向下,我们使用/ 搜索内容 向下搜索,使用 ?搜索内容 向上搜索。搜索过一次之后按n可以按照上次的搜索内容向下继续搜索,按shift加n也就是N时可以按照上次的搜索内容向上继续搜索。
-N
less -N[文件]
可以显示行号
-i
less -i[文件]
搜索时可以忽略大小写。
head
head [参数]... [文件]...
head指令可以显示指定文件开头指定行数的内容,常用选项就是-n<数字>,数字多少显示多少行,不写默认10行。
tail
tail [参数]... [文件]...
与head指令相对,tail显示指定文件末尾指定行数的内容,常用选项也是-n<数字>,数字多少显示多少行,不写默认10行。
管道文件搭配head与tail指令实现任意区块的读取
在Linux中我们可以使用head指令与tail指令读取文件的开头和结尾,那我们想要对中间进行读取怎么办呢?我们可以使用这种方式,
他的意思是先使用head指令读取前1000行数据,再经由管道文件中转,利用tail指令读取这1000数据的后10行,这样我们就完成了991行到1000的读取,当然不一定得是head在前tail在后,也是可以反过来的。|表示管道文件,管道可以有多个,连结着一个个指令像流水线一样进行操作。由于笔者是初学者,对于管道文件的理解也就止步于此。总之,利用管道文件理论上可以实现任意位置的读取。
date
显示时间
date
date指令可以显示现在的时间,采用的是默认的形式,我们也可以自定义,以下是自定义的一些符号:
%H : 小时(00…23)
%M : 分钟(00…59)
%S : 秒(00…61)
%X : 相当于 %H:%M:%S
%d : 日 (01…31)
%m : 月份 (01…12)
%Y : 完整年份 (0000…9999)
%F : 相当于 %Y-%m-%d
使用这些标记自定义格式,自定义格式的方法就是date +……,+后面写格式。
这里我们可以在标记之间加自己喜欢的间隔符,我用的-。
修改时间
在root用户下我们拥有修改系统时间的权限,修改时间使用,
date -s //设置当前时间,只有root权限才能设置,其他只能查看。
修改时间的格式:
date -s //设置当前时间,只有root权限才能设置,其他只能查看。
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 //设置具体时间,不会对日期做更改
date -s “01:01:01 2008-05-23″ //这样可以设置全部时间
date -s “01:01:01 20080523″ //这样可以设置全部时间
date -s “2008-05-23 01:01:01″ //这样可以设置全部时间
date -s “20080523 01:01:01″ //这样可以设置全部时间
时间戳
在Linux中使用,
date +%s
可以打印时间戳,什么是时间戳呢?时间戳是从格林威治时间(1970年1月1日0时0分0秒,因为时区关系,这里有8小时时差)开始每过一秒就加1的数字就是时间戳。每一个时间戳都对应唯一的时间,我们可以通过,
date -d@时间戳
查看时间戳对应的时间。
cal
cal [参数][月份][年份]
cal可以显示日历。直接写就是打印当前月的日历。
-j
cal -j [月份][年份]
日期不再按月开始,而是从一年的开头开始计数。
-y
cal -j [月份][年份]
后面跟年份打印一年的日历,就算加了月份也不管用。
-3
cal -3 [月份][年份]
打印前一个月这个月和后一个月的日历。前提是加了月份。
其实上面的指令没什么大用,Linux支持自动识别,直接 cal 3 就能打印前一个月这个月和后一个月的日历,写年份就打印一年的,写了月份就打印一个月的日历。
find
find [起始路径] [操作指令] [表达式]
find命令可以在目录结构中搜索文件,并执行指定的操作。find指令非常强大,选项非常多,这里只讲最常用的一条,
find [起始路径] -name [表达式]
-name选项表示按名字查找,给定起始路径和查找文件的表达式就可以了,普通用户使用find可能因为权限问题无法查看一些文件。表达式可以搭配通配符使用。
通配符
Linux中提供一种符号叫通配符,符号是*,作用十分强大。比如,.c 就表示所有以 .c 结尾的文件,或者 test 就表示所有以test开头的文件,*可以代替缺失的一部分进而代表所有情况,不光是find指令,像删除rm指令也可以使用这条指令批量删除指定格式的文件。
find与which与whereis
find可以在目录结构中搜索任意文件,Linux中还有两个与这条指令很像的指令。
which 指令
which指令可以查找对应的指令程序在什么路径下,在Linux中指令其实是一个个可执行文件,存在/usr/bin/下,which可以查找这些可执行的指令,当仅能查找指令。
whereis 指令或源码等
whereis可以在在系统预定义的目录中查找与命令相关的二进制文件、源码和手册页。whereis可以认为是介于which和find之间的产物,可以查找的范围比which更大,但是由于不像find一样全部都找一遍,所以更快一点。我们要找除了指令以外的系统自带的源码和手册时可以用。一些外部安装的指令等文件如果在系统搜索范围内,也是可以被找到的。
grep
grep [选项] 搜寻字符串 文件
在文件中搜索字符串,将找到的行打印出来。
-v
grep -v 搜寻字符串 文件
选项-v会将与给定字符串相反的行打印出来,也就是不出现该字符串的行打印出来。
-n
grep -n 搜寻字符串 文件
打印时打印所在文件的行号。
-i
grep -i 搜寻字符串 文件
查找时会略大小写。
-R
grep -R 目录
递归查找指定目录下所有文件中包含指定字符串的行打印出来,可以搭配n选项打印出具体行号
grep还可以使用管道文件搭配cat对输出的文件内容实现过滤。
压缩相关
zip
zip [选项]压缩文件.zip 目录或文件
可以将指定文件(可以是多个)压缩成.zip结尾的压缩文件,注意压缩目录时要加-r,不加就只能压缩文件和空目录。
unzip
unzip 压缩文件.zip
可以将指定压缩文件解压,加选项-d可以解压到指定文件夹,文件夹没有会自动创建。
unzip -d 压缩文件.zip 目录
tar
tar [-cxtzjvf] 文件与目录
每个选项对应的意义如下:
-c :建立一个压缩文件的参数指令(create 的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录
很多,记住很难,最为初学者只要记住,
tar czf 文件名 打包压缩
tar tzf 文件名 预览
tar xzf 文件名 解压
加-C还能指定解压到目录,这些就足够了。
查主机参数的一些指令
uname
uname [选项]
uname用来获取电脑和操作系统的相关信息,linux主机所用的操作系统的版本、硬件的名称等基本信息。加选项-a或-all可以显示所有参数。
free
free
free可以查内存
df
df
df可以查磁盘
lscpu
lscpu
lscpu可以查cpu相关信息。Little Endian表示小端,Big Endian表示大端。
alias
alias 临时别名='指令语句'
alias指令可以为指定的指令创建别名,就像我们之前提到过的ll一样,它就是ls -l的别名,我们用which查找一下就会发现了。
系统这里也是使用了alias指令的。当我们建立完临时别名不想要再使用的时候我们可以
alias 想要销毁别名=''
这样就销毁了。
Linux的几个常用的热键
[Tab]按键
[Tab]按键可以补齐一些命令,当然不是什么样的都能补齐,得要预先输入一些让系统识别你要输什么,不然系统会找出很多条可能的结果从而无法确认。
[Ctrl]-c按键
让当前的程序停止。非常实用的指令。我们平时可能会输错一些代码,想要直接重输却不知道怎么办,只是可以直接[Ctrl]-c,当前指令的书写就会停掉,进而转到下一行重新书写。
[Ctrl]-d按键
通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit,可以用来退出一些程序或账号。
[Ctrl]-r按键
[Ctrl]-r按键可以查找历史命令,我们可以用键盘上下键直接翻找,也能输入一些关键字或词来搜索。通过这条命令我们也能知道Linux是会记录我们输入的指令的,我们可以通过history指令来查看,Linux会记录我们输入的最新的一千条指令。
命令行解释器的作用
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使kernel。
而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
(1)将使用者的命令翻译给核心(kernel)处理。
(2)同时,将核心的处理结果翻译给使用者。
命令行解释器介于用户与操作系统之间,用户不直接与操作系统打交道,因为想要与操作系统打交道很难,指令说是指令,但其实就是系统特定路径下的一个个可执行文件,我们在使用指令时系统会到指定的路径下查找,找到了就执行那个可执行文件,我们在将一些外部指令安装进系统当中直接使用的操作就是软件安装,通过这些指令,我们这些用户才能做到与操作系统之间进行交互。命令行解释器向上接受用户指令,对于用户的危险操作进行及时阻止保护操作系统,再向下将安全的指令解析给操作系统,与其交互,最后再将操作系统的结果返还给用户。所以命令行解释器的作用就是进行命令行解析,对用户的非法请求进行拦截。