Liunx命令
【用户】
一.常用命令1.1 ls
ls 命令是 linux 下最常用的命令,ls 命令就是 list 的缩写。
ls 用来打印出当前目录的清单。如果 ls 指定其他目录,那么就会显示指定目录里的文件及文件夹清单。
通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。
(1)命令格式
ls [选项] [目录名]
(2)常用参数
参数描述
-a–all 列出目录下的所有文件,包括以 . 开头的隐含文件
-l除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来
-d–directory 将目录象文件一样显示,而不是显示其下的文件
-h–human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
-t以文件修改时间排序
eg:
列出/home目录下的所有文件
ls -a /home
列出/home 文件夹下的所有文件和目录的详细资料
ls -a -l /home
ls -al /home
1.2 cd
cd 命令是 change directory 的缩写,切换当前目录至指定的目录。
(1)命令格式
cd [目录名]
(2)常用范例
从当前目录进入系统根目录:
cd /
从当前目录进入父目录:
cd ..
从当前目录进入当前用户主目录:
cd ~
从当前目录进入上次所在目录:
cd -
1.3 pwd
pwd 命令查看“当前工作目录”的完整路径。pwd 命令是 Print Working Directory 的缩写。
(1)命令格式
pwd [选项]
(2)常用参数
参数描述
-P显示实际物理路径,而非使用连接(link)路径
-L当目录为连接路径时,显示连接路径
(3)常用范例
显示当前目录所在路径:
pwd
显示当前目录的物理路径:
pwd -P
显示当前目录的连接路径:
pwd -L
另:常用快捷方式:
Tab: 这个键是最有用的键了,也是敲击概率最高的一个键。因为当你打一个命令打一半时,它会帮你补全的。不光是命令,当你打一个目录时,同样可以补全。
Ctrl + C:这个是用来终止当前命令的快捷键,当然你也可以输入一大串字符,不想让它运行直接Ctrl + C,光标就会跳入下一行。
Ctrl + D: 退出当前终端,同样你也可以输入exit。
Ctrl + L: 清屏,使光标移动到第一行。
Ctrl+S暂停当前程序,暂停后按下任意键恢复运行
Ctrl+Z将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+A将光标移至输入行头,相当于Home键
Ctrl+E将光标移至输入行末,相当于End键
Ctrl+K删除从光标所在位置到行末
Alt+Backspace向前删除一个单词
Shift+PgUp将终端显示向上滚动
Shift+PgDn将终端显示向下滚动
显示历史输入命令:方向上键↑
通配符:
*匹配 0 或多个字符
?匹配任意一个字符
[list]匹配 list 中的任意单一字符
[!list]匹配 除list 中的任意单一字符以外的字符
[c1-c2]匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
{string1,string2,...}匹配 string1 或 string2 (或更多)其一字符串
{c1..c2}匹配 c1-c2 中全部字符 如{1..10}
使用man 命令查看帮助文档
eg: man ls
二.用户及用户组管理
1.多用户多任务
Linux 是一个多用户、多任务的操作系统。
有时可能是很多用户同时用同一个系统,但并不所有的用户都一定都要做同一件事,所以这就有多用户多任务之说;
需要注意的是:多用户多任务并不是大家同时挤到一接在一台机器的的键盘和显示器前来操作机器,多用户可能通过远程登录来进行,比如对服务器的远程控制,只要有用户权限任何人都是可以上去操作或访问的;
2.用户角色区分
用户在系统中是分角色的,在Linux系统中,由于角色不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和识别的,特别是UID;在系统管理中,系统管理员一定要坚守UID 唯一的特性;
root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;
虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;
普通真实用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;
3.用户和用户组概念
通过前面对Linux 多用户的理解,我们明白Linux 是真正意义上的多用户操作系统,所以我们能在Linux系统中建若干用户(user)。比如我们的同事想用我的计算机,但我不想让他用我的用户名登录,因为我的用户名下有不想让别人看到的资料和信息(也就是隐私内容)这时我就可以给他建一个新的用户名,让他用我所开的用户名去折腾,这从计算机安全角度来说是符合操作规则的;
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;
用户和用户组的对应关系是:一对一、多对一、一对多或多对多;
一对一:某个用户可以是某个组的唯一成员;
多对一:多个用户可以是某个唯一的组的成员,不归属其它用户组;比如beinan和linuxsir两个用户只归属于beinan用户组;
一对多:某个用户可以是多个用户组的成员;比如beinan可以是root组成员,也可以是linuxsir用户组成员,还可以是adm用户组成员;
多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组;其实多对多的关系是前面三条的扩展;理解了上面的三条,这条也能理解;
4.用户和用户组的相关配置
1)与用户(user)相关的配置文件;
/etc/passwd 注:用户(user)的配置文件;
/etc/shadow 注:用户(user)影子口令文件;
2)与用户组(group)相关的配置文件;
/etc/group 注:用户组(group)配置文件;
/etc/gshadow 注:用户组(group)的影子文件;
5.查看用户信息
--使用 cat /etc/passwd 查看用户信息(这里 cat 命令用于读取指定文件的内容并打印到终端输出)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
可以看到/etc/passwd的内容由":"分成了7段,每个字段的具体含义是:
1)用户名(如第一行中的root就是用户名),代表用户账号的字符串。用户名字符可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。
2)存放的就是该账号的口令,为什么是’x’呢?早期的unix系统口令确实是存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,在这里只用一个’x’代替。
3)这个数字代表用户标识号,也叫做uid。系统识别用户身份就是通过这个数字来的,0就是root,也就是说你可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。通常uid的取值范围是0~65535,0是超级用户(root)的标识号,1~499由系统保留,作为管理账号,普通用户的标识号从500开始,如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于500的。
4)表示组标识号,也叫做gid。这个字段对应着/etc/group 中的一条记录,其实/etc/group和/etc/passwd基本上类似。
5)注释说明,该字段没有实际意义,通常记录该用户的一些属性,例如姓名、电话、地址等等。不过,当你使用finger的功能时就会显示这些信息的。
6)用户的家目录,当用户登录时就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,这个字段是可以自定义的,比如你建立一个普通用户test1,要想让test1的家目录在/data目录下,只要修改/etc/passwd文件中test1那行中的该字段为/data即可。
7)shell,用户登录后要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有很多种sh, csh, ksh,tcsh,bash等,而Redhat/CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash外还有/sbin/nologin比较多,它表示不允许该账号登录。如果你想建立一个账号不让他登录,那么就可以把该字段改成/sbin/nologin,默认是/bin/bash。
--使用 /etc/shadow 查看用户信息
root:$1$8bVwhufy$7qyCLbpUfG9YzvkRrIB.m1::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
/etc/shadow文件和/etc/passwd类似,用":"分割成了9段,各个字段含义如下:
1)用户名,跟/etc/passwd对应。
2)用户密码,这个才是该账号的真正的密码,不过这个密码已经加密过了,但是有些黑客还是能够解密的。所以为了安全,该文件属性设置为600,只允许root读写。
3)上次更改密码的日期,这个数字是这样计算得来的,距离1970年1月1日到上次更改密码的日期,例如上次更改密码的日期为2012年1月1日,则这个值就是365*(2012-1970)+1=15331。
4)要过多少天才可以更改密码,默认是0,即不限制。
5)密码多少天后到期。即在多少天内必须更改密码,例如这里设置成30,则30天内必须更改一次密码,否则将不能登录系统,默认是99999,可以理解为永远不需要改。
6)密码到期前的警告期限,若这个值设置成7,则表示当7天后密码过期时,系统就发出警告告诉用户,提醒用户他的密码将在7天后到期。
7)账号失效期限。你可以这样理解,如果设置这个值为3,则表示:密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,则这个账号就失效了,即锁定了。
8)账号的生命周期,跟第三段一样,是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号作废。
9)作为保留用的,没有什么意义。
6.用户相关命令
2.6.1 useradd 添加用户
语法: useradd [-u UID] [-g GID] [-d HOME] [-M] [-s] username
-u 自定义UID
-g 使其属于已经存在的某个GID
-d 自定义用户的家目录
-M 不建立家目录
-s 自定义shell
eg: useradd -M test1
你会发现,创建test1时,加上了-M选项后,在/etc/passwd文件中test1那行的第六字段依然有/home/test1,K可是在home中没有此文件夹。
2.6.2 userdel 删除用户
语法:userdel [-r] username
-r 选项的作用是删除用户时,连同用户的家目录一起删除。
eg:userdel -r test1
2.6.3 passwd username 创建/修改一个用户的密码
等创建完账户后,默认是没有设置密码的,虽然没有密码,但该账户同样登录不了系统。只有设置好密码后方可登录系统。
为用户创建密码时,为了安全起见,请尽量设置复杂一些。你可以按照这样的规则来设置密码:a. 长度大于10个字符;b. 密码中包含大小写字母数字以及特殊字符(*&等);c. 不规则性(不要出现root, happy, love,linux,123456,111111等等单词或者数字);d. 不要带有自己名字、公司名字、自己电话、自己生日等。
【passwd 后不跟用户名,是修改当前用户密码】
2.6.4 usermod 修改用户信息
语法:usermod [-option] username
-c<备注> 修改用户帐号的备注文字。
-d登入目录> 修改用户登入时的目录。
-e<有效期限> 修改帐号的有效期限。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-g<群组> 修改用户所属的群组。
-G<群组> 修改用户所属的附加群组。
-l<帐号名称> 修改用户帐号名称。
-L 锁定用户密码,使密码无效。
-s<shell> 修改用户登入后所使用的shell。
-u<uid> 修改用户ID。
-U 解除密码锁定。
eg:修改test1 的uid为2000,群组id为1000
usermod -u 2000 -g 1000 test1
修改test1 的用户名为zhiyou1
usermod -l zhiyou1 test1
2.6.5 su/sudo 切换用户
--查看用户 who am i
smile pts/0 2017-09-24 05:55 (:0)
1)打开当前伪终端的用户的用户名
2)伪终端.伪终端就是当你在图形用户界面使用 /dev/tty7 时每打开一个终端就会产生一个伪终端, pts/0 后面那个数字就表示打开的伪终端序号
3)当前伪终端的启动时间。
--查看用户名
whoami
echo $LOGNAME
--切换用户
语法: su [-] usernameLinux系统中,有时候普通用户有些事情是不能做的,除非是root用户才能做到。这时就需要临时切换到root身份来做事了。
使用su - 就可以切换成root身份,前提是知道root的密码。
使用su时,后面可以跟”-”也可以不跟,普通用户su不加username时就是切换到root用户,当然root用户同样可以su到普通用户。
[root@localhost ~]# su - smile
Last login: Sun Sep 24 06:49:48 PDT 2017 on pts/0
[smile@localhost ~]$ exit
logout
[root@localhost ~]# su smile
[smile@localhost root]$ pwd
/root
加”-“后会连同用户的环境变量一起切换过来。su test 后虽然切换到了test用户,但是当前目录还是切换前的/root目录,然后当用su - test时切换用户后则到了test的家目录/home/test。当用root切换普通用户时,是不需要输入密码的。这也体现了root用户至高无上的权利。
用su是可以切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那岂不是系统非常的不安全?没有错,为了改进这个问题,产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用visudo命··令去编辑相关的配置文件/etc/sudoers。如果没有visudo这个命令,请使用” yum install -y sudo”安装。
另:finger 注:查看用户信息工具 id 注:查看用户的UID、GID及所归属的用户组 chfn 注:更改用户信息工具
7.查看用户组相关信息
在Linux里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源。
--在终端使用cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
/etc/group文件中的内容共有四个字段:
1)groupname组名
2)password 组密码,上面的 password 字段为一个 x 并不是说密码就是它,只是表示密码不可见而已。
3)GID 组id
4)user_list 本字段可以为空;如果字段为空表示用户组为GID的用户名;
2.7.1 groups 显示用户所属的用户组
eg:查看smile用户所在的用户组
groups
2.7.2 groupadd 添加分组
语法:groupadd groupname
-g GID:指定GID
-r:系统组
2.7.3 groupdel 删除分组
语法:groupdel groupname
2.7.4 groupmod 修改用户组信息
语法: groupmod groupname
-g GID
-n NEW_GRP_NAME
2.7.1 id username 查看用户信息
三.文件命令
pwd 打印出当前所在目录
cd 进入到某一个目录(./当前目录 ../当前目录的上一级目录)
3.1 mkdir
mkdir命令用来创建指定名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录。
mkdir 命令是 make directory 的缩写。
(1)命令格式
mkdir [选项] 目录
(2)常用参数
参数描述
-m --mode=模式设定权限<模式>
-p --parents可以是一个路径名称。若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录
-v --verbose每次创建新目录都显示信息
(3)常用范例
递归创建多个目录:
mkdir -p smile/test
创建权限为 777 的目录:
mkdir -m 777 zhang
创建目录显示信息:
mkdir -vp zhang/test
3.2 rmdir
rmdir命令用来删除空目录。当目录不再被使用时,或者磁盘空间已到达使用限定值,就需要删除失去使用价值的目录。利用rmdir命令可以从一个目录中删除一个或多个空的子目录。该命令从一个目录中删除一个或多个子目录,其中dirname佬表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如dirname中包含路径,则删除指定位置的目录。删除目录时,必须具有对其父目录的写权限
rm 命令是 remove dirctory的缩写。
(1)命令格式
rmdir[选项] 目录
(2)常用参数
参数描述
-p或--parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除; --ignore-fail-on-non-empty:此选项使rmdir命令忽略由于删除非空目录时导致的错误信息;
--help:显示命令的帮助信息;
--version:显示命令的版本信息。
3.3 rm
rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。
rm 命令是 remove 的缩写。
(1)命令格式
rm [选项] 文件或目录
(2)常用参数
参数描述
-f --force忽略不存在的文件,从不给出提示
-i --interactive进行交互式删除
-r --recursive指示 rm 将参数中列出的全部目录和子目录均递归地删除
-v --verbose详细显示进行的步骤
(3)常用范例
删除文件,系统会先询问是否删除:
rm 1.txt
强行删除文件,系统不再提示:
rm -f 1.txt
删除后缀名为.txt 的所有,删除前逐一询问
rm -i *.txt
3.4mv
mv 命令功能是用来移动文件或更改文件名,是 Linux 系统下常用的命令,经常用来备份文件或者目录。mv命令根据第二个参数类型(是目标文件还是目标目录),决定执行将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv 命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv 命令将各参数指定的源文件均移至目标目录中。
mv 命令是 move 的缩写。
(1)命令格式
mv [选项] 源文件或目录 目标文件或目录
(2)常用参数
参数描述
-b --back若需覆盖文件,则覆盖前先行备份
-f --force如果目标文件已经存在,不会询问而直接覆盖
-i --interactive若目标文件已经存在时,就会询问是否覆盖
-u --update若目标文件已经存在,且源文件比较新,才会更新
-t --target该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后
(3)常用范例
将文件 1.txt 重命名为 a.txt:
mv 1.txt a.txt
将文件 a.txt 移动到 zhang 目录下,如果文件存在,覆盖前会询问是否覆盖:
mv -i a.txt ../zhang/a.txt
【注意目标文件是否是文件夹,以及文件夹是否存在】
3.5 cp
cp 命令用来复制文件或者目录,是 Linux 系统中最常用的命令之一。一般情况下,shell 会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i 参数。但是如果是在 shell 脚本中执行 cp 时,没有-i 参数时不会询问是否覆盖。这说明命令行和 shell 脚本的执行方式有些不同。
cp 命令是 copy 的缩写
(1)命令格式
cp [选项] 源文件 目录
cp [选项] -t 目录 源文件
(2)常用参数
参数描述
-t --target-directory指定目标目录
-i --interactive覆盖前询问(使前面的 -n 选项失效)
-n --no-clobber不要覆盖已存在的文件(使前面的 -i 选项失效)
-s --symbolic-link对源文件建立符号链接,而非复制文件
-f --force强行复制文件或目录, 不论目的文件或目录是否已经存在
-u --update使用这项参数之后,只会在源文件的修改时间较目的文件更新时,或是对应的目的文件并不存在,才复制文件
(3)常用范例
对文件 hello.txt 建立一个符号链接 1.txt:
cp -s hello.txt 1.txt
将 test1 目录下的所有文件复制到 test2 目录下,覆盖前询问:
cp -i text1/* test2
将 test1 目录下的最近更新的文件复制到 test2 目录下,覆盖前询问:
cp -iu test1/* test2
3.6 cat
cat命令的功能是将文件或标准输入组合输出到标准输出。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。
cat 命令是 concatenate 的缩写。
(1)命令格式
cat [选项] [文件]
(2)常用参数
参数描述
-A --show-all等价于 -vET
-b --number-nonblank对非空输出行编号
-e等价于 -vE
-E --show-ends在每行结束处显示 $
-n --number对输出的所有行编号,由 1 开始对所有输出的行数编号
-s --squeeze-blank有连续两行以上的空白行,就代换为一行的空白行
-t与 -vT 等价
-T --show-tabs将跳格字符显示为 ^I
-u(被忽略)
-v --show-nonprinting使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
(3)常用范例
把 123.txt 的文件内容加上行号后输入1.txt 这个文件里:
cat -n 123.txt > 1.txt
将 123.txt 的文件内容反向显示:
tac 123.txt
【tac 是将 cat 反写过来,所以它的功能就跟 cat 相反,cat 是由第一行到最后一行连续显示在屏幕上,而 tac 则是由最后一行到第一行反向在屏幕上显示出来。】
3.7nl
nl 命令在 linux 系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号。其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。
nl 命令是 number of lines 的缩写。
(1)命令格式
nl [选项] [文件]
(2)常用参数
参数描述
-b指定行号指定的方式,主要有两种:
-b a表示不论是否为空行,也同样列出行号(类似 cat -n)
-b t如果有空行,空的那一行不要列出行号(默认值)
-n列出行号表示的方法,主要有三种:
-n ln行号在屏幕的最左方显示
-n rn行号在自己栏位的最右方显示,且不加 0
-n rz行号在自己栏位的最右方显示,且加 0
-w行号栏位的占用的位数
(3)常用范例
把 123.txt 的文件内容加上行号后显示,空行不加行号
nl -b t 123.txt
3.8 more
more 命令,功能类似 cat ,cat 命令是将整个文件的内容从上到下显示在屏幕上。 more 命令会一页一页的显示,方便使用者逐页阅读,而最基本的指令就是按空白键(space)往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more 命令从前向后读取文件,因此在启动时就加载整个文件。
(1)命令格式
more [选项] 文件
(2)常用参数
参数描述
+n从笫 n 行开始显示
-n定义屏幕大小为 n 行
+/pattern在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c从顶部清屏,然后显示
-d提示“Press space to continue,’q’ to quiet”,禁用响铃功能
-p通过清除窗口而不是滚屏来对文件进行换页,与-c 选项相似
-s把连续的多个空行显示为一行
-u把文件内容中的下画线去掉
(3)常用操作
符号描述
=输出当前行的行号
q退出 more
enter 向下查看一行
空格键向下滚动一屏
b返回上一屏
3.9 less
less 工具也是对文件或其它输出进行分页显示的工具,应该说是 linux 正统查看文件内容的工具,功能极其强大。
less 作用跟more一样,但比more好在可以上翻,下翻。空格键同样可以翻页,而按”j”键可以向下移动(按一下就向下移动一行),按”k”键向上移动。在使用more和less查看某个文件时,你可以按一下”/” 键,然后输入一个word回车,这样就可以查找这个word了。如果是多个该word可以按”n”键显示下一个。另外你也可以不按”/”而是按”?”后边同样跟word来搜索这个word,唯一不同的是,”/”是在当前行向下搜索,而”?”是在当前行向上搜索。
3.10 head
head后直接跟文件名,则显示文件的前十行。如果加 –n 选项则显示文件前n行。
3.11 tail
tail 和head一样,后面直接跟文件名,则显示文件最后十行。如果加-n 选项则显示文件最后n行。
【一般使用cat和tail命令查看日志信息】
四、文件操作
4.1 touch 命令
使用touch命令可以创建一个新的空白文件
语法: touch 文件
4.2 vim 命令
vi: Visual Interface 可视化接口
vim: VI iMprovedVI增强版
全屏编辑器,模式化编辑器
【vim模式:】
正常模式
正常模式主要用来浏览和修改文本内容的
一般的,打开Vim都是正常模式。在任何模式下,只要按下 Esc 键就可以返回正常模式。
插入模式
插入模式则用来向文本中添加内容的,按下i,a,o,都可以切换到插入模式
可视模式
可视模式相当于高亮选取文本后的普通模式。
命令模式(底行模式)
命令模式则多用于操作文本文件(而不是操作文本文件的内容),例如保存文件;或者用来改变编辑器本身的状态,例如设定多栏窗口、标签或者退出编辑器……
模式切换:
使用vim命令打开文件,或者点击esc都可进入正常模式
点击键盘i,a,o都可进入编辑模式
点击键盘v,可进入可视化模式
点击键盘esc或者ctrl+C,推出编辑模式,进入命令模式
命令模式(末行模式关闭文件):
:q 退出
:wq 保存并退出
:q! 不保存并退出
:w 保存
:w! 强行保存
:wq --> :x
【文件权限】
一个linux目录或者文件,都会有一个所属主和所属组。所属主,即文件的拥有者,而所属组,即该文件所属主所在的一个组。Linux这样设置文件属性的目的是为了文件的安全。例如,test文件的所属主是user0 而test1文件的所属主是user1,那么user1是不能查看test文件的,相应的user0也不能查看test1文件。然后有这样一个应用,我想创建一个文件同时让user0和user1来查看怎么办呢?
这时“所属组”就派上用场了。即,创建一个群组users,让user0和user1同属于users组,然后建立一个文件test2,且其所属组为users,那么user0和user1都可以访问test2文件。
Linux文件属性不仅规定了所属主和所属组,还规定了所属主(user)、所属组(group)以及其他用户(others)对该文件的权限。
文件属性
--使用ls -l列出文件详情
drwxr-xr-x. 4 smile smile 31 9月 25 02:55 Desktop
drwxr-xr-x. 2 smile smile 6 9月 24 20:00 公共
drwxr-xr-x. 2 smile smile 6 9月 24 20:00 模板
drwxr-xr-x. 2 smile smile 6 9月 24 20:00 视频
第1列,包含的东西有该文件类型和所属主、所属组以及其他用户对该文件的权限。第一列共10位。其中第一位用来描述该文件的类型。上例中,我们看到的类型有”d”, “-“ ,其实除了这两种外还有”l”, “b”, “c”,”s”等。
d 表示该文件为目录;
- 表示该文件为普通文件;
l 表示该文件为连接文件(linux file),上边提到的软连接即为该类型;
b 表示该文件为块设备文件,比如磁盘分区
c 表示该文件为串行端口设备,例如键盘、鼠标。
s 表示该文件为套接字文件(socket),用于进程间通信。
rwx r-x r-x
1.所属用户用户权限
2.所属用户所在的用户组 内成员的权限
3.其他用户的权限
后边的9位,每三个为一组。均为rwx 三个参数的组合。其中r 代表可读,w代表可写,x代表可执行。前三位为所属主(user)的权限,中间三位为所属组(group)的权限,最后三位为其他非本群组(others)的权限。下面拿一个具体的例子来述说一下。
一个文件的属性为-rwxr-xr-- ,它代表的意思是,该文件为普通文件,文件拥有者可读可写可执行,文件所属组对其可读不可写可执行,其他用户对其只可读。
对于一个目录来讲,打开这个目录即为执行这个目录,所以任何一个目录必须要有x权限才能打开并查看该目录。例如一个目录的属性为 drwxr--r-- 其所属主为root,那么除了root外的其他用户是不能打开这个目录的。
第2列,表示为连接占用的节点(inode),若为目录时,通常与该目录地下还有多少目录有关系,关于连接(link)在以后章节详细介绍。
第3列,表示该文件的所属主。
第4列,表示该文件的所属组。
第5列,表示该文件的大小。
第6列、第7列和第8列为该文件的创建日期或者最近的修改日期,分别为月份日期以及时间。
第9列,文件名。如果前面有一个. 则表示该文件为隐藏文件。
权限说明
在linux中为了方便更改这些权限,linux使用数字去代替rwx ,具体规则为r: 4 w:2 x:1 -:0 举个例子,-rwxrwx---用数字表示就是 770,具体是这样来的:
rwx = 4+2+1=7; rwx= 4+2+1=7; --- = 0+0+0=0
[在linux系统中,默认一个目录的权限为 755,而一个文件的默认权限为644.]
1.1 chmod 修改文件权限
语法: chmod [-R] xyz 文件名
(这里的xyz,表示数字)
-R 选项作用同chown,级联更改。
实例:
修改a.txt文件权限为当前用户可读可写,其他用户不可读不可写
chmod 700 a.txt
更改test文件夹以及文件夹内所有内容的权限为可读可写
chmod 777 test
[另:umask语法 (了解)
umask值为文件或目录默认权限需要减掉的数值
umask 可以在/etc/bashrc里面更改,预设情况下,root的umask为022,而一般使用者则为002,因为可写的权限非常重要,因此预设会去掉写权限。]
1.2 更改文件拥有者和群组
语法:chown [选项]... [所有者][:[组]] 文件...
选项:
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-deference 作用于符号链接的指向,而不是链接文件本身
[注:通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。]
[实例]
改变拥有者和群组:
chown root:root zhiyou
改变拥有者:
chown root a.txt
改变群组:
chown :smile a.txt
改变指定目录以及其子目录下的所有文件的拥有者和群组 :
chown -R -v root:mail test6
1.3 特殊属性
----chattr 修改文件的特殊属性
语法: chattr [+-=][ASaci [文件或者目录名]
+-= :分别为增加、减少、设定
A:增加该属性后,文件或目录的atime将不可被修改;
S:增加该属性后,会将数据同步写入磁盘中;
a:增加该属性后,只能追加不能删除,非root用户不能设定该属性;
c:自动压缩该文件,读取时会自动解压;
i:增加后,使文件不能被删除、重命名、设定连接、写入、新增数据;
增加i属性后不能在该目录中建立文件。
增加a属性后,只能追加不能删除。
[实例:]
用chattr命令防止系统中某个关键文件被修改:
chattr +i /zhiyou/test.conf
[然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf]
让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
chattr +a /zhiyou/msg.txt
----lsattr 列出文件/目录的特殊属性
语法: lsattr [-aR] [文件/目录名]
-a:类似与ls 的-a 选项,即连同隐藏文件一同列出;
-R:连同子目录的数据一同列出
[chattr 的属性是级联生效的,不仅对当前目录生效而且会对目录下的文件同样生效。]
【其他命令】
2.1 which
which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置。它一般用来确认系统中是否安装了指定的软件。
语法:which 可执行文件名称
[实例:]
[root@localhost Desktop]# which gcc
/bin/gcc
[root@localhost Desktop]# which ls
alias ls='ls --color=auto'
/bin/ls
[root@localhost Desktop]# which cd
/bin/cd
[注:查看环境变量:
echo $PATH]
【命令可以是下面四种形式之一:
是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。 属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++语言写成的程序, 也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby,等等。
是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,上面我本地环境中的 cd 命令,就是一个 shell 内部命令。
是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。 比如上面讲到的 cd 命令,在实验楼环境中就是一个 shell 函数。
是一个命令别名。我们可以定义自己的命令,建立在其它命令之上】
2.2 whereis (了解)
whereis命令主要用于定位可执行文件、源代码文件、帮助文件在文件系统中的位置。whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。
(1)命令语法
whereis [选项] 命令
(2)常用参数
参数描述
-b定位可执行文件
-m定位帮助文件
-s定位源代码文件
-u搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件
-B指定搜索可执行文件的路径
-M指定搜索帮助文件的路径
-S指定搜索源代码文件的路径
[实例:]
搜索 ls 帮助文件的路径:
whereis -m ls
2.3 locate
locate命令跟whereis命令类似,且它们使用的是相同的数据库。但whereis命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。
(1)命令格式
locate [选项] [搜索字符串]
(2)常用参数
参数描述
-q安静模式,不会显示任何错误讯息
-n至多显示 n 个输出
-r使用正规表达式做寻找的条件
-V显示版本讯息
【实例】
搜索 Desktop 目录下所有以 zhi 开头的文件:
locate Desktop/zhi
搜索etc目录下所有的cfg文件:
locate /etc/*.cfg
2.4 find【掌握】
find命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。Linux 下 find 命令提供了相当多的查找条件,功能很强大,对应的学习难度也比较大。
(1)命令格式
find [选项] [搜索路径] [表达式]
默认路径是当前目录,默认表达式为-print。
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作。
(2)常用参数
参数描述
-printfind 命令将匹配的文件输出到标准输出
-execshell 命令find 命令对匹配的文件执行该参数所给出的
-name按照文件名查找文件
-type查找某一类型的文件
-prune使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同 时使用-depth 选项,那么-prune 将被 find 命令忽略
-user按照文件属主来查找文件
-group按照文件所属的组来查找文件
-mtime -n +n按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n天,+n 表示文件更改时间距现在大于 n 天,find 命令还有-atime 和 -ctime 选项
[实例1:]
打印当前目录下的文件目录列表:
find . -print
打印当前目录下所有以.txt 结尾的文件名:
find . -name "*.txt" -print
打印当前目录下所有以.txt 或.pdf 结尾的文件名:
find .
\( -name "*.pdf" -or -name "*.txt" \)
打印当前目录下所有不以.txt 结尾的文件名:
find . ! -name "*.txt"
[实例2:]
打印当前目录下所有以.txt 结尾的符号链接:
find . -type l -name "*.txt" -print
打印当前目录下所有权限为 777 的 java 文件:
find . -type f -name "*.java" -perm 777
打印当前目录下 root 用户拥有的所有文件
find . -type f -user root
nl(number of line)
2.5 ln
ln命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
语法 ln [选项] 源文件 目标文件
选项:
-b或--backup:删除,覆盖目标文件之前的备份; -d或-F或——directory:建立目录的硬连接; -f或——force:强行建立文件或目录的连接,不论文件或目录是否存在; -i或——interactive:覆盖既有文件之前先询问用户; -n或--no-dereference:把符号连接的目的目录视为一般文件; -s或——symbolic:对源文件建立符号连接,而非硬连接;
【注:源文件:指定连接的源文件。如果使用-s选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;】
在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。
对硬链接有如下限制: 不能对目录文件做硬链接。 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
【文件打包与压缩】
介绍
在学习Linux上的压缩工具之前,有必要先了解一下常见常用的压缩包文件格式。在 Windows 上最常见的不外乎这三种 *.zip,*.rar 后缀的压缩文件。而在 Linux 上面常见的格式除了以上三种外,还有 *.gz,*.xz,*.bz2,*.tar,*.tar.gz,*.tar.xz,*.tar.bz2,简单介绍如下:
文件后缀名说明
*.zipzip 程序打包压缩的文件
*.rarrar 程序压缩的文件
*.7z7zip 程序压缩的文件
*.tartar 程序打包,未压缩的文件
*.gzgzip 程序(GNU zip)压缩的文件
*.xzxz 程序压缩的文件
*.bz2bzip2 程序压缩的文件
*.tar.gztar 打包,gzip 程序压缩的文件
*.tar.xztar 打包,xz 程序压缩的文件
*.tar.bz2tar 打包,bzip2 程序压缩的文件
*.tar.7ztar 打包,7z 程序压缩的文件
1.1 tar【重点掌握】
在 Linux 上面更常用的是 tar 工具,tar 原本只是一个打包工具,只是同时还是实现了对 7z、gzip、xz、bzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩。
语法:tar [-zjxcvfpP] filename
-z :是否同时用gzip压缩
-j :是否同时用bzip2压缩
-x :解包或者解压缩
-t :查看tar包里面的文件
-c :建立一个tar包或者压缩文件包
-v :可视化
-f :后面跟文件名,压缩时跟-f文件名,意思是压缩后的文件名为filename,解压时跟-f文件名,意思是解压filename。请注意,如果是多个参数组合的情况下带有-f,请把f写到最后面。
-p :使用原文件的属性,压缩前什么属性压缩后还什么属性。(不常用)
-P :可以使用绝对路径。(不常用)
【实例:】
将桌面上的zhiyou打成rar的包
tar -cvf zhiyou.rar zhiyou
将zhiyou删除,解压缩rar
tar -xvf zhiyou.rar
将桌面上的zhiyou打成tar的包,并进行压缩
tar -cvf zhiyou.tar.gz zhiyou
将zhiyou删除,解压缩rar
tar -xvf zhiyou.tar.gz
1.2 gzip
[注:gzip只能压缩文件,不能压缩目录]
语法:gzip [-d#] filename 其中#为1-9的数字
-d :解压缩时使用
-# :压缩等级,1压缩最差,9压缩最好,6为默认
[实例:]
压缩aa.txt文件:
gzip aa.txt (压缩之后,变成了aa.txt.gz)
解压缩
gzip -d aa.txt.gz
1.3 bzip2
语法:bzip2 [-dz] filename
-d :解压缩
-z :压缩
压缩:
bzip2 -z aa.txt (压缩之后,变成了aa.txt.bz2)
解压缩:
bzip2 -d aa.txt.bz2