目录
1 用户管理命令
1.1 添加用户:adduser/useradd
1.2 设置用户密码:passwd
1.3 添加用户组:groupadd
1.4 修改用户账户信息:usermod
1.5 修改用户组:groupmod
1.6 删除用户:userdel
1.7 删除用户组:groupdel
1.8 用户信息文件:/etc/passwd
1.9 以其他身份执行命令:sudo
1.10 普通用户授予特权:/etc/sudoers
1.11 用户切换:su
2 文件管理命令
2.1 用户和文件
2.2 文件/目录许可权限
2.3 修改文件/目录许可权限:chmod
2.4 修改文件/目录所有者:chown
2.5 目录和文件通配符
2.6 切换目录:cd
2.7 创建文件或目录链接:ln
2.8 查看文件内容:cat
2.9 列出文件或目录:ls
2.10 创建目录 mkdir
2.11 复制文件或目录:cp
2.12 移动或更名现有文件或目录:mv
2.13 删除目录或文件:rm
2.14 比较文件差异:diff
2.15 搜索文件和目录:find
3 文档传输
3.1 ftp(file transfer protocol)
3.2 tftp(trivial file transfer protocol)
4 Linux文档编辑
4.1 文件编辑器:vi/vim
4.2 表达式运算:expr
4.3 管道命令:|
4.4 匹配:grep
4.5 流编辑:sed
4.6 排序:sort
4.7 重复:uniq
5 系统管理
5.1 系统时间与日期:date
5.2 查询进程状态:ps (process status)
5.3 结束执行进程:kill/killall
5.4 重启计算机:reboot
5.5 关闭计算机:shutdown
5.6 多重视窗程序:screen
5.7 休眠:sleep
5.8 Linux CPU信息:/prop/cpuinfo
5.9 任务管理器:top
5.10 查询cpu: mpstat
5.11 查询内存:free
5.12 系统信息:uname
【写在前面】
后文链接:Linux常用命令介绍二:系统设置,网络与通讯,磁盘管理,备份和压缩
(1)命令: adduser username
(2)常用参数:
-d:指定用户的目录,默认为/home/username。
(-d的用户上级目录必须是一个已存在的目录。)
-g:指定用户组
-G:指定用户附加组
-s:指定用户的默认shell
(3)举例:#adduser Sheryl -d /opt/www/Sheryl -g user -s /bin/bash
(4)补充:
新添加的用户必须先设置密码才能使用。
设置ID值时,0-499预留给特殊用途(bin,mail等账户),所以给用户设置ID要大于500。
(1)命令: passwd username
(2)常用参数:输入上述命令后,会提示输入密码。
(3)补充:修改其他人用户密码时,必须有对应的权限。
(1)命令: groupadd groupname
(2)常用参数:无
(3)举例:
(1)命令: usermod [参数]
(2)常用参数:
-c<备注>:修改用户账号的备注文字
-d<登入目录>:修改用户登入时的目录
-e<有效期限>:修改账号的有效期限
-g<群组>:修改用户所属的群组
-G<群组>:修改用户所属的附加群组
-l<账号名称>:修改用户账号名称
-L:索引用户密码,使密码无效
-s
:修改用户登入后所使用的shell -u
:修改用户ID -U:解除密码锁定
(3)举例:#usermod -l newname oldname
(4)补充:
usermod 可用来修改用户账号的各项设定。
usermod不允许改变正在线上的使用者账号名称。
当usermod改变用户ID时,必须确认该user没在电脑上执行任何程序。
(1)命令: groupmod -n 新群组名 旧群组名
(2)常用参数:-n <新群组名>:带新群组名
(3)举例:#groupmod -n newgroupname oldgroupname
(1)命令: userdel [参数] 用户账号
(2)常用参数:
-r:删除用户以及其所有的文件/删除用户登入目录以及目录中的所有文件
-f:强制删除用户,即使用户正在登录
(3)举例:#userdel -r Sheryl
(4)补充:删除命令的遗留问题,比如目录和用户在别的地方新建的文件等
(1)命令: groupdel 用户组账号
(2)常用参数:无
(3)举例:#groupdel user
(4)补充:删除用户组之前,必须确保该组不是任何用户的主组,否则删除失败。
(1)文件内容格式:用户名:密码:用户ID:组ID:全名:用户主目录:shell
(2)常用参数:无
(3)补充:
shell的模式定义了该用户能否登陆。
如果用户的bash为/sbin/nologin,则表示该用户不可以登陆。
用户ID0表示超级管理员用户,uid 0-500是系统保留的ID。
(1)命令: sudo [参数]
(2)常用参数:
-b:在后台运行指令
-H:将HOME环境变量设为新身份的HOME环境变量
-k:结束密码的有效期限,即下次再执行sudo时需要密码
-l:列出目前用户可执行与无法执行的指令
-p:改变询问密码的提示符
-s
:执行指定的shell
(3)举例:#sudo ls -l root //表示用户通过sudo的方式切换到root并执行命令 ls -l root
(4)补充:
确认系统安装了sudo:rpm -qa | grep sudo
在/etc/sudoers中,指明该用户有执行这个命令的权限。
(1)文件说明:
文件指明哪些用户能做什么操作,可以通过man 5 /etc/sudoers 查看。
只有root用户可以修改该文件,保存时要按 ! 强制保存。比如 :wq!
(2)常用配置:
允许Sheryl执行任何命令(root有这个权限): Sheryl ALL=(ALL)ALL (可见1.9中的截图)
允许用户执行命令且不需要密码 :Sheryl ALL=(ALL)NOPASSWD:ALL
用户机器=命令
允许sys组的成员执行NETWORKING SOFTWARE命令: %sys ALL=NETWORKING, SOFTWARE
(3)举例:无
(1)命令: su [-] username
(2)实例:
su oracle, 不载入/home/oracle/.profile下的环境变量,切换后继续使用当前用户环境变量。
su -oracle, 载入/home/oracle/.profile 下的环境变量。
su - Sheryl; echo$PATH; pwd
su Sheryl; echo$PATH; pwd
(3)补充:
1) 限定用户组切换root用户
前提:默认情况下,任何用户都可以通过su获取root权限,对系统进行任何操作。
解决方案:为了加强系统安全,Linux提供一个管理员组wheel,属于这个组的用户才能使用su命令获得root权限。
如何操作:
先将用户添加到wheel组:usermod -G wheel username
然后修改 /etc/pam.d/su,添加auth required pam_wheel.so user_uid
2) 用户/系统环境变量文件
/etc/profile:全局配置,不管是哪个用户,登录时都会读取该文件
/etc/bashrc:全局配置, bash执行时,不管是何种方式,都会读取该文件
~/.bashrc:局部配置文件
~/.bash_profile:局部配置文件
注意:
登录时~/.bashrc和~/.bash_profile都会被加载。同一个变量分别在上述2个文件定义时,系统以读取~/.bash_profile为准。~/.bashrc再去给下面的环境变量赋值。
Linux中,除了root之外,其他用户想要访问不是自己本用户的文件,需要先经过授权。
说明:
(1)d表示目录,r是读取权限4,w是修改权限2,x是执行权限1
(2)第1位:标识文件或目录。-表示文件,d表示目录,l表示链接
(3)第2-4位:该文件或目录的权限
(4)第5-7位:用户组的权限
(5)第8-10位:其他用户的权限
(6)文件第三域:文件或目录所属的用户
(7)文件第四域:文件或目录所属的用户组
(8)文件的第九域:文件或目录名称
#chomd 777 -R /var/abc //递归修改目录中文件的属性为777
#chmod user.Sheryl -R /var/abc //递归修改目录中文件的所属用户和用户组
#chmod u+x file //给file的属主增加执行权限
#chmod 751 file等同于#chmod u=rwx,g=rx,o=x file
#chmod 444 file 等同于 #chmod a-wx,a+r file
#chmod -R u+r directory //递归分配读权限
补充:
chmod是守则权限
setfacl是设置目录属性访问控制 !!! 深入学习一下
示例:chown -R user.Sheryl /var/abc //递归修改/var/abc的所有者信息
参考:#chmod user.Sheryl -R /var/abc //递归修改目录中文件的所属用户和用户组
示例:
co*h:表示以co开头的文件
he*o*t.txt:以he开头,包含一个o,并且以t.txt结尾的文件
doc[0-9].html:名为doc0到doc9的.html文件
作用:让用户在不同的目录间切换,但是该用户必须拥有足够的权限。
示例:
cd ~:直接返回用户主目录
cd -:返回上一次用户所在目录
cd /root/:使用绝对路径
cd ../../root/:使用相对路径
参数:-s 软链接
补充:硬链接和软链接的知识点
作用:cat file //查看文件内容
示例:
ls -l /etc:以详细列表的方式显示/etc/目录下的所有文件和目录。
ls -lt /etc:以详细列表的方式,按照日期排序显示/etc目录下所有文件和目录。
示例:
mkdir newdir
mkdir -p /home/Sheryl/abc //新建目录abc,如果上一层目录不存在,则一并创建
mkdir -m 777 /home/Sheryl/abc //新建目录abc,设置目录权限为777
示例:
cp /home/Sheryl/abc.txt /home/test //将abc.txt文件复制到 /home/test目录下
cp -r /home/Sheryl/abc /home/test //将abc目录递归复制到 /home/test目录下
示例:
mv -f /home/Sheryl/abc /home/test //将abc目录移到test目录下
mv -f /home/Sheryl/abc /home/test/abcd //将abc目录移到/test目录下并更名abcd
mv /home/Sheryl/abc.txt /home/test //将abc.txt文件移到/test目录下
示例:
rm /home/Sheryl/abc.txt //删除文件
rm /home/Sheryl/abc //删除目录
当误删除某些文件,可以尝试用 extundelete 恢复。但也存在一定的不完整性。
(1)作用:
以逐行的方式,比较文本文件的异同处。
如果要指定目录,则diff会比较目录中相同文件名的文件,但不会比较其中的子目录。
(2)说明:
比较结果中,会说明两个文件中不同的地方,即需要修改它们的哪些行。
如果用-表示文件名,则表示标准输入。
如果是目录名,那么将对该目录中的同名文件进行比较。
(3)命令: vim diff -0 file1 file 2 //会同时打开两个文件在水平显示
(1)命令格式:find [路径] [-type fdl] [-name 字符串] [-atime +/- 天数]
(2)参数说明:
路径:要搜索的路径
-type:确定搜索的范围。f是文件,d是目录,l是链接
-name:文件或目录名表达式
-atime:多少天内修改过
(3)实例:
find / -name "sheryl" //从根目录开始查找名字为sheryl的文件或目录
find / -type f -name "sheryl" //从根目录开始查找名字为sheryl的文件
find / -type f -name "*sheryl*" //从根目录开始查找名字里包含sheryl的文件
(4)补充知识点:
#find ... -exec ls {} \;
#find ... | xargs ls -rf
这两个命令都可以把find的查询结果打印出来。区别是前者把结果一次性传给exec选项,后者xargs命令会分批次的处理。
xargs的优点:因为是批处理的,所以执行效率比较高,因为用了缓冲。
xargs的缺点:可能参数数量过多,导致后面的命令执行失败。(如果是#find ... | xargs rm{} \;的话,无此问题,因为rm是逐个处理的)。
-exec 后面必须用分号;结尾。因为shell会处理分号;,所以用\;转义,防止被处理掉。
{}写成‘{}’,也是为了避免被处理掉。
(5)提升练习
1)在/tmp中查找所有*.h,并在这些文件中查找SYSCALL_VECTOR这个内容,最后打印出所有包含SYSCALL_VECTOR的文件名
find /tmp -name *.h | xargs -n 50 grep SYSCALL_VECTOR
grep SYSCALL_VECTOR /tmp/*.h | cut -d ":" -f1|uniq>filename
find /tmp -name *.h -exec SYSCALL_VECTOR '{}' \; -print
2)删除在/下所有名为filename的文件
find / -name filename -exec rm -rf '{}' \;
3)查找磁盘中大于3M的文件
find ./ -size +3000k -exec ls -ld '{}' \;
4)将find出来的内容拷贝到另一个地方
find /home -name sheryl -exec cp -rf '{}' /tmp \;
5)查找 2020-01-01 00:30:00时更改过的文件
find /home -name *.rpm | xargs ls -l | grep "2020-01-01 00:30:00"
(1)为什么要用ftp?
Linux很多软件实现FTP服务。常用的有vsftpd,Wu-ftpd,Proftp等。
CentOS中默认安装的是vsftpd。
访问FTP服务器时需要先验证,只有经过验证,用户才能访问和传输文件。
FTP是ARPANet的标准文件传输协议,该网络就是Internet的前身。
(2)命令格式:ftp [-dignv] [主机名或IP地址]
(3)参数说明:
-d:详细显示指令执行过程,偏于排错或分析程序执行的情形
-i:关闭互动模式,不询问任何问题
-g:关闭本地主机文件名称,支持特殊字符的扩充特性
-n:不使用自动登录
-v:显示指令执行过程
(4)实例:ftp 10.32.0.111
(5)延伸:
问题:有时候登录ftp服务会提示500 OOPS。这时需要考虑SELinux的安全问题。
解决方案: setsebool ftp_home_dir=1,然后重启vsftp服务即可解决问题。
(1)命令格式:tftp [主机名或IP地址]
(2)补充说明:
FTP让用户得以下载存放于远端主机的文件,也能将文件上传到远端主机放置。
TFTP是简单的文字模式FTP程序,所使用的指令和FTP类似。
(3)TFTP服务器/客户端的安装:
yum install tftp //安装tftp client
yum install tftp-server //安装 tftp server
yum install xinetd //安装tftp的超级服务守护进程
(1)vi/vim是常用的编辑器。 vim是vi的增强版,多了代码加亮的效果。
(2)常用模式: 命令模式,insert模式, 底部模式
(3)常用操作:略 (之后再补)
(1)功能:expr命令是一个手工命令行计数器,用于在Linux下求表达式变量的值。
(2)使用格式:expr Expression
表示命令读入Expression参数,计算它的值,然后将结果写入到标准输出。
(3)参数规则:
用空格隔开每一项。
用\放在shell特定的字符前面。
对包含空格和其他特殊字符的字符串要用引号括起来。
(4)实例:
(1)管道命令,仅能处理经由前面一个指令传出的正确输出信息,然后传递给下一个命令,作为标准输入standard input。能处理standard output的信息,不能处理standard error的信息。
(2)命令格式: command1 | command2 | command3
(3)注意:每个管道右边命令,必须能够接受标准输入流命令才行
(1)命令格式: grep [-ivnE] 字符串文件
(2)参数:
-n:显示行号
-A:显示后几行
-B:显示前几行
-v:排除
-i:不区分大小写
-R:递归查找目录
-E:扩展查找
(3)实例:
#grep "Sheryl" /etc/passwd //查找passwd中包含Sheryl的行
#grep -n "Sheryl" /etc/passwd //查找passwd中包含Sheryl的行,显示行号
#grep -v "Sheryl" /etc/passwd //查找passwd中不包含Sheryl的行
#grep -R -E "Sheryl" /etc/passwd //递归查找passwd中包含Sheryl这个词的行
(1)作用:sed是一种在线编辑器,它一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲器,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,不断重复直至文件末尾。
文件内容并没有改变,除非使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,填写转换程序等。
(2)语法命令:sed [-hnV] [-e