Linux基础命令
虚拟机的网络类型的简单理解:
虚拟机是在我们的操作系统里使用软件模拟出来的,相当于虚拟机是寄宿在我们的真实的物理机的操作系统里的,虚拟机和物理机之间的关系是 寄宿与被寄宿的关系, 真实的物理机被称为宿主机。
1. bridged(桥接模式) : 我们的电脑在上网的时候都需要有一个网络地址(IP地址),通过这个地址可以确定我们的电脑在网络上的位置,桥接模式就是将我们虚拟机中的网卡的网络地址 放在我们真实的物理机的网卡上。 这样的话,我们的虚拟机就好像跟我们的宿主机所在的局域网中的一台机器一样。 桥接模式适合有路由器的情况,和真实的物理环境一样。
2. NAT(网络地址转换模式) : 在宿主机上制作一个虚拟网卡,通过这个网卡,给虚拟机分配IP。宿主机在这里的角色相当于局域网中的路由器。NAT模式适合于没有路由器的情况,虚拟机通过宿主机去上网。
3.Host-Only(模式): 和NAT模式很像,唯一的区别是,没有地址转换服务,所以该模式下虚拟机只能访问到主机。无法访问外网。
分区:
文件系统类型: 默认为 ext4, 文件系统分很多种,ext2、ext3、ext4、fat、ntfs等等
什么是文件系统: 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。
两种文件系统的对比:
LInux目录结构:
/ : 所有目录都在
/boot : boot 配置文件、内核和其它启动 时所需的文件
/etc : 存放系统配置有关的文件
/home : 存放普通用户目录
/mnt : 硬盘上手动 挂载的文件系统
/media : 自动挂载(加载)的硬盘分区以及类似CD、数码相机等可移动介质。
/cdrom : 挂载光盘?
/opt : 存放一些可选程序,如某个程序测试版本,安装到该目录的程序的所有数据,库文件都存在同个目录下
/root : 系统管理员的目录,对于系统来说,系统管理员好比上帝,他可以对系统做任何操作,比如删除你的文件,一般情况下不要使用root用户。
/bin : 存放常用的程序文件(命令文件)。
/sbin : 系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp : 临时目录,存放临时文件,系统会定期清理该目录下的文件。
/usr : 在这个目录下,你可以找到那些不适合放在/bin或/etc目录下的额外的工具。比如游戏、打印工具等。/usr目录包含了许多子目录: /usr/bin目录用于存放程序;/usr/share用于存放一些共享的数据,比如音乐文件或者图标等等;/usr/lib目录用于存放那些不能直接 运行的,但却是许多程序运行所必需的一些函数库文件。/usr/local : 这个目录一般是用来存放用户自编译安装软件的存放目录;一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。
/usr/bin/ 非必要可执行文件 (在单用户模式中不需要);面向所有用户。
/usr/include/ 标准包含文件。
/usr/lib/ /usr/bin/和/usr/sbin/中二进制文件的库。
/usr/sbin/ 非必要的系统二进制文件,例如:大量网络服务的守护进程。
/usr/share/ 体系结构无关(共享)数据。
/usr/src/ 源代码,例如:内核源代码及其头文件。
/usr/X11R6/ X Window系统 版本 11, Release 6.
/usr/local/ 本地数据的第三层次, 具体到本台主机。通常而言有进一步的子目录, 例如:bin/、lib/、share/.
/var : 该目录存放那些经常被修改的文件,包括各种日志、数据文件;
/var/cache/ 应用程序缓存数据。这些数据是在本地生成的一个耗时的I/O或计算结果。应用程序必须能够再生或恢复数据。缓存的文件可以被删除而不导致数据丢失。
/var/lib/ 状态信息。 由程序在运行时维护的持久性数据。 例如:数据库、包装的系统元数据等。
/var/lock/ 锁文件,一类跟踪当前使用中资源的文件。
/var/log/ 日志文件,包含大量日志文件。
/var/mail/ 用户的电子邮箱。
/var/run/ 自最后一次启动以来运行中的系统的信息,例如:当前登录的用户和运行中的守护进程。现已经被/run代替[13]。
/var/spool/ 等待处理的任务的脱机文件,例如:打印队列和未读的邮件。
/var/spool/mail/ 用户的邮箱(不鼓励的存储位置)
/var/tmp/ 在系统重启过程中可以保留的临时文件。
/lib : 目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副本,故可以使得可执行文件变得更小,节省空间。
/lib32 : 同上
/lib64 : 同上
/lost+found : 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在;
/dev : 存放设备文件
/run : 代替/var/run目录,
/proc : 虚拟文件系统,可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的,该目录的内容不在硬盘上而在内存里;
/sys : 和proc一样,虚拟文件系统,可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的,该目录的内容不在硬盘上而在内存里;
SWAP分区的作用:
当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。
那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。
这样,系统总是在物理内存不够时,才进行Swap交换。
sudo cat /proc/sys/vm/swappiness
该值默认值是60.
swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,
swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
--临时性修改:
[root@rhce ~]# sysctl vm.swappiness=10
vm.swappiness = 10
[root@rhce ~]# cat /proc/sys/vm/swappiness
10
这里我们的修改已经生效,但是如果我们重启了系统,又会变成60.
--永久修改:
在/etc/sysctl.conf 文件里添加如下参数:
vm.swappiness=10
软件管理 apt ( Advanced Packaging Tool )
他可以自动下载、配置、安装软件包;简化了Linux系统。
Debian及衍生版中都包含了apt , RedHat系列的linux的则使用yum来进行管理,其中Fedora22中Centos7中开始使用dnf 来替代yum。
apt-cache search package 搜索包
apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package 安装包
sudo apt-get install package –reinstall 重新安装包
sudo apt-get -f install 强制安装
sudo apt-get remove package 删除包
sudo apt-get remove package –purge 删除包,包括删除配置文件等
sudo apt-get autoremove 自动删除不需要的包
sudo apt-get update 更新源
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends package 了解使用依赖
apt-cache rdepends package 了解某个具体的依赖
sudo apt-get build-dep package 安装相关的编译环境
apt-get source package 下载该包的源代码
sudo apt-get clean && sudo apt-get autoclean 清理下载文件的存档
sudo apt-get check 检查是否有损坏的依赖
apt的配置文件
/etc/apt/sources.list 设置软件包的获取来源
/etc/apt/apt.conf apt配置文件
/etc/apt/apt.conf.d apt的零碎配置文件
/etc/apt/preferences 版本参数
/var/cache/apt/archives/partial 存放正在下载的软件包
/var/cache/apt/archives 存放已经下载的软件包
/var/lib/apt/lists 存放已经下载的软件包详细信息
/var/lib/apt/lists/partial 存放正在下载的软件包详细信息
软件源配置文件格式:
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
# deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
# deb-src http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse
# deb-src http://security.ubuntu.com/ubuntu xenial-security multiverse
Ubuntu 软件仓库被分为四个部分:
main(主要的), restricted(受限的), universe(广泛的) , multiverse(多元的),
主要根据我们对软件的支持能力,以及软件的目的是否符合我们的 *软件哲学。
先看一下配置文件的一段内容:
第一个deb表示软件包的格式,可以是 deb 或 deb-src,前者表示所指向的存放 binary 格式(已编译),后者为 sources 格式(原代码)。
第二个URI,即 Universal Resource Identifier,通用资源标识符,可以是以:file(系统) 、 cdrom(光驱) 、 http 、 ftp、copy 、rsh 、ssh 等几个参数开头的软件包所在位置。
第三个Distribution 指发行版本号,可以是:stable,testing,unstable,sarge,etch,sid 等,具体可参考Debian文档。
后面的几个component表示具体的软件包分类:
main:完全遵循 Debian *软件准则 即DFSG的软件包;
contrib:软件包均遵循DFSG*使用原则,但是其使用了某些不符合DFSG的第三方库;
non-free:不符合DFSG的软件包。
dpkg
Debian软件包管理器的基础
用于安装、卸载和供给和.deb软件包相关的信息。
dpkg本身是一个底层的工具,本身并不能从远程包仓库下载包以及处理包的依赖的关系,需要将包从远程下载后再安装。
DPKG常用命令:
dpkg -i package.deb 安装包
dpkg -r package 删除包
dpkg -P package 删除包(包括配置文件)
dpkg -L package 列出与该包关联的文件
dpkg -l package 显示该包的版本
dpkg –unpack package.deb 解开 deb 包的内容
dpkg -S keyword 搜索所属的包内容
dpkg -l 列出当前已安装的包
dpkg -c package.deb 列出 deb 包的内容
dpkg –configure package 配置包
修改密码:
# 修改密码的命令
passwd # 默认修改当前用户的密码 passwd username # 修改指定用户的密码,需要管理员权限
忘记密码:
开始时长按shift键,进入grub菜单--> 按字母e 进入编辑模式 --> 编辑内容--> 启动 进入但用户模式 ,重新设置用户密码,--> 按照F10重启 -- > 使用新密码进入系统
注销/重启/关机
logout # 注销
reboot # 重启系统: 需要管理员权限
shutdown # 关机: 需要管理员权限
shutdown -r now # 现在立即重启
shutdown -r +5 # 三分钟后重启
shutdown -r 12:12 #在12:12时将重启计算机 shutdown -h now # 现在立即关机
shutdown -h +5 “The System will shutdown after 3 minutes” # 提示使用者将在三分钟后关机
shutdown -h +5 # 5分钟后关机
shutdown -h 12:00 # 12点钟关机
shutdown -c # 取消关机操作
pwd 命令 查看”当前工作目录“的完整路径
pwd -P # 显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径
. 表示当前目录
.. 表示上级目录
/ 表示根目录
获取帮助
-h --help info man
man man # 查看man命令的手册
man cd
man pwd
man 5 passwd
man -k passwd # 模糊查找
man -f passwd # 精确查找
ls 命令 ls [选项] [目录名]
-a 列出目录下的所有文件,包括以 . 开头的隐含文件
-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-h –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~
-A :全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~
-d :仅列出目录本身,而不是列出目录内的档案数据
-f :直接列出结果,而不进行排序 (ls 预设会以档名排序!)
-F :根据档案、目录等信息,给予附加数据结构,例如:
* :代表可执行档; /:代表目录; =:代表 socket 档案; |:代表 FIFO 档案;
-h :将档案容量以人类较易读的方式(例如 GB, KB 等等)列出来;
-i :列出 inode 位置,而非列出档案属性;
-l :长数据串行出,包含档案的属性等等数据;
-n :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在账号管理提到!)
-r :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;
-R :连同子目录内容一起列出来;
-S :以档案容量大小排序!
-t :依时间排序
--color=never :不要依据档案特性给予颜色显示;
--color=always :显示颜色
--color=auto :让系统自行依据设定来判断是否给予颜色
--full-time :以完整时间模式 (包含年、月、日、时、分) 输出
--time={atime,ctime} :输出 access 时间或 改变权限属性时间 (ctime)
而非内容变更时间 (modification time)
注: ll -h = ls -lh
- 如何判断是文件,还是文件夹?
- 开头为d 代表:文件夹
- vim .[文件名] .开头
- vim .test 创建一个隐藏文件
cd 命令 cd [目录名]
cd /root/Docements # 切换到目录/root/Docements
cd ./path # 切换到当前目录下的path目录中,“.”表示当前目录
cd ../path # 切换到上层目录中的path目录中,“..”表示上一层目录
mkdir 命令 mkdir [选项] 目录名...
-m, --mode=模式,设定权限<模式> (类似 chmod),而不是 rwxrwxrwx 减 umask
-p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录;
-v, --verbose 每次创建新目录都显示信息
- mkdir -p test1/test2/test3
- mkdir -m 777 test3
rm 命令 rm [选项] 文件
rm是一个危险的命令,使用的时候要特别当心 不可恢复!
-f :就是force的意思,忽略不存在的文件,不会出现警告消息
-i :互动模式,在删除前会询问用户是否操作
-r :递归删除,最常用于目录删除,它是一个非常危险的参数
rm filename (删除无法找回 建议移到/tmp 把tmp当成回收站) 或者 >文件名
>filename 清空文件内容
mv 命令 mv [选项] 源文件或目录 目标文件或目录
- 用来移动文件或者将文件改名(move (rename) files)
-f : force强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i : (可以用来改名) 若目标文件 (destination) 已经存在时,就会询问是否覆盖!
-u : 若目标文件已经存在,且比目标文件新,才会更新
-t : 指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
mv dir1 dir2 (文件->目录 如果目录dir2不存在,将目录dir1改名为dir2;否则,将dir1移动到dir2中。)
mv file1 file2 (文件->文件 file2 内容被覆盖)
mv -i log1.txt log2.txt
mv -t /opt/soft/test/test1/ log1.txt log2.txt log3.txt
mv * ../ 移动当前文件夹下的所有文件到上一级目录
mv test3/*.txt test5 把当前目录的一个子目录里的文件移动到另一个子目录里
cp 命令 作用复制,参数如下:
-a :将文件的特性一起复制
-p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
-i :若目标文件已经存在时,在覆盖时会先询问操作的进行
-r :递归持续复制,用于目录的复制行为
-u :目标文件与源文件有差异时才会复制
编辑示例:
cp app.log test1/
cp -p -r test1 test2
touch 命令 touch [选项]... 文件...
用来修改文件时间戳,或者新建一个不存在的文件。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
-t 使用指定的日期时间,而非现在的时间。 [[CC]YY]MMDDhhmm[.SS]
touch -r ref_file file1 更新file1.txt的时间戳和ref+file相同
touch 2016app.log
touch -t 201611142234.50 2016app.log
cat 命令 cat [选项] [文件]... 用来显示文件内容
-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 之外
tac log.txt 最后一行到第一行反向在萤幕上显示出来!
more 命令
cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读
命令参数:
+n 从笫n行开始显示
-n 定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c 从顶部清屏,然后显示
-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l 忽略Ctrl+l(换页)字符
-p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s 把连续的多个空行显示为一行
-u 把文件内容中的下画线去掉
常用操作命令:
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
more +3 2016.log 显示文件中从第3行起的内容
more -5 2016.log 设定每屏显示行数
ls -l | more -5 列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来
less 命令 命令用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
less [参数] 文件
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
/字符串: 向下搜索“字符串”的功能
?字符串: 向上搜索“字符串”的功能
n: 重复前一个搜索(与 / 或 ? 有关)
N: 反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
grep 命令
文本搜索工具
-n --line-number #在显示符合样式的那一行之前,标示出该行的列数编号。
grep [-n] xxx(内容) install.log
vim 命令
vim install.log +100 (跳到第100行)
ping 命令 用于确定主机与外部连接状态
ping [参数] [主机名或IP地址]
-d 使用Socket的SO_DEBUG功能。
-f 极限检测。大量且快速地送网络封包给一台机器,看它的回应。
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
<p>-c 数目:在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-I 网络界面:使用指定的网络界面送出数据包。
-l 前置载入:设置在送出要求信息之前,先行发出的数据包。
-p 范本样式:设置填满数据包的范本样式。
-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。
-t 存活数值:设置存活数值TTL的大小。
ifconfig 命令用来查看和配置网络设备。当网络环境发生改变时可通过此命令对网络进行相应的配置:
ifconfig [网络设备] [参数] up 启动指定网络设备/网卡。
down 关闭指定网络设备/网卡。该参数可以有效地阻止通过指定接口的IP信息流,如果想永久地关闭一个接口,我们还需要从核心路由表中将该接口的路由信息全部删除。
arp 设置指定网卡是否支持ARP协议。
-promisc 设置是否支持网卡的promiscuous模式,如果选择此参数,网卡将接收网络中发给它所有的数据包
-allmulti 设置是否支持多播模式,如果选择此参数,网卡将接收网络中所有的多播数据包
-a 显示全部接口信息
-s 显示摘要信息(类似于 netstat -i)
add 给指定网卡配置IPv6地址
del 删除指定网卡的IPv6地址
<硬件地址> 配置网卡最大的传输单元
mtu<字节数> 设置网卡的最大传输单元 (bytes)
netmask<子网掩码> 设置网卡的子网掩码。掩码可以是有前缀0x的32位十六进制数,也可以是用点分开的4个十进制数。如果不打算将网络分成子网,可以不管这一选项;如果要使用子网,那么请记住,网络中每一个系统必须有相同子网掩码。
tunel 建立隧道
dstaddr 设定一个远端地址,建立点对点通信
-broadcast<地址> 为指定网卡设置广播协议
-pointtopoint<地址> 为网卡设置点对点通讯协议
multicast 为网卡设置组播标志
address 为网卡设置IPv4地址
txqueuelen<长度> 为网卡设置传输列队的长度
which 命令 会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果
which 可执行文件名称
-n 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p 与-n参数相同,但此处的包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息
tree 命令 显示树形的层级目录结构,非原生命令,需要安装tree
tree bin 显示bin目录结构
tree . 显示当前目录
Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器: q退出
top [参数]
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数
idle cpu空闲率
us user使用的cpuwa(iowait)
cpu 等待io的时间比sy(system)
linux 系统本身占用cpu
Mem 内存
空闲 = free + buffers(正准备用) + cached
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
find [PATH] [option] [action] # 与时间有关的参数:
-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件;
-mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;
-mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;
-newer file : 列出比file还要新的文件名 # 例如:
find /root -mtime # 在当前目录下查找今天之内有改动的文件 # 与用户或用户组名有关的参数:
-user name : 列出文件所有者为name的文件
-group name : 列出文件所属用户组为name的文件
-uid n : 列出文件所有者为用户ID为n的文件
-gid n : 列出文件所属用户组为用户组ID为n的文件 # 例如:
find /home/hadoop -user hadoop # 在目录/home/hadoop中找出所有者为hadoop的文件 # 与文件权限及名称有关的参数:
-name filename :找出文件名为filename的文件
-size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件
-tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、
目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p);
-perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;
-perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示
-perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示 # 例如:
find / -name filename # 查找文件名为filename 的文件 (精确查询)
find / -name *xxxx* (按文件名模糊查询 *匹配字符)
find . -perm # 查找当前目录中文件权限的0755的文件
find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte
find / -size +10M |xargs ls -slh ( |管道符 把前面的结果当作后面的输入)
useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u ][用户帐号] -c #<备注> 加上备注文字。备注文字会保存在passwd的备注栏位中。
-d #<登入目录> 指定用户登入时的启始目录。
-D # 变更预设值.
-e # <有效期限> 指定帐号的有效期限。
-f # <缓冲天数> 指定在密码过期后多少天即关闭该帐号。
-g # <群组> 指定用户所属的群组。
-G # <群组> 指定用户所属的附加群组。
-m # 自动建立用户的登入目录。
-M # 不要自动建立用户的登入目录。
-n # 取消建立以用户名称为名的群组.
-r # 建立系统帐号。
-s # 指定用户登入后所使用的shell。
-u # 指定用户ID。
userdel 命令 删除用户:
userdel [options] LOGIN
-f # 强制删除,包括用户的一切相关内容,这个参数是危险的参数,不建议大家使用。详细说明看MAN
-r # 删除用户的家目录和用户的邮件池
usermod : 修改用户信息
# -c<备注> 修改用户帐号的备注文字。
# -d登入目录> 修改用户登入时的目录。
# -e<有效期限> 修改帐号的有效期限。
# -f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
# -g<群组> 修改用户所属的群组。
# -G<群组> 修改用户所属的附加群组。
# -l<帐号名称> 修改用户帐号名称。
# -L 锁定用户密码,使密码无效。
# -s<shell> 修改用户登入后所使用的shell。
# -u<uid> 修改用户ID。 # -U 解除密码锁定。 usermod -G staff user2 # 将 newuser2 添加到组 staff 中
usermod -l newuser1 newuser # 修改 newuser 的用户名为 newuser1
usermod -L newuser1 # 锁定账号 newuser1
usermod -U newuser1 # 解除对 newuser1 的锁定
groupadd : 添加组
groupadd group1
groupadd -g 1000 group1 # 指定gid
groupdel : 删除组
groupdel group1 # 删除组
passwd [OPTION...] <accountName>
-k, --keep-tokens keep non-expired authentication tokens
-d, --delete delete the password for the named account (root only)
-l, --lock lock the named account (root only)
-u, --unlock unlock the named account (root only)
-f, --force force operation
-x, --maximum=DAYS maximum password lifetime (root only)
-n, --minimum=DAYS minimum password lifetime (root only)
-w, --warning=DAYS number of days warning users receives before password expiration (root only)
-i, --inactive=DAYS number of days after password expiration when an account becomes disabled (root only)
-S, --status report password status on the named account (root)
chmod [-R] xyz 文件或目录
-R:进行递归的持续更改,即连同子目录下的所有文件都会更改
-c :新建打包文件
-t :查看打包文件的内容含有哪些文件名
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j :通过bzip2的支持进行压缩/解压缩
-z :通过gzip的支持进行压缩/解压缩
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename :filename为要处理的文件 (指定压缩文件)
-C dir :指定压缩/解压缩的目录dir
压缩:tar -zcvf filename.tar.gz 要被处理的文件或目录名称
查询:tar -ztvf filename.tar.gz
解压:tar -zxvf filename.tar.gz -C 欲解压缩的目录
使用示例:
打包:tar zcvf demo.tar.gz ./ (当前所有文件)
解包:tar zxvf demo.tar.gz
alias : 给命令起别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
如果需要别名永久生效,需要保存到 .bashrc 文件
su与 sudo
su:切换用户,没有参数时,默认切换为root用户;
su # 切换为root ## 推荐
su - # 切换为root 并加载root的环境配置
su - user1 # 切换为user1 并加载user1的环境配置
sudo:让当前用户暂时以管理员的身份root来执行命令。
Ubuntu 默认没有启用root用户, 普通用户执行一些特殊的操作时,使用sudo就可以让普通用户以root用户的身份执行命令
sudo有一个配置文件: /etc/sudoers ; 通过修改配置文件可以让指定用户使用sudo命令
man sudoers # 查看man手册
看下面几行:
# Host alias specification # 配置Host_Alias:就是主机的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
# User alias specification # 配置User_Alias:就是具有sudo权限的用户的列表
User_Alias USER_FLAG = user1, user2, user3 # Cmnd alias specification # 配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
Cmnd_Alias COMMAND_FLAG = command1, command2, command3 ,!command4 # 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3 # User privilege specification
# 配置权限的格式如下:
# USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG root ALL=(ALL:ALL) ALL
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG 格式为:用户名(用户别名) 主机名(主机别名)=[(运行用户或是Runas_Alias)可选] [tag可选] 可以执行的命令(或Cmmd_Alias) 这样描述语法很生硬,不易理解,举例子
user1 host1 = /bin/kill # user1 可以在host1上使用命令/bin/kill
user1 host1 = NOPASSWD: /bin/kill # user1 可以在host1上使用命令/bin/kill 同时可以不必输入密码(这里就是使用了NOPASSWD # 这个tag,默认是PASSWD)
user1 host1 = NOPASSWD: /bin/kill , PASSWORD: /bin/ls # user1 可以在host1上使用命令/bin/kill无需输入密码,但是使用/bin/ls则需要输入密码
user1 host1 = (opterator) /bin/kill # user1 可以在host1上使用命令/bin/kill但是必须是以operator用户运行这个命令,等价于# su -u opertor /bin/kill
user1 host1 = (:group_name) /bin/kill # user1 可以在host1上使用命令/bin/kill,且必须以group_name这个用户群组里面的用户来运行。
%group_name host1 = /bin/kill # 所有group_name里面的用户都可以在host1上执行/bin/kill(Linux中一般代表整个用户群组用# %group_name)
再举个实际例子,我之前对sudo su这个命令不理解,为什么我可以直接就su到root用户了呢,连密码都不需要?查看了一下sudoers文件才知道原来里面有这么一行:
xxx ALL=NOPASSWD: /bin/su