linux笔记
- 1 linux command
- 1.1 cat
- 1.2 ls
- 1.3 echo
- 1.4 sort
- 1.5 awk
- 1.6 df
- 1.7 du
- 1.8 fsck
- 1.9 dumpe2fs
- 1.10 rpm
- 1.10.1 rpm校验
- 1.10.2 rpm包中文件提取
- 1.10.3 源码包与rpm包的区别
- 1.11 yum
- 1.12 head
- 1.13 tail
- 1.14 chmod
- 1.15 chown
- 1.16 systemctl
- 1.17 chkconfig
- 1.18 mount
- 1.18.1 挂载命令格式
- 1.18.2 挂载光盘
- 1.18.3 卸载光盘
- 1.18.4 挂载u盘
- 1.18.5 ntfs u盘支持
- 1.19 swap
- 1.20 free
- 1.21 compression 压缩 command
- 1.21.1 gzip
- 1.21.2 bz2
- 1.21.3 xz
- 1.21.4 zip
- 1.22 tar
- 1.22.1 *.tar.gz
- 1.22.2 *.tar.bz2
- 1.23 locate
- 1.24 find
- 1.24.1 根据文件名查找:
- 1.24.2 根据文件从属关系查找:
- 1.24.3 根据文件的类型查找:
- 1.24.4 根据文件的大小查找:
- 1.24.5 根据时间戳查找
- 1.24.6 根据权限来查找:
- 1.24.7 处理动作:
- 1.25 history
- 1.26 vim
- 1.27 useradd
- 1.28 userdel
- 1.29 id
- 1.30 usermod
- 1.31 groupadd
- 1.32 su
- 1.33 chage
- 1.34 passwd
- 1.35 gpasswd
- 1.36 groups
- 1.37 date
- 1.38 hwclock
- 1.39 ln
- 1.40 selinux
- 1.41 crontab
- 1.42 fdisk
- 2 linux the document
- 2.1 用户和用户组管理
- 2.1.1 /etc/passwd:用户信息文件
- 2.1.2 影子文件:/etc/shadow
- 2.1.3 组信息文件/etc/group
- 2.1.4 组密码文件/etc/gshadow
- 2.1.5 用户的家目录
- 2.2 linux的特殊权限
- 2.2.1 suid
- 2.2.2 sgid
- 2.2.3 sticky
- 2.3 facl
- 2.4 文件系统属性chattr权限
- 2.5 sudo权限
- 2.6 linux下查看帮助命令
- 2.7 linux根目录结构和文件系统
- 3 shell
- 3.1 shell更改
description:"【中文中括号】"表示单一的解释,不在所属的问题之中,勿需与所在命令比较。
red coloured words 表示重点,linux不同文件类型以不同颜色区分。本文档中出现的color与linux系统相对应。
blue coloured words 为给出的例子。 →:表示换行。
linux the document出现的黑色背景矩形方框为区别给出的例子
color= #ff1493 区分red标记. 背景color=#778899叙述或解释。
typeface color=#ff6347区分标题
本文档部分内容参考于网友个人博客以及各大搜索网站 禁止分享
1 linux command
[root@pan ~]# root:登录的用户 @分隔符 pan主机名 ~当前路径
\:newline
1.1 cat
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒著写!
nl 显示的时候,顺道输出行号!
-a:查询所有的内容包括隐藏字符
1.2 ls
-f:在每个输出项后追加文件的类型标识符,具体含义:“*”表示具有可执行权限的普通文件,“/”表示目录,“@”表示符号链接,“|”表示命令管道fifo,“=”表示sockets套接字。当文件为普通文件时,不输出任何标识符;
1.3 echo
#echo [选项][输出内容]
-e:支持反斜线控制的字符转换
控制字符 | 作用 |
\\ | 输出\本身 |
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出行末的换行符,和“-n”选项一致 |
\e | escape键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是tab键 |
\v | 垂直制表符 |
\0nm | 按照八进制ascii码输出字符,其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ascii码表输出字符。其中hh是两位十六进制数。 |
echo -e "\e[1;31m abcd \e[0m" 输出颜色
=30m 黑色,=31m 红色,=32m 绿色,
=33m 黄色,=34m 蓝色,=35m 洋红,
=36m 青色,=37m 白色。
#echo -e ab\bc
1.4 sort
sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,不加参数时依次按ascii码值进行比较,最后将他们按升序输出
-n :依照数值的从小到大排序;
-r :以相反的顺序来排序;
-u :忽略相同行使用-u选项或者uniq 文件名
-t <分隔符>:指定排序时所用的栏位分隔字符;
-k 是指定需要排序的栏位(字母按ascii排序,数字按从小到大。先数字后字母)
[root@mail text]# sort -nrk 3 -t: sort.txt 将cc列数字从大到小顺序排列:
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6
aaa:bb:cc 列
1.5 awk
- awk '{print $1}' 文件名 $1第一列,$2第二列,$nf最后一列.$(nf-1)倒数第二列)。 现在是以文件的空格为分隔符这样打印
- awk -f ":" '{print $1}' /etc/passwd -f指定分隔符,并打印文件第一列
多列打印 [root@pan ~]# awk -f ":" '{print $2 $3}' /etc/passwd 这样打印$2 $3之间是没有分隔符 要加分隔符就是 awk -f ":" '{print $2"分隔符符号"$3}' /etc/passwd $0表示整个文件
1.6 df
文件系统查看命令
-a:显示所有的文件系统信息信息,包括特殊文件系统,如,/proc,/sysfs
-h:使用习惯单位显示容量,如kb,mb或gb等。
-t:显示文件系统类型
-m: 以mb为单位显示容量。
-k:以kb为单位显示容量,默认就是以kb为单位显示容量。
du命令和df命令的区别 df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间) du命令是面向文件的,只会计算计算机文件或目录占用的空间。 |
1.7 du
是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在 的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和
-h : 以k,m,g为单位,提高信息的可读性。
-s : 统计总占用量,而不列出子目录和子文件的占用量。
ls -h是目录下文件名占用大小 du -h 是目录下所有文件的大小
-k : 以kb(1024bytes)为单位输出。
-m : 以mb为单位输出。
-a显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量。
1.8 fsck
文件系统修复命令
fsck [选项] 分区设备文件名
-a:不显示用户提示,自动修复文件系统
-y:自动修复。和-a作用一致,不过有些文件系统只支持-y
1.9 dumpe2fs
显示磁盘状态命令
#dumpe2fs 分区设备名
1.10 rpm
rpm是linux标准基础(lsb)兼容发行版所使用的一种软件包管理器,用来对软件包进行低级处理rpm可以查询、安装、检验、升级和卸载软件包,它多数用于基于fedora的系统,比如rhel和centos
只有安装和升级要加包全名。-ivh: -i:安装,-v:显示详细信息,-h:显示进度,--nodeps:不检测依赖性。
-uvh包全名:rpm包升级.
-q :接软件包名字 #查询软件是否已经安装 -q(查询query)
-qa :#查询所有已经安装的rpm包。-a(所有all)
-qi :包名字#查询软件包详细信息 -i :显示软件包的相关信息
-ql 包名:查询软件包安装位置 -l :显示套件的文件列表。
-qf +系统文件名。查看一个文件是由哪个包安装的
-qip 包全名:查询未安装软件包信息,必须在软件包目录进行查询。
-qr :查询软件包的依赖性。
-qrp :查询未安装软件包的依赖性必须在packages目录查询。
-e 包名:卸载软件。
rpm -qf `which 程序名` #返回软件包的全名 已安装的软件包 rpm -qif `which 程序名` #返回软件包的有关信息 rpm -qlf `which 程序名` #返回软件包的文件列表 |
1.10.1 rpm校验
#rpm -v 已安装的包名
选项:-v 校验指定rpm包中的文件。(verify)
[root@tiger ~]#rpm -v httpd
s.5....t. c /etc/httpd/conf/httpd.conf
验证内容中的8个信息的具体内容如下:
s:文件大小是否改变;
m:文件的类型或文件的权限(r w x)是否被改变;
5:文件md5校验和是否改变(可以看成文件的内容是否改变);
d:设备的主,从设备号是否改变;
l:文件路径是否改变;
u:文件的属主(所有者)是否改变;
g:文件的属组是否改变;
t:文件的修改时间是否改变;
文件类型:
c :配置文件(config file)
d :普通文档(documentation)
g :"鬼"文件(ghost file),很少见,就是该文件不应该被这个rpm包包含
l :授权文件(license file)
r :描述文件(read me)
1.10.2 rpm包中文件提取
#rpm2cpio 包全名 | \ cpio -idv .文件绝对路径 反斜杠:换行的作用。 rpm2cpio:将rpm包转换为cpio格式的命令。
cpio:是一个标准工具,他用于创建软件档案文件和从档案文件中提取文件。
#cpio 选项 < [文件|设备]
选项: -i:copy-in模式,还原
-d:还原时自动新建目录
-v:显示还原过程
#rpm -qf /bin/ls 查询ls命令属于哪个软件包
#mv /bin/ls /tmp 造成ls命令误删除的假象
#rpm2cpio /mnt/packages/coreutils-8.4-37.el6.x86_64.rpm | cpio -idv ./bin/ls 提取rpm包中ls命令到当前目录的/bin/ls下
cp /root/bin/ls /bin 把ls命令复制到/bin目录,修复文件丢失。
1.10.3 源码包与rpm包的区别
安装在指定位置当中,一般是/usr/local/软件名/。
rpm包安装的服务可以使用系统服务管理命令(service)来管理,例如rpm包安装apache的启动方法是:
/etc/rc.d/init.d/httpd start: 绝对路径启动服务。
service httpd start
源代码保存位置:/usr/local/src/
软件安装位置:/usr/local/
如何确定安装过程报错:安装过程停止;并出现error、warning或no的提示。
源码包安装过程:
下载源码包;解压缩下载的源码包;进入解压缩目录。
crt中sftp里面要设置远程的路径和本地的路径: cd 1 进入远程连接到的linux的1目录 lcd \text 本地的c盘text目录 get abc.c 从远程目录得到文件abc.c放入本地目录text put a11.txt 从windows上将文件a11.txt传入linux |
源码包配置:
./configure软件配置与检查
1. 定义需要的功能选择。
2. 检测系统环境是否符合安装需求。
3. 把定义好的功能选项和检测系统环境的信息都写入makefile文件,用于后续的编辑。
./configure --prefix=/usr/local/apache2安装路径
详情参考install
源码包的卸载:
不需要卸载命令,直接删除安装目录即可,不会遗留任何垃圾文件。
脚本安装包:
脚本安装包并不是独立的软件包类型,常见安装的是源码包。
是人们把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
非常类似于windows下软件的安装方式。
1.11 yum
能够从指定的服务器自动下载rpm包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
remove :删除指定的rpm软件包; yum -y remove 软件包名
yum update +包名 :升级。 禁用
yum grouplist:列出所有可用的软件组列表;
yum groupinstall 软件组名:安装指定的软件组,组名可以由goruplist查询出来;
yum groupremove:卸载指定软件组;
配置yum仓库: [base] name=centos baseurl=file:///mnt/ enabled=1 gpgcheck=0
1.12 head
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行
-n:显示文件的前n行 head -n 5 a.txt 显示文件的前5行
-c显示文件前n个字节 head -c 20 a.txt
head -c -32 log2014.log文件的除了最后n个字节以外的内容
head -n -6 log2014.log 输出文件除了最后n行的全部内容
1.13 tail
主要用来从指定点开始将文件写到标准输出。很多人喜欢使用tail -f 来监控日志文件。
-f该参数用于监视文件的增长 tail -f filename 监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下ctrl+c。
-n从指定行位置读取指定文件。tail -n 20 filename 显示filename最后20行。
-c显示文件最后n个字节 tail -c 20 a.txt
1.14 chmod
chmod命令用来变更文件或目录的权限,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件
-f :若该文件权限无法被更改也不要显示错误讯息
-r :对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
r=读取属性 值=4 w=写入属性 值=2 x=执行属性 值=1
1.15 chown
改变某个文件或目录的所有者和所属的组
grammar:chown user:group 对象
chown user 对象 chown :group 对象
1.16 systemctl
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起
1.17 chkconfig
1.服务概述: 在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动关闭。 将需要自动启动的脚本/etc/rc.d/init.d目录下,然后用命令chkconfig --add filename将自动注册开机启动和关机关闭。实质就是在rc0.d-rc6.d目录下生成一些文件连接,这些链接连接到/etc/rc.d /init.d目录下指定文件的shell脚本。 |
--list :列出所有系统服务
--add httpd:增加httpd服务。
--del httpd:删除httpd服务。
--list mysqld:列出mysqld服务设置情况
--level 35 mysqld on:设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭。
chkconfig mysqld on:设定mysqld在各等级为on,“各等级”包括2、3、4、5等级。
chkconfig 设置是当前不生效,linux重启后才生效. service 设置是即时生效,linux关机重启后设置失效 |
1.18 mount
查询与自动挂载(auto mount)
#mount [-l]
查询系统中已经挂载的设备,-l会显示卷标名称
#mount -a
依据配置文件/etc/fstab的内容,自动挂载
1.18.1 挂载命令格式
#mount [-t 文件系统] [-l卷标名] [-o特殊选项] 设备文件名 挂载点
-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
-l 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项:可以指定挂载的额外选项。
#mount -o remount,noexec /home这里的/home是df可以查看到的分区重新挂载/home分区,并使用noexec权限
#cd /home
#vi hello.sh
#!/bin/bash echo "i love you" |
#chmod 755
#./hello.sh 会显示没有权限执行
#mount -o remount,exec /home 记得改回来,要不然会影响系统启动的。
1.18.2 挂载光盘
#mkdir /mnt/cdrom 建立挂载点
#mount -t iso9660 /dev/cdrom /mnt/cdrom 挂载光盘
#mount /dev/sr0 /mnt/cdrom
1.18.3 卸载光盘
#umount设备文件名或挂载点
#umount /mnt/cdrom
1.18.4 挂载u盘
fat32格式:
#fdisk -l 查看u盘设备文件名 #mount -t vfat /dev/sdb1 /mnt/usb/ 注意:fat16分区识别为fat,fat32分区识别为vft。linux默认是不支持ntfs文件系统的 |
1.18.5 ntfs u盘支持
下载ntfs-3g插件
解压 tar -zxvf filename
安装 ./configure && make && make install
fdisk -l查看linux的u盘分区:sdc1
#mount -t ntfs-3g /dev/sdc1 /mnt/usb/ #mkfs -t ext4 /dev/sdb1/ 格式化分区,扩展分区不可格式
#mkdir /disk1 建立挂载点
#mount /dev/sdb1 /disk1 挂载
1.19 swap
新增swap空间:free查看swap大小
新增一个分区,改分区号82,保存退出
格式化:mkswap /dev/sdb6
加入swap分区:swapon /dev/sdb6
取消swap分区:swapoff /dev/sdb6 但是每次开机都要手动挂载一遍,可以写入fatab开机自动挂载
vi /etc/fstab
/dev/sdb6 swap swap defaults 0 0
1.20 free
显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
-b :以byte为单位显示内存使用情况;
-k :以kb为单位显示内存使用情况;
-m :以mb为单位显示内存使用情况;
total:去掉为硬件和操作系统保留的内存后剩余的内存总量。许多人奇怪自己的电脑安装了一共8g的内存,但是显示总共只有七点几g的,现在应该没什么疑惑了把,不管linux还是windows都会有部分内存是保留给硬件和操作系统的!
userd:当前已使用的内存总量。
free:空闲的或可以使用的内存总量
shared:共享内存大小,主要用于进程间通信
buff(buffers):缓冲,主要用于块设备数据缓冲(磁盘缓存大小),例如记录文件系统的metadata(目录、权限等等信息)。是指在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度再集中写入硬盘,减小了磁盘碎片和硬盘反复寻道,加速了数据的写入过程。
cache:缓存,主要用于文件内容缓冲,是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程。
available:可以使用的内存总量.
1.21 compression 压缩 command
1.21.1 gzip
gzip filename压缩 *.gz :"后缀名"
gzip -d filename.gz gunzip filename.gz 解压缩
不解压查看:zcat filename.gz
1.21.2 bz2
bzip2 filename压缩 *.bzip2:"后缀名"
bzip2 -k filename 保存源文件压缩
bzip2 -d filename.bz2 bunzip2 filename.bz2解压缩
不解压查看:bcat filename.bz2
1.21.3 xz
xz filename压缩 .xz:"后缀名"
xz -d filename.xz 解压缩
unxz -k filename.xz 保存源文件解压
1.21.4 zip
zip默认保存源文件,可以压缩目录
解压:unzip filename.zip
压缩:zip filename.zip dirname
-r :递归处理,将指定目录下的所有文件和子目录一并处理;
1.22 tar
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的
tar cf file.tar files 将一个或多个文件、目录打包到tar包。
tar rf file.tar file 将文件file添加到tar包中。
tar uf file.tar file 将文件file更新tar包中相应的文件。
tar tf file.tar 查看tar内容。
tar xf file.tar 解压tar包。
-z:有gzip属性,即需要用 gzip 压缩
-j:有bz2属性,即需要用 bzip2 压缩
-v:显示处理过程
-c:指定解压输出目录 tar zxvf test.tar.gz -c test
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名
-z:有compress属性的
-o:将文件解开到标准输出
格式:tar zcf file.tar.z files 将一个或多个文件、目录压缩到file.tar.z中。需要安装了ncompress软件包才行。
解压.tar.z文件。格式:tar zxf file.tar.z
归档并压缩:使用时间格式打包数据:
tar zcf etc-$(date +%f).tar.gz /etc tar zcf etc-`date +%f`.tar.gz /etc
1.22.1 *.tar.gz
归档并调用gzip压缩 tar -zcf 新文件名.tar.gz /etc/passwd /var/log/messagages
调用gzip解压缩并展开归档 tar -zxvf filename.tar.gz
1.22.2 *.tar.bz2
归档并调用bzip2压缩 tar -jcf 新文件名.tar.bz2 /etc/passwd /var/log/messages
调用bzip解压缩并展开归档 tar -jxf filename.tar.bz2
1.23 locate
其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。
所以你要知道:
1. locate的速度比find快,因为它并不是真的查找文件,而是查数据库
2. locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护
3. 升级数据库命令:locate -- u
centos系统找不到locate命令,原因是系统中没有安装 mlocate 这个包,然后更新数据库:updatedb 。
-c :只显示找到条目的号码
-b :匹配唯一的路径名称的基本文件名
-r :基于基本正则表达式进行匹配操作
1.24 find
实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找:
1.24.1 根据文件名查找:
-name "pattern"
-iname "pattern" 支持glob风格的通配符: *,?,[],[^] i忽略大小写
-regex pattern :基于正则表达式查找文件,匹配整个路径而非其名;
1.24.2 根据文件从属关系查找:
-user username:查找属主指定用户的所有文件;
-goup groupname:查找属组指定组的所有文件;
-uid uid:查找属主指定的uid的所有文件;
-gid gid:查找属组指定的gid的所有文件;
-nouser :查找没有属主的文件;
-nogroup :查找没有属组的文件;
1.24.3 根据文件的类型查找:
-type type :按name查找
f:普通文件 d:目录 l:符号链接文件 b:块设备文件 c:字符设备文件
p:管道文件 s:套接字文件 【 ./可执行文件 】
组合测试: 与:-a,默认组合逻辑; 或:-o; 非:-not,!
!a -a !b =!(a -o b) !a -o !b =!(a -a b) 例:查找tmp目录下不包含“fstab”的字符文件 find /tmp -not -iname "*fstab*"
1.24.4 根据文件的大小查找:
-size [+|-]#unit 常用单位:k,m,g
例:size 10k filename,大小表示 (#-1,#] 9k<filename<10k
size -10k filename,大小表示[0-unit-1]
size +10k filename,大小表示(#,∞)
1.24.5 根据时间戳查找
以“天”为单位:
# [#,#-1]距现在为止过去几天前访问过文件。
-#:(0,#) 几天内访问过文件。
+#(oo, #-1] 几天前至-oo访问过的所有文件
-atime
显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用。
-mtime
显示的是文件内容被修改的最后时间,比如用vi编辑就会发生改变。
-ctime
显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变。
以“分钟”为单位:
-amin -mmin -cmin 同上
1.24.6 根据权限来查找:
-perm [/|-]mode 例:find ./ -perm 644
mode:精确权限匹配;
/mode :任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足 9位权限之间存在“或”关系;
-mode :每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足 9位权限之间存在"与"关系;
例: 440属于/666有读的权限 find./ -perm /666 符合这一查找
1.24.7 处理动作:
-print :输出至标准输出:默认的动作;
-ls :类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息
-delete :删除找到的文件
-fls :/path/to/somefile:把查找到的所有文件的长格式信息保存至指定文件中;
-ok command {} \; :对查找到的每个文件执行由command表示的命令;每次操作都由用户进行确认;
-exec command {} \; :对查找到的每个文件执行由command表示的命令;
例:find ./ -perm /002 -exec mv {} {}.txt \;
注意: find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递后面的命令;但是有些命令不能接受过长的参数,此时执行命令会失败;另一种方式可规避此问题:find | xargs command
例:
1、 查找/var目录下属主为root,且属组为mail的所有文件或目录;
find /var -user root -a -group mail -ls
2、 查找/usr目录下不属于root,bin或hadoop的所有文件或目录;用两种方法;
find /usr -not -user root -a -not -user bin -a -not -user hadoop find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls |
3、 查找/etc目录下最近一周内其内容修改过,且属主不是root也不是hadoop用户的文件或目录;
find /etc -mtime -7 -a -not -user root -a -not -user hadoop
find /etc -mtime -7 -a -not \(-user root -o -user hadoop\) -ls
4、查找当前系统上没有属主或属组,且最近一周内曾今被访问过的文件或目录;
find ./ -nouser -o -nogroup -ls 如果有文件属于可查找项,但是加ls选项最后会无法输出显示 加了-o(或条件)和ls后只会对后一半生效。
需要→ find ./ \( -nouser -o -nogroup\) -atime -7 -ls |
5、 查找/etc目录下大于1m且类型为普通文件的所有文件;
find /etc -size +1m -ls
find /etc -size +1m -type f -exec ls -lh {} \;
6、 查找/etc目录下所有用户都没有写权限的文件;
find /etc -not -perm /222 -type f -ls 至少有一个用户 有 |
7、 查找/etc目录至少有一类用户没有执行权限的文件;
find /etc -not -perm -type f -111
8、 查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有写权限的所有文件;
find /etc -perm -111 -a -perm -002 -ls find /etc -perm -113 -ls -type f |
1.25 history
#history [选项][历史命令保存文件]
-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中修改 |
历史命令的调用: 1. 使用上、下箭头调用以前的历史命令
2. 使用"!n"重复执行第n条历史命令
3. 使用"!!"重复执行上一条命令
4. 使用"!字符串"重复执行最后一条以该字符串开头的命令。
1.26 vim
:.,$y 复制当前行到末尾行
:! 调用系统命令,可临时执行
使vim设置永久生效:vim /etc/vimrc 把设置写到这个文件的最后,对所有账户生效
set nu 显示行号 set nonu 取消行号
set ic 不区分大小写 set noic 取消不区分大小写
set ts=4 设置tab键长度
set sw=4 设置自动缩进的tab键长度
vim /root/.vimrc 也可以把设置写到此文件,只对root生效
vim字符替换:
:%s/this/that 每一行的第一个this被替换成that :%s/this/that/g 将文本中所有的this替换成that %从每一行的开头到结尾 s表示替换 :1,5 s/old/new/g #替换第一行到第5行中所有匹配的内容 |
字符操作:u撤销上一步
i当前插入,i行首插入。
a当前字符插入(光标后一位插入),a行尾插入。
o表示:本行回车到下一行插入,o上一行插入。
x删除光标所在字符,x向前删除一个字符。
dd删除光标所在的行,dg删除光标所在开始行到文件尾的所有字符。
j合并两行。
行操作:home 键或^键行首,$或end行尾
dd删除一行ndd(删除本行与下一行)。
yy复制一行,nyy复制n行,p将复制行粘贴,p向光标下一行粘。(n表示数字)
词操作:dw删除一个词,y+$复制至行尾。y+^复制至行首。yw复制一个词。:.,$y 复制当前行到末尾
v模式:编程的时候需要进行多行注释: (删除是要将光标移到这个词的行首,如果光标不在行首则删除光标之后的字母。) 块操作:d或d+$删除至行尾 d+^删除至行首 1、注释:ctrl+v进入列编辑模式 2、向下或向上移动光标 (ctrl l 向下全部选中) 3、把需要注释的行开头的开头标记起来 4、然后按大写的i 5、再插入注释符,比如“#” 6、再按esc,就会全部注释了 删除多行注释:按ctrl+v进入列编辑模式;向下或向上移动光标;选中注释部 分然后按d,就会删除注释符号。 |
vim编辑器: :wq 可以保存外 :w +路径+文件名直接保存在某个位置和重命名:w 路径/文件名
zz 保存退出 :x 保存退出 :!命令:!ifconfig
vi的行定位功能:
ctrl+f 向前卷动一个屏幕
ctrl+b 向后卷动一个屏幕
g 到文件最后一行行首
:$ 到文件最后一行行尾
mg 到指定行,m为目标行数 或者mgg
set nu 显示行号
/内容 查找指定内容
n 查找下一个
n 回到前一个
? 寻找上一个
/^字符串 查找以字符串开始的行 /字符串$ 查找以字符串结尾的行 /a.b 查找字符串a任意字符b vim替换 r 替换当前光标字符 :r 文件名 在光标当前位置载入另一个文件 |
1.27 useradd
useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是终极用户.
-u :uid指定用户id
-d:指定用户登入时的启始目录。
-g:指定用户所属的群组
-g:指定用户所属的附加群组。
-s:指定用户登入后所使用的shell。
tom 用户的登陆 shell 为非交互式 shell #useradd –s /sbin/nologin tom
-e :指定账号的有效期限,缺省表示永久有效
useradd user1——创建用户user1;
useradd –e 12/30/2009 user2——创建user2,指定有效期2009-12-30到期
-c:用户说明,手工指定用户的说明,添加说明有spacebar时要加" "。
用户默认值文件:/etc/defalut/useradd 1. group=100 :用户默认组id (公有模式) 2. home=/home :用户家目录 3. inactive=-1 :密码过期宽限天数(shadow文件7字段) 4. expire=no value :密码失效时间(8字段) 5. shell=/bin/bash :默认的shell 6. skel=/etc/skel :模板目录 7. create_mail_spool=yes :是否建立邮箱 /etc/login.defs pass_max_days 999 :密码有效期(5字段) pass_min_days 0 :密码修改间隔(4字段) pass_min_len 5 :密码最小5位(pam) pass_warn_age 7 :密码到期警告(6) uid_min 500 :最小和最大uid范围 gid_mix 60000 encrypt_method sha512 :加密模式 |
1.28 userdel
删除用户userdel [-r] 用户名
-r:删除用户的同时删除用户家目录
1.29 id
查看用户id:#id 用户名
查询用户的uid,初始组id,附加群组id
1.30 usermod
usermod命令用于修改用户的基本信息。usermod命令不允许你改变正在线上的使用者帐号名称。当usermod命令用来改变user id,必须确认这名user没在电脑上执行任何程序.
-g <群组> 修改用户所属的原始群组。
#usermod -g root username
-g <群组> 修改户所属的附加群组
-a -g 无限增加到附加组,可拥有多个附加组. 将a1添加附加组user3 #usermod -a -g user3 a1
-c:修改用户的说明usermod -c "test user" username
当某一用户拥有多个附加组之后,使用usemod -g会修改附加组,则多个组消失掉变成唯一当前修改的附加组. |
1、将 newuser2 添加到附加组 staff #usermod -g staff newuser2
-l <帐号名称> 修改用户帐号名称。
2、修改 newuser 的用户名为 newuser1 #usermod -l newuser1 newuser
-l 锁定用户密码,使密码无效。
-u 解除密码锁定。
3、锁定账号 newuser1 #usermod -l newuser1
4、解除对 newuser1 的锁定 #usermod -u newuser1
-d 改变用户家目录,常与-m结合使用
-m 将主目录的内容移动到新目录
usermod -m -d /home/user2 -uid username 若使用报错使用以下命令:
cat /dev/null > /var/run/utmp
清空此文件。utmp是一个文件,除了utmp程序你不能编辑这个文件,删掉他的话,当前登陆信息都会丢失。它就好比系统开启后它会把系统成员的信息迅速的记录下来,过一段时间它就不再记录,确认系统的用户配置就是这样了,这个文件在每次机器reboot起来后都会重新创建。 |
1.31 groupadd
-ggid: 修改组id
-n新组名: 修改组名
1.32 su
su: [选项] 用户名
-:选项只使用"-"代表连带用户的环境变量一起切换。
可使用env命令查看 |
-c:仅执行一次命令,而不切换用户身份
#su - root -c "useradd user3"不切换成root,但是执行useradd命令添加user1用户。
1.33 chage
修改用户密码状态chage
#chage [选项] 用户名
-l:列出用户的详细密码状态
-d 日期:修改密码最后一次更改日期(shadow3字段)
-m 天数:两次密码修改间隔(4字段)
-m 天数:密码有效期(5字段)
-w 天数:密码过期前警告天数(7字段)
-i 天数:密码过后宽限天数(7字段)
-e 日期:账号失效时间(8字段)
#chage -d 0 username这个命令其实是把密码修改日期归0了(shadow第3字段),这样用户只要一登录就要修改密码。第三字段是指密码最后一次修改时间的日期。1970年1月1号到现在修改密码的时间戳。如果第3字段改为0,系统会认为用户没有修改过操作密码,那么当此用户一旦登录系统就会提示要修改密码,才可正常使用。
1.34 passwd
-s:查询用户密码的密码状态,仅root用户可用。
-l:暂时锁定用户。仅root用户可用。
-u:解锁用户。仅root用户可用。
--stdin:可以通过管道符输出的数据作为用户的密码。 # echo "123" | passwd --stdin user
1.35 gpasswd
-d :从组删除用户 gpasswd -d username groupadd
-a :添加用户到组(附加组),同时保留以前的组
添加用户到某一个组可以使用 usermod -g groupb usera 这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉. 所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用gpasswd这个命令来添加操作用户 |
-a :指定组内管理员 gpasswd -a username groupname
上一篇: C#-练习题