欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

linux笔记

程序员文章站 2022-12-25 17:07:52
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包的区别 ......

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 列
linux笔记

1.5 awk

  1. awk '{print $1}' 文件名  $1第一列,$2第二列,$nf最后一列.$(nf-1)倒数第二列)。 现在是以文件的空格为分隔符这样打印
  2. 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/
如何确定安装过程报错:安装过程停止;并出现errorwarningno的提示。
源码包安装过程:
下载源码包;解压缩下载的源码包;进入解压缩目录。

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 这两个命令组合到一起
linux笔记

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)linux笔记
#mount [-l]
查询系统中已经挂载的设备,-l会显示卷标名称
#mount -a
依据配置文件/etc/fstab的内容,自动挂载

1.18.1 挂载命令格式

#mount [-t 文件系统] [-l卷标名] [-o特殊选项] 设备文件名 挂载点
-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
-l 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项:可以指定挂载的额外选项。
linux笔记
#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为单位显示内存使用情况;
linux笔记
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