对《Linux的常用命令和基本操作》http://www.linuxidc.com/Linux/2011-08/40075.htm的补充:
查看文件内容类型:
[root@www.linuxidc.com ~]# file /etc/inittab
/etc/inittab: ASCII English text
查看系统时间并进行修改:
[root@www.linuxidc.com ~]# date
Tue Jul 19 10:49:49 CST 2011
[root@www.linuxidc.com ~]#date MMDDhhmm[[CC]YY][.ss]
显示指定时间:
[root@www.linuxidc.com ~]# date +”%y%m%d%H%M%S” 其中年月日均是小写,时分秒为大写;D显示当前日期,s显示当前从1975.1.1到现在的秒数。
110719105123
建立以当前系统时间为文件名的文件:
[root@www.linuxidc.com ~]# touch a-`date +”%y-%m-%d-%H-%M-%S”`
[root@www.linuxidc.com ~]# ls
a a-11-07-19-10-54-45 Desktop install.log install.log.syslog
其中 ` ` 为命令替换符,起作用是将 ` …` 中的指令执行,并返回结果。
显示当前的硬件时间:
[root@www.linuxidc.com ~]# clock
Tue 19 Jul 2011 01:01:39 PM CST -0.612533 seconds
修改硬件时间:hardwareclock
[root@www.linuxidc.com ~]# hwclock –s 当前系统与硬件时间同步sync;
[root@www.linuxidc.com ~]# hwclock –w 当前系统时间写入硬件write。
查看命令的类型:
[root@www.linuxidc.com ~]# type cd 此命令为内部命令,为shell自身所带,没有二进制文件目录。
cd is a shell builtin
[root@www.linuxidc.com ~]# type mount 此命令是外部命令,在路径内会有一个可执行的实体。
mount is /bin/mount
获得命令的帮助信息
命令 –help
[root@www.linuxidc.com ~]# touch –help 对绝大部分的外部命令有效。
help 命令
eg:
[root@www.linuxidc.com ~]# help cd 对绝大部分内部命令有效。
但是,由help提供的大多数是简略信息。
详细的说明手册查看man(manual):
[root@www.linuxidc.com ~]#man 章节号 查询的指令
-f 相当于 whatis
章节号的获取:
[root@www.linuxidc.com ~]# whatis mount
mount (2) – mount and unmount filesystems
mount (8) – mount a file system
mount.cifs [mount] (8) – mount using the Common Internet File System (CIFS)
mount.nfs4 [mount] (8) – mount a Network File System
mount.nfs [mount] (8) – mount a Network File System
其中()内的数字代表所该命令在哪些章节有内容。
注:在第一次使用whatis命令时,有时可能无法使用,则需要使用makewhatis来生成whatis数据库。
[root@www.linuxidc.com ~]# ls /usr/share/man/man 1~8 中存在说明内容。
man章节的说明:
1. 普通用户命令;
2. 系统调用;
3. 库调用;
4. 特殊文件;
5. 文件格式,配置文件的语法说明;
6. 游戏说明;
7. 杂项说明;
8. 只有root才能使用的命令的说明。
Ps:如使用xshell终端访问man的说明文档,经常会出现乱码的情况。此时输入命令
[root@www.linuxidc.com ~]# export LANG=c即可修正。
在man显示的文档中:
q 退出;
/+字符 自上向下的查找;
?+字符 自下向上的查找;
查找出的内容以反白显示,n和shift+n来回切换光标在反白字体上的位置。
文本文件的查看
cat查看其具有concatenate(联接)和dump(倾倒式显示)
[root@www.linuxidc.com ~]# cat 文件1,文件2,文件3,……
可以次联接显示多个文档
-n 查看文档时加上行号;
-e 查看时行结尾显示结束符(^$)
less查看工具:
[root@www.linuxidc.com ~]# less 文本文档
man显示说明内容的就是less查看工具
q 退出;
/+字符 自上向下的查找;
?+字符 自下向上的查找;
查找出的内容以反白显示,n和shift+n来回切换光标在反白字体上的位置。
head查看工具:
root@www.linuxidc.com ~]# head -15 /etc/inittab
-n 数字,-数字 显示文档开头的第n行。
tail查看工具:
root@www.linuxidc.com ~]# tail -15 /etc/inittab
-n 数字,-数字 从下向上显示n行文档。
-f 显示后不退出保持显示界面(多用于监视日志文档)
显示文本文件的内容信息:
[root@www.linuxidc.com ~]# wc /etc/inittab
53 229 1666 /etc/inittab
行数 词数 字节大小
-l 行数
-w 单词数
-c 文档的字节数
-L 最长行的长度
Linux系统的用户管理:
用户user:获取系统资源的凭证
群组group:某个权限的集合,任何加入该组的人都自动获得相同权限
加入群组:键入密码;root指派用户加入
用户名和群组名在系统中是以UID和GID的形式被系统读取的
UID范围0~65535;
root用户uid=0;
系统用户 1~499;
普通用户 500~65535;
nobody(guest来宾账号)-1;
GID同上。
群组又分为私有组和公共组:
私有组(基本组):用户名与组名相同,该组为用户的私有组;对其他用户来说是基本组。
公共组:没有用户名与之相同的组,即大家都能加入的组。
权限:
文件的权限应注意:文件的w权限指是否能对其内容进行修改;目录则是能否在其下新建删除等操作;x权限对于文件是是否能够执行;对于目录文件则是能否进入该目录。
文件类型
当为[ d ]则是目录。
当为[ – ]则是档案。
若是[ l ]则表示为连结档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
新建用户和群组:
[root@www.linuxidc.com ~]#useradd 选项 用户名
-u 自定义新用户的uid,不加此选项则是系统默认
-g 指定私有组的gid或groupname
-G指定附加组的gid或groupname (可跟多个组 grp1,grp2,grp3…)
注意:无论是-g还是-G都只能加入已经存在的组。
-c 指定详细信息
-d 指定新用户的家目录
-s 指定新用户的shell
[root@www.linuxidc.com ~]#groupadd 选项 群组名
-g 自定义新群组的gid,不加此选项则是系统默认
用户密码的添加和修改:
[root@www.linuxidc.com ~]#passwd 选项 用户名
-l 上锁用户
-u 解锁用户
-x 修改最长使用期限
-n 修改最短使用期限
–stdin将标准输入更改为别的输入
修改用户属性和组属性:
用户属性修改usermodify
[root@www.linuxidc.com ~]#usermod 选项 选项对应的属性
-u 修改uid
-g修改私有组(可gid或者grpname)
-G修改公共组(此选项为覆盖原有)
-aG修改公共组-append 向原有添加
-d 修改家目录
-c 修改详细信息
-s 修改用户shell
-l修改登录账号名称(等同于重新创建用户)
群组属性修改groupmod
[root@www.linuxidc.com ~]#groupmod 选项 选项对应的属性
-g 修改gid数值
-n 修改组名
删除用户和群组
[root@www.linuxidc.com ~]#userdel 选项 用户名
-r 删除用户时同时删除家目录
[root@www.linuxidc.com ~]#groupdel 群组名
用户相关信息的查看
[root@www.linuxidc.com ~]#id 用户名 查看用户的uid gid等信息
[root@www.linuxidc.com ~]#finger 用户名 查看用户的详细信息以及家目录
[root@www.linuxidc.com ~]#who 查看当前系统有哪些用户登录
与用户和群组有关的文件夹:
用户账号:/etc/passwd
用户密码:/etc/shadow
群组账号:/etc/group
群组密码:/etc/gshadow
新建用户:
[root@www.linuxidc.com ~]#useradd 用户名
此时可查看/etc/passwd
eg:
[root@www.linuxidc.com ~]#useradd hu
[root@www.linuxidc.com ~]#tail -5 /etc/passwd 从下向上查看5行
hu:x:503:503: :/home/hu:/bin/bash
用户名:密码:uid:gid:详细信息:家目录:用户使用的shell
添加密码:
[root@www.linuxidc.com ~]#passwd hu
[root@www.linuxidc.com ~]#tail -5 /etc/shadow 在/etc/shadow文件中找到新用户hu的密码信息
hu : ! ! : 15174 : 0 : 99999 : 7 : : :
① ② ③ ④ ⑤ ⑥ ⑦ ⑧
①用户名
②MD5加密后的密码(!!说明还未设定密码,此时该用户未锁定状态)
③密码最后一次被修改的时间(从1970.1.1开始以秒计算,date +”%s”/86400)
④密码最短使用期限(防止用户频繁修改)
⑤密码最常使用期限(到期提示修改密码)
⑥密码将过期时,提前通知的天数
⑦密码过期后多少天被禁用
⑧账号最大使用期限(空置即为无限制)
MD5加密后的密码:
以提取原始密码特征值的方法生成新密码,以防止被逆推出来;
具有雪崩效应,即原始密码发生极微小的变化加密后就会变化很大;
加密后的密码定长输出;
hu : $1$salt$xxxxxxx: 15174 : 0 : 99999 : 7 : : :
加密后密码的格式为$1$salt$xxxxxx
1代表MD5加密;
salt代表系统随机加入的数值,防止A与B密码相同A由相同的MD5值来获知B的密码,系统随机加入数据片段后,使得即使原始密码相同最后的MD5值也不可能相同。
xxxxxx代表与salt一起经过MD5加密后的原始密码部分。
Linux文件权限和属性的修改文件权限的修改:
-rwxrwxrwx
u g o
①其中r=4 w=2 x=1 可根据数值来修改权限
[root@www.linuxidc.com ~]#chmod 755 文件名 此时修改后的权限为 –rwxr-xr-x
②使用 = 来规定 u g o (user group other)的权限
[root@www.linuxidc.com ~]#chmod o= — 文件名 此时其他权限不变 o没有任何权限
③使用 + – 来添加和删减权限
[root@www.linuxidc.com ~]#chmod u+x,go-w 文件名 u添加x,g和o删去w,;注意其间用逗号连接
-R递归修改
–reference=文件a 文件b b参照a的权限修改
文件属主和属组的修改:
[root@www.linuxidc.com ~]#chown 选项 属主:属组 文件名
-R 递归修改
–reference=文件a 文件b b参照a的属住属组修改
[root@www.linuxidc.com ~]#chown –R RedHat:redhat a 将a目录的属组属主全都更改为redhat
[root@www.linuxidc.com ~]#chgrp 选项 属组 文件名
-R 递归修改
–reference=文件a 文件b b参照a的属住属组修改
BASH功能的介绍
<!–[if !supportLists]–>1. <!–[endif]–>命令行编辑
ctrl+a 光标跳到命令行的前端
ctrl+e 光标跳到命令行的尾部
ctrl+u 删除光标前内容
ctrl+k 删除光标后内容
<!–[if !supportLists]–>2. <!–[endif]–>文件名通配
多与ls命令配合使用
*:为任意长度通配符;
?:为单字通配符;
[]:[]括号内内容单个匹配;eg:以abc任意一个字母开头的文件名:[abc]*
650) this.width=650;” border=0>
[:alpha:]指代任意字母
[:digit:]指代任意数字
[:lower:]指代小写字母
[:upper:]指代大写字母
[:space:]指代空字符
eg:以字母开头的紧接着是数字的文件
[[:alpha:]][[:digit:]]*
eg:显示/etc目录下的字母数字开头的文件
[root@www.linuxidc.com ~]# ls /etc/[[:alpha:]][[:digit:]]*
/etc/a2ps.cfg /etc/a2ps-site.cfg
<!–[if !supportLists]–>3. <!–[endif]–>命令行和路径补全功能
输入命令时补全键位TAB键,若无法补全 连续按两次TAB,显示与当前字符匹配的所有命令。
输入文件路径时按TAB会补全与之先匹配的路径。
4.命令行展开
~:对应用户的家目录。
{}:eg:mkdir –pv {x,y}_{1,2,3} 则在当前目录下生成x1,x2,x3,y1,y2,y3六个文件。
5.命令行扩展
$()或 ` `反引号
[root@www.linuxidc.com ~]# touch a-`date +”%y-%m-%d-%H-%M-%S”`
[root@www.linuxidc.com ~]# ls
a a-11-07-19-10-54-45 Desktop install.log install.log.syslog
其中 ` ` 为命令替换符,起作用是将 ` …` 中的指令执行,并返回结果。
脚本的简单介绍
脚本script:就是命令的堆砌。
变量引用:
[root@www.linuxidc.com ~]#ab=myfile 定义一个变量
[root@www.linuxidc.com ~]#touch “$sb” $变量 返回变量的值
生成文件名为myfile的文件
$变量:返回变量的值
‘ ‘ :强引用,单引号内不会发生变量替换;
“ “:弱引用,双引号内会发生变量替换。
简单脚本的编写:
脚本开头固定格式#!/bin/bash
实例:
写一个脚本:
复制/etc/skel目录至/home,并且重命名为CentOS
设定此目录及其内部文件或子目录的属主属组为redhat用户,redhat组
设定此目录及其内部文件或子目录的权限为属组和其它用户没有任何权限
修改redhat用户的家目录为/home/centos
切换至redhat用户,验正其家目录是否正常可用
脚本实现:
#!/bin/bash
#
cp -R /etc/skel /home/centos
ls -ldh /home/centos
chown redhat:redhat /home/centos -R
ls -ldh /home/centos
chmod 700 -R /home/centos
ls -lh /home/centos
usermod -d /home/centos redhat
finger redhat
su – redhat
运行脚本:
[root@www.linuxidc.com ~]# nano myscript.sh
[root@www.linuxidc.com ~]# ./myscript.sh
drwx—— 4 redhat redhat 4.0K Jul 19 13:58 /home/centos
drwx—— 4 redhat redhat 4.0K Jul 19 13:58 /home/centos
total 8.0K
drwx—— 3 redhat redhat 4.0K Jul 19 13:58 skel
Login: redhat Name: (null)
Directory: /home/centos Shell: /bin/bash
Never logged in.
No mail.
No Plan.
[redhat@www.linuxidc.com ~]$ pwd
/home/centos
写一个脚本:
1、创建目录/tmp/scripts
2、切换工作目录至此目录中
3、复制/etc/pam.d目录至当前目录,并重命令为test
4、将当前目录中的test及其里面的文件和子目录的属主改为redhat
5、将test及其子目录中的文件的其它用户的权限改为没有任何权限
脚本内容:
#!/bin/bash
mkdir -p /tmp/scripts
ls -ldh /tmp/scripts
cd /tmp/scripts
pwd
cp -R /etc/pam.d test
ls -l test
chown redhat:redhat test -R
ls -l test
chmod -R o=— test
ls -l test
执行脚本:
[root@www.linuxidc.com ~]# ./testscript1.sh
执行结果:
total 552
-rw-r—– 1 redhat redhat 390 Jul 19 14:20 atd
-rw-r—– 1 redhat redhat 97 Jul 19 14:20 authconfig
-rw-r—– 1 redhat redhat 97 Jul 19 14:20 authconfig-gtk
-rw-r—– 1 redhat redhat 97 Jul 19 14:20 authconfig-tui
-rw-r—– 1 redhat redhat 192 Jul 19 14:20 chfn
-rw-r—– 1 redhat redhat 192 Jul 19 14:20 chsh
-rw-r—– 1 redhat redhat 232 Jul 19 14:20 config-util
……
写一个脚本:
1、显示当前系统日期和时间,而后创建目录/tmp/lstest
2、切换工作目录至/tmp/lstest
3、创建目录a1d, b56e, 6test
4、创建空文件xy, x2y, 732
5、列出当前目录下以a、x或者6开头的文件或目录;
6、列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录;
脚本内容:
#!/bin/bash
date
mkdir /tmp/lstest
cd /tmp/lstest
mkdir a1d b56e 6test
touch xy x2y 732
ls -ldh
ls -ldh [ax6]*
ls -ldh [[:alpha:]][[:digit:]]*
执行脚本:
[root@www.linuxidc.com ~]# ./testscript2.sh
执行结果:
Tue Jul 19 14:49:02 CST 2011
drwxr-xr-x 5 root root 4.0K Jul 19 14:49 .
drwxr-xr-x 2 root root 4.0K Jul 19 14:49 6test
drwxr-xr-x 2 root root 4.0K Jul 19 14:49 a1d
-rw-r–r– 1 root root 0 Jul 19 14:49 x2y
-rw-r–r– 1 root root 0 Jul 19 14:49 xy
drwxr-xr-x 2 root root 4.0K Jul 19 14:49 a1d
drwxr-xr-x 2 root root 4.0K Jul 19 14:49 b56e
-rw-r–r– 1 root root 0 Jul 19 14:49 x2y
注意:ls –d 显示目录自身的属性,而不是目录中的文件。
eg:
①:不加-d
[root@www.linuxidc.com ~]# ls -l /tmp/lstest/[[:alpha:]][[:digit:]]*
-rw-r–r– 1 root root 0 Jul 19 14:34 /tmp/lstest/x2y
/tmp/lstest/a1d:
total 0
/tmp/lstest/b56e:
total 0
②:加-d之后
[root@www.linuxidc.com ~]# ls -ld /tmp/lstest/[[:alpha:]][[:digit:]]*
drwxr-xr-x 2 root root 4096 Jul 19 14:34 /tmp/lstest/a1d
drwxr-xr-x 2 root root 4096 Jul 19 14:34 /tmp/lstest/b56e
-rw-r–r– 1 root root 0 Jul 19 14:34 /tmp/lstest/x2y
两者本质如下:
[root@www.linuxidc.com ~]# ls -ld /tmp/lstest/ a1d
[root@www.linuxidc.com ~]# ls -l /tmp/lstest/ a1d
的区别,由于a1d是目录文件所以不加-d就查看其目录下的内容了。