标签:linux基础 命令
单引号:强引用,变量引用不执行替换
双引号:弱引用,变量引用会替换
``:命令替换。 $()=``
文件类型:
-:常规文件
d:目录文件
b:块设备文件,支持以block为单位进行随机访问
c:字符设备文件,支持以character为单位进行线性访问
major number:主设备号,用于标示设备类型,进而确定要加载的驱动程序
minor number:次设备号,用于标识同一类型中的不同的设备
8位二进制:0-255
l:symbolic link:符号链接文件
p:pipe:命名管道
s:socket:套接字文件
基本命令:
命令类型:
外部命令
shell内嵌命令
ls 的-d选项是如果是目录只显示目录
type COMMAND:
内部:builtin
外部:显示为命令文件路径:
注意,命令可以与原名相同,此时原名被隐藏,此时如果要运行原程序,可在命令前加
echo 命令
语 法:echo [-ne][字符串]或 echo [--help][--version]
补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
参 数:-n 不要在最后自动换行
-e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般
文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
[root@localhost ~]# echo -e "\033[43;31mred color\033[0m"
red color
which:显示命令的完整路径名
--skip-alias:忽略别名
eg:[root@livecd ~]# which ls
alias ls=‘ls --color=auto‘
/bin/ls
whatis :
手动创建whatis数据库
centos 6: makewhatis
centos 7:makedb
手动搜索所有whatis库中和关键字相关的所有文件
[root@localhost ~]# apropos passwd
chpasswd (8) - update passwords in batch mode
fgetpwent_r [getpwent_r] (3) - get passwd file entry reentrantly
getpwent_r (3) - get passwd file entry reentrantly
gpasswd (1) - administer /etc/group and /etc/gshadow
htpasswd (1) - Manage user files for basic authentication
kpasswd (1) - change a user‘s Kerberos password
lpasswd (1) - Change group or user password
lppasswd (1) - add, change, or delete digest passwords
pam_localuser (8) - require users to be listed in /etc/passwd
pam_passwdqc (8) - Password quality-control PAM modul
.........
whereis命令:
whereis - whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
用法:whereis [options] name
-b:仅搜素二进制程序路径
-m:仅搜素使用手册文件路径
who命令:show who is logged include
options:
-b:系统此次启动的时间
-r:运行级别
history:历史文件中的命令历史和内存中的命令历史不一样,且默认条目为1000,所以可能看到大于1000的命令
历史
命令历史相关环境变量
HISTSIZE:命令历史记录的条数;
HISTFILE:指定历史文件,默认为~/.bash_history;
HISTFILESIZE:命令历史文件记录历史的条数;
HISTTIMEFORMAT=“%F %T“ 显示时间
HISTIGNORE=“str1:str2:… “ 忽略string1,string2历史
控制命令历史的记录方式:
环境变量:HISTCONTROL 可设置多个选项,中间以:分割
ignoredups:忽略重复的命令;连续且相同方为“重复”
ignorespace:忽略所有以空白开头的命令
ignoreboth:ignoredups, ignorespace
erasedups:删除重复命令
export 变量名="值“
存放在/etc/profile 或~/.bash_profile
options:
-c:删除所有命令历史
-d n:删除指定的命令历史
history -d 304 :删除指定的命令历史
-w:把历史列表中的命令追加至历史文件中
-r:从文件读取命令历史至历史列表中
history在启动时会自动读取.bash_history中的命令历史吗??
!#:再一次执行命令历史中的第#号命令
!string:再一次执行历史列表中最近一个以最近一个string开头的命令
!^ :引用第一个参数
!& :引用最后一个参数
!:n :引用第n个参数
控制命令历史记录的方式:
环境变量:HISTCONTROL
ignoredups:忽略重复的命令
ignorespace:忽略以空白字符开头的命令
ignoreboth:以上两个同时生效
[root@localhost ~]# getent passwd jay
jay:x:500:500:root:/home/jay:/bin/bash
[root@livecd tmp]# mkdir /tmp/{a,b}/{c,d} -pv
mkdir: created directory `/tmp/a‘
mkdir: created directory `/tmp/a/c‘
mkdir: created directory `/tmp/a/d‘
mkdir: created directory `/tmp/b‘
mkdir: created directory `/tmp/b/c‘
mkdir: created directory `/tmp/b/d‘
[root@livecd tmp]# mkdir /tmp/m/{n/{a,b},w} -pv
mkdir: created directory `/tmp/m‘
mkdir: created directory `/tmp/m/n‘
mkdir: created directory `/tmp/m/n/a‘
mkdir: created directory `/tmp/m/n/b‘
mkdir: created directory `/tmp/m/w‘
[root@livecd tmp]# mkdir /tmp/{a,b}_{c,d} -pv
mkdir: created directory `/tmp/a_c‘
mkdir: created directory `/tmp/a_d‘
mkdir: created directory `/tmp/b_c‘
mkdir: created directory `/tmp/b_d‘
文件: 两类数据
元数据: metadata
数据: data
[root@localhost ~]# stat a
File: `a‘
Size: 0 Blocks: 8 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 2223942 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2016-07-09 13:50:46.000000000 -0700 访问即改变,cat等
Modify: 2016-07-09 13:50:21.000000000 -0700 更改内容,数据改变
Change: 2016-07-09 13:50:21.000000000 -0700 元数据改变,access改变或者数据内容的话,此
也是元数据改变
touch命令:
默认是三个时间戳都会改变为当前的时间
-c:指定的文件路径不存在时不创建文件
-a:仅仅修改atime
-m:仅仅修改mtime
-t STAMP: 年月日时分秒
eg:touch -m -t 201212011030,
date
-d DATENAME:
eg: [root@localhost ~]# date -d "yesterday"
Sun Jul 24 10:21:45 CST 2016
[root@localhost ~]# date -d "-1 days"
Sun Jul 24 10:21:26 CST 2016
[root@localhost ~]# date -d "+2 days"
Wed Jul 27 10:22:16 CST 2016
显示前天是星期几
[root@localhost ~]# date -d "-2 days" +%a
Sat
cp 命令:
SYNOPSIS
单源复制 cp [OPTION]... [-T] SOURCE DEST
多源复制 cp [OPTION]... SOURCE... DIRECTORY
单源复制中,如果目标文件不存在,则事先创建文件,并复制源文件的内容到dest中
如果dest存在:
如果目标文件是非目录文件,会覆盖目标文件,这点要注意
如果目录文件是目录文件,则在目录中创建源文件
多源复制中:
如果目标文件不存在,错误
如果目标文件存在:
如果为非目录文件,错误
如果是目录文件,分别复制源文件到目标目录中
常用选项:
-i:交互式复制,即覆盖之前提醒用户确认
-f:强制覆盖目标文件
-r: 递归复制
-d:复制符号链接文件本身
-a:保持原文件的属性
cp一个链接文件时,默认是复制了一个以链接文件名为文件名,内容为链接的文件的内容的文件。
而且元文件属性为新复制文件时的时间
把/root/的所有隐藏文件复制到/tmp/testdir中?
这样的结果是复制整个文件系统的内容到/tmp/testdir,因为.*包含了..,而root的上级目录是根目录
[root@localhost ~]# cp -a .* /tmp/testdir
正确的是:
[root@localhost ~]# cp -a .[^.]* /tmp/testdir
练习题:
1.显示某个目录下的所有隐藏文件?
[root@localhost ~]# ls -d .*
. .Xauthority .bash_logout .bashrc .config .lesshst .viminfo .xauthffHqiY
.. .bash_history .bash_profile .cache .cshrc .tcshrc .xauthN30RIK
2.只显示某个目录下的隐藏目录
[root@localhost tmp]# ls -d /root/.*/
/root/./ /root/../ /root/.cache/ /root/.config/
[root@localhost tmp]# ls -d /root/.* 这个会把隐藏文件和目录都显示出来
/root/. /root/.bash_logout /root/.cache /root/.lesshst /root/.xauthffHqiY /root/.xauthtYuvN2
/root/.. /root/.bash_profile /root/.config /root/.tcshrc /root/.xauthN30RIK
/root/.bash_history /root/.bashrc /root/.cshrc /root/.viminfo /root/.Xauthorit
Linux enable命令用于启动或关闭 shell 内建指令。
若要执行的文件名称与shell内建指令相同,可用enable -n来关闭shell内建指令。若不加-n参数,enable可重新启动关闭的指令。
语法
enable [-n][-all][内建指令]
参数说明:
-n 关闭指定的shell内建指令。
-all 显示shell所有关闭与启动的指令
bash
通配符:
*:
?:
[]:
所有以m,n,r开头的以.conf结尾的文件
eg:[mnr].conf
[^]:非[]中的
[[:space:]]
[[:upper:]]
[[:lower:]]
[[:alnum:]]
[[:digit:]]
[[:punct:]]
IO重定向及管理
可用于输入的设备:文件
键盘设备、文件系统上的常规文件,网卡等
可用于输出的设备: 文件
显示器、文件系统上的常规文件、网卡等
程序的数据流有三种:
输入的数据流:<----标准输入(stdin),键盘 0
输出的数据流:----->标准输出(stdout),显示器 1
错误的输出流: -----> 错误输出(stderr),显示器 2
set 设置或者撤销shell的一些选项
set -C : 设置无法覆盖文件
如果确认想要覆盖,可以使用>|
set +C : 关闭上述特性,可以自由覆盖,
>:覆盖重定向
>>:输出追加重定向
<:输入重定向
2>: 错误输出覆盖重定向
2>>:错误输出追加重定向
合并正常输出流和错误流:
(1)&>,$>>
eg:cat /etc/issue &> /tmp/issue.out
(2)command >/path/to/somefile 2>&1
command >>/path/to/somefile 2>&1,这里即使追加重定向也不用2>>&1
eg:
cat /etc/issue >> /tmp/issue.out 2>&1
将多个命令的执行结果保存
eg:[root@localhost ~]# (pwd;ls) > /tmp/a
将输入的内容保存到某个文件
cat > /tmp/cat.out << EOF
> how are you
> how old are you
>EOF
[root@localhost ~]# cat /tmp/a
/root
anaconda-ks.cfg
fish-1.23.1-1.el6.rf.x86_64.rpm
initial-setup-ks.cfg
合并两个文件的内容:
[root@localhost ~]# cat f1 f2 > f3
命令 > /dev/sda
上列命令会将某个‘命令‘的输出写到块设备/dev/sda中。该操作会将在块设备中的所有数据块替换为命令写入的原始数据,从而导致整个块设备的数据丢失。
tr命令: 不会修改原文件,必须有输入,不能直接接文件
-c或——complerment:取字符集的补集
-d或——delete:删除所有属于第一字符集的字符;
-s或—squeeze-repeats:把连续重复的字符以单独一个字符表示
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符
用法1: tr SET1 SET2 < /path/to/file
eg: [root@localhost ~]# tr ‘[a-z]‘ ‘[A-Z]‘ < /etc/issue
RED HAT ENTERPRISE LINUX SERVER RELEASE 5.8 (TIKANGA)
KERNEL \R ON AN \M
用法2:tr -d ‘adb‘ < /etc/issue
[root@localhost ~]# tr -d ‘abc‘ < /etc/issue
Red Ht Enterprise Linux Server relese 5.8 (Tikng)
Kernel \r on n \m
用法3:操作补集
[root@localhost ~]# tr -dc ‘abc‘ < a
abcaaabbbccc[root@localhost ~]# cat a
abcefg
123
aaabbbccc
[root@localhost ~]# tr -c ‘a\n‘ ‘Z‘ < a
aZZZZZ
ZZZ
aaaZZZZZZ
[root@localhost ~]# tr ‘abc‘ ‘xy‘
aaabbbccc
xxxyyyyyy
[root@localhost ~]# tr -t ‘abcd‘ ‘xy‘ < a
xycefg
123
xxxyyyccc
[root@localhost ~]# tr -s ‘ab‘ ‘xy‘ < a
xycefg
123
xyccc
[root@localhost ~]# tr ‘bc‘ ‘xyz‘
aaabbbccc
aaaxxxyyy
[root@localhost ~]# ls /root/ | tr "\n" "\v"
a
anaconda-ks.cfg
b
c
d
fish-1.23.1-1.el6.rf.x86_64.rpm
initial-setup-ks.cfg
lntest
lovers.txt
mail
1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中。
[root@localhost ~]# tr ‘a-z‘ ‘A-Z‘ < /etc/issue >/tmp/issue.out
[root@localhost ~]# cat /tmp/issue.out
\S
KERNEL \R ON AN \M
3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,the system version is here,pleasehelp me to check it ,thanks!
操作系统版本信息
[root@localhost ~]# mail -s "help" root <<EOF
i am `id -nu` ;
`cat /etc/centos-release`
EOF
[root@localhost ~]# cat a | mail -s "help5" root
[root@localhost ~]# mail -s "help6" root < b
[root@localhost ~]# cat b
i am second
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开。
一 [root@localhost ~]# ls /root/ | tr "\n" " "
a anaconda-ks.cfg b c d fish-1.23.1-1.el6.rf.x86_64.rpm initial-setup-ks.cfg lntest lovers.txt mail
二 [root@localhost ~]# ls /root/ | xargs
5、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和
6、删除Windows文本文件中的‘^M‘字符
7、处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格
install命令: 复制文件并且设置目录
单源复制:
install [option] ... SOURCE DEST
多源复制:不能复制目录
install [option] ... SOURCE... DEST
创建目录:
install [option]... -d DIRECTORY...
常用选项:
-m,--mode=MODE:设定目标文件权限
-o,--owner=OWNER:设定目标文件属主
-g,--group=GROUP:设定目标文件属组
eg:
[root@localhost tmp]# install -m 600 -o jay -g jay /etc/issue /tmp/issue
[root@localhost tmp]# ll /tmp/issue
-rw-------. 1 jay jay 47 Jul 20 15:05 /tmp/issue
[root@localhost tmp]# ll /etc/issue
-rw-r--r--. 1 root root 47 May 19 03:47 /etc/issue
screen命令: 命令详解 http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
打开新的screen:
# screen
或:#screen -S SCREENNAME
退出并关闭screen:
# exit
剥离当前screen:
Ctrl+a,d
或screen -d [SESSION]
显示所有已经打开的screen:
screen -ls
恢复某screen
screen -r [SESSION]
screen -x [session]
加入到某个screen
screen -x SCREENNAME
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态
,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
。另一个关闭窗口的方法是使用C-a k,这个快捷键杀死当前的窗口,同时也将杀死这个窗口中正在运行的进程。
如果一个Screen会话中最后一个窗口被关闭了,那么整个Screen会话也就退出了,screen进程会被终止。
除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,
然后输入quit命令退出Screen会话。
需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序
快捷键
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,
此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> Time,显示当前时间,和系统的 load
C-a k -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上
5.3 查看窗口和窗口名称
打开多个窗口后,可以使用快捷键C-a w列出当前所有窗口。如果使用文本终端,这个列表会列在屏幕左下角,如果使用X环境下的终端模拟器,
这个列表会列在标题栏里。窗口列表的样子一般是这样:
0$ bash 1-$ bash 2*$ bash
这个例子中我开启了三个窗口,其中*号表示当前位于窗口2,-号表示上一次切换窗口时位于窗口1。
Screen默认会为窗口命名为编号和窗口中运行程序名的组合,上面的例子中窗口都是默认名字。练习了上面查看窗口的方法,你可能就希望各个窗口
可以有不同的名字以方便区分了。可以使用快捷键C-a A来为当前窗口重命名,按下快捷键后,Screen会允许你为当前窗口输入新的名字,回车确认
mktemp:创建临时文件
mktmp [options] TEMP
-d:创建临时目录
eg: mktmp /tmp/mytest.xxxxx
开发时经常会需查看非文本文件内容,最常见的16进制查看器就是hexdump
hexdump:
格式:hexdump [option] FILENAME| less
选项:
-b 将每个字节显示为8进制
-c 将每个字节显示为ASCII字符
-C 每个字节显示为16进制和相应的ASCII字符
-d 每两个字节显示为10进制
-o 每两个字节显示为8进制
-x 每两个字节显示为16进制
常用:hexdump -C binfile
显示结果分为三列(文件偏移量、字节的十六进制、ASCII字符)
DOS/Windows的换行符 \r\n 即十六进制表示 0D 0A
Linux/Unix的换行符 \n 即十六进制表示 0A
[root@localhost ~]# hexdump -C ab.txt -s 3 -n 4
00000003 62 0d 0a 63 |b..c|
00000007
将doc文件装换为unix类型 去除换行符不一致的,
dos2unix FILENAME
pwd :
-P:显示真正的物理路径,而不是软连接的目录
centos6及以后的atime更改策略:
1只有在以下三种情况之一才会更新atime:
(1) 如果将分区mount的挂载的时候指定采用非relatime方式(默认采用relatime方式),如strictatime.
补充:在OS启动的时候,将各个分区挂载到不同的目录,在挂载(mount)的参数中采用strictatime,表明及时更新atime。在2.6.30之后mount添加了”relatime”和”strictatime”两个选项,详细的可以通过”man mount”查看。
(2) atime小于ctime或者小于mtime的时候
(3) 本次的access time和上次的atime超过24个小时
管道 接受标准输出
[root@localhost ~]# cat /etc/issue| tr ‘a-z‘ ‘A-Z‘
RED HAT ENTERPRISE LINUX SERVER RELEASE 5.8 (TIKANGA)
KERNEL \R ON AN \M
既打印到屏幕又保存到文件一份
[root@localhost ~]# cat /etc/issue | tr -d ‘adb‘| tee /tmp/cat2.out
Re Ht Enterprise Linux Server relese 5.8 (Tikng)
Kernel \r on n \m
|&:表示无论正确错误都输入
[root@localhost ~]# ls /errr |& tr ‘a-z‘ ‘A-Z‘
LS: CANNOT ACCESS /ERRR: NO SUCH FILE OR DIRECTORY
[root@localhost ~]# ls /errr 2>&1 | tr ‘a-z‘ ‘A-Z‘
LS: CANNOT ACCESS /ERRR: NO SUCH FILE OR DIRECTORY
用户标识:
16进制:0-65535
管理员:0
普通用户:1-65535
系统用户:1-499(Centos6),1-999(Centos7)
登录用户:500-60000(CentOS6),1000-60000(CentOS7)
私有组和基本组的关系?
密码的使用策略:
1.使用随机密码
2.最短长度不要低于8位
3.应该使用大写字母,小写字母,数字和标点符号中的至少3类
4.定期更换
加密算法:
对称加密; 加密和解密使用同一个密码;
非对称加密:加密和解密使用的一对儿密钥:
密钥对儿:
公钥
私钥
单向加密:只能加密,不能解密,:提取数据特征码
定长输出
雪崩效应
非对称加密比对称加密慢3个数量级
加密是定长输出的,且微小的差异结果相差很多:
[root@localhost ~]# echo "magedu" | sha224sum
4fcc85567843dce2a166f3bee52fe2395f0fc732e01239cb5d48634e -
[root@localhost ~]# echo "magedu1" | sha224sum
8c516813770259a2c9e672b3cd85f19b6c60c1879410c718b7deac69 -
#echo "haha" | sha512sum 也可以加密,sha512要比md5更安全
相同的字符串,结果是相同的,为了防止这种情况,在/etc/shadow中
加了salt,也就是随机字符串,使得即使相同的密码,结果看起来也不同。
groupadd [options] group_name
更改加密算法authconfig--passalgo=sha256 --update
目录与文件的权限意义:
权限对文件的意义:
文件是实际含有数据的地方,包含一般文本文件,数据库内容文件,二进制可执行文件
r:可读取此文件的实际内容,如可读取文本文件的文字内容等
w:可以编辑、新增、或者修改该文件的内容(但不含删除该文件),这里的修改等是对文件内容而言,是否可以删除文件要看该目录的权限
x:该文件具有可以被系统执行的权限,linux中文件是否可被执行,不是看其文件名,而是看权限
权限对目录的意义:
目录主要的内容是记录文件名列表,文件名与目录有强烈的关联
r:表示具有读取目录结构列表的权限
w:1.新建新的文件与目录
2.删除已经存在的文件与目录
3.将已存在的文件与目录的重命名
x:表示用户是否能够进入该目录病成为工作目录
如果想让一个目录让任何人都可以浏览,至少应该开放r,x权限,w不能随便给
参照指定文件的权限来给新文件赋予权限
chown [options] --reference=SFILE DFILE
对于/etc/passwd,/etc/group等文件直接利用vim命令可能造成文件的格式问题,建议使用vipw,vigr
对于/etc/passwd,/etc/group等文件进行检查可以使用命令pwck和grpck
umask:默认权限
文件:
666-umask
目录:
777-umask
如果umask如果是003,那么新建的文件权限是什么?
666-003=663(rwxrwx-wx) 这个是不对的,因为一般文件是默认没有可执行权限的
可以使用字符做加减
用户仅可以修改自己为属主的文件的权限,
仅管理员可以修改文件的属主和属组
隐藏权限
chatter:设置文件的隐藏属性
+:增加某一个特殊参数,其他原本参数不动
-:删除某一个特殊参数,其他参数不动
=:设置为仅后面的参数
选项:
a:设置a后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性
i:它可以让一个文件不能被删除,改名,设置连接也无法写入或添加数据,对系统安全有重要意义,只root可设置
lsattr:查看隐藏属性
特殊权限
SetUID: 针对文件
SUID权限仅对二进制程序有效
执行者对于该程序需要具有x的执行权限
本权限仅在执行过程中有效
执行者将具有该程序所有者的权限
eg:[root@livecd ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
SetGID: 针对文件
SGID对二进制程序有用
程序执行者对于该程序来说,需具备x的权限
执行者在执行过程中将会获得该程序用户组的支持
设置该选项后具有的功能:
用户若对于此目录具有r与x的权限时,该用户能够进入此目录
用户在此目录下的有效用户组将会变成该目录的用户组
若用户再次目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同
SBIT: 针对目录
当用户对于此目录具有w,x权限,即具有写入的权限
当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件
find命令:
find [path] [option] [action]
参数:
-[mtime|ctime|atime]:
n : n为数字,意义为在n天之前的“一天之内” 被改动过的文件
+n:n天之前被更改过的文件
-n:n天之内被更改过的文件
-newer:比那个文件更新的
找出/etc下比/etc/passwd更新的所有文件
find /etc -newer /etc/passwd
-uid n: 按照用户id查找
eg: find /tmp -uid 500
-gid n;
-user name:
-group name:
-nouser:
-nogroup
-name filename
eg: find name /pattern/
支持glob风格的通配符,
-regex pattern:基于基础正则表达式模式查找文件,匹配的是整个路径,而非其名
-iname filename:忽略文件名大小写
-size [+-]SIZE:
eg:find /etc/ -size +1M
#UNIT:(#-1,#]
-#UNIT: [0,#-1]
+#UNIT: (#,无穷大)
-type TYPE: 依照文件类型查找
f:
d:
l:
b:
-perm mode: 权限完全相等的文件会显示
-perm -mode:三组权限大于等于要求的文件都会显示
-perm /mode: 只要有某一位权限吻合就显示
-exec command
组合测试:
与:-a,默认组合逻辑
或:-o,
非:-not ,!
练习:
1.找出/tmp/目录下属主为非root,且文件名不包含fstab字符串的文件;
处理动作:
-print:输出至标准输出,默认的动作
-ls:类似于对查找到的文件执行“ls -l”,输出文件的详细信息
-delete:删除查找到的文件
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令,每次操作都由用户确认
-exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令
注意:find 传递查找到的文件路径至后面的而命令时,是先查找出所有符合条件的文件路径,并
一次性传递给后面的命令,但有些命令不能接受过长的参数,此时命令执行会失败。
xargs:
eg: cut -d: -f1 /etc/passwd | xargs mv {} {}.er
linux用户和组管理
groupadd : 添加组
-g GID:指定GID,默认是上一组的GID
-r :创建系统组
eg:增加一个组ID为3305的系统组
[root@localhost ~]# groupadd -r -g 3305 myssql
[root@localhost ~]# tail -1 /etc/group
myssql:x:3305:
groupmod命令: 修改组的属性
groupadd [options] GROUP
-g GID: 修改GID;
-n new_name:删除组名
eg: 同时修改组合GID
[root@localhost ~]# groupmod -g 3308 -n mygroup myssql
[root@localhost ~]# !tai
tail -1 /etc/group
mygroup:x:3308:
groupdel: 删除组
useradd命令: 创建用户
useradd [options] 登录名
-u UID: 指定UID
-g GROUP:指定基本组ID
-G GROUP1,GROUP2....:指明用户所属的附加组
-c,--comment COMMENT:指明注释信息
-d,--home HOME_DIR:以指定的路径作为家目录,
-s,:指定用户的默认shell
-r:创建系统用户,默认没有家目录
-M:不创建家目录
-N 不创建私用组做主组,使用users组做主组
useradd -D: 显示创建用户的默认配置
useradd -D arg:修改默认选项的值
默认修改的结果其实在/etc/default/useradd
创建用户时的诸多默认设定配置文件为/etc/login.defs
添加系统用户:
useradd -r -s /sbin/nologin na
usermod命令: 修改用户属性
usermod 选项 登录名
-u,--uid UID:修改用户的ID为此处指定的新UID,如果同时有-o选项,则可以重复使用其他用户的标识号,例如让两个用户拥有相同的UID
eg: usermod -o -u 0 jay
-g GID:修改用户所属的基本组
-G GROUP1,GROUP2....:指定用户所属的附加组
-a -G GID : 添加一个附加组
-c OMMENT:指明注释信息
-d -m HOME_DIR:修改用户的家目录,并将原来的文件也转移到新位置
-d HOME_DIR:只重新指定新的家目录,原有的文件不动
-l NEW_LOGIN:修改用户名
-s SHELL: 修改用户的shell
-L :锁住用户,用户不能登录,其实是在密码串前加一个“!”
-U:解锁用户
tips:修改用户名后只是修改了用户的名称,其他的家目录和密码等都没有改变,所以/home/下并没有新用户名命名的目录
i love you ,do you know
userdel: 删除用户
-r:移除用户的家目录,默认不删除用户家目录
passwd
-l,-u:锁定和解锁用户
-d:清除用户的密码
--stdin: 利用标准输入赋予密码
eg: echo "haha" | passwd --stdin jay
newgrp:可以切换基本组。
exit:可以撤销为原来的组
gpasswd:
gpasswd [options] group
-a USERNAME:添加用户
-d USERNAMW:删除用户
不加选项就是赋予组密码,可以用来被其他用户临时作为基本组
chage命令:
chage [options] 用户名
-l:列出用户的以及密码的有效期限
-m:修改密码的最小天数
-M:修改密码的最大天数
-I:密码过期后,锁定帐号的天数
-d:指定密码最后修改的日期
-E:有效期,0表示立即过期,-1表示永不过期
-W:密码过期前,开始警告天数
$ sudo chage -d0 <user-name>
最初,“-d <N>”选项应该被设成密码的“有效期”(自密码上一次更改时间1970年1月1日以来的天数)。所以,“-d0”表明该密码是在1970年1月1日更改的,
这实际上让当前密码到期失效,从而让密码在下一次登录时被更改。
让当前密码到期失效的另一个办法是通过passwd命令。
$ sudo passwd -e <user-name> 此命令具有与“chage -d0”同样的功效,让用户的当前密码立即到期失效。
[root@localhost ~]# passwd -e lu
Expiring password for user lu.
passwd: Success
You have new mail in /var/spool/mail/root
[root@localhost ~]# tail -1 /etc/shadow
lu:$6$ykaDA5pL$F4/xBagMqc81vmYh5g3di3hdpmQmGuhqtFBegVHLOci4Fd.fhai.XLcFwANBQU1kw3ASyy0Q.25XyFx7KJ/JL/:0:0:99999:7:::
id [options] [user]
-n:
-u:
-g:
-G:
su
-c:不切换过去,直接执行一些命令
文件比较工具:
diff:
diff [-bBi] from-file to-file
options:
-b:忽略一行当中仅有多个空白的区别
-B:忽略空白行的区别
-i:忽略大小写的差别
eg:
[root@]localhost test] # cat issue.old issue.new
\S
Kernel \r on an \m
Kernel \r on an \m
hello world
[root@]localhost test] # diff issue.old issue.new
1d0
< \S
2a2
> hello world
patch:
patch -p# < patch.file
patch -R -p# < patch.file
-p #:表示取消几层目录的意思
-R :代表还原,将新文件还原为原来的旧版本
[root@]localhost ~] # diff -Naur issu^C
[root@]localhost ~] # cd /tmp/test/
[root@]localhost test] # diff -Naur issue.old issue.new > issue.patch
[root@]localhost test] # cat issue.patch
--- issue.old 2016-07-31 11:08:47.537563762 +0800
+++ issue.new 2016-07-31 11:09:35.176561366 +0800
@@ -1,3 +1,3 @@
-\S
Kernel \r on an \m
+hello world
[root@]localhost test] # patch -p0 < issue.patch
patching file issue.old
[root@]localhost test] # cat issue.old
Kernel \r on an \m
hello world
[root@]localhost test] # patch -R -p0 < issue.patch
patching file issue.old
[root@]localhost test] # cat issue.old
\S
Kernel \r on an \m
独立分区:
/boot: 100M即可
/: 10-15G
/swap: 至少512M,一般等于自己的物理内存即可,太大也无用
/home: 最大剩余空间的一半,多留点
进程以其发起者的身份运行;
进程对文件的访问权限,取决于发起此进程的用户的权限
为了能够让后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户,这类用户从不登录系统
红帽知识库和官方在线文档
http://kbase.redhat.com
http://www.redhat.com/docs
http://access.redhat.com
http://tldp.org
http://www.slideshare.net
http://www.google.com
Openstackfiletype:pdf
rhcasite:redhat.com/docs本文出自 “mylinux” 博客,请务必保留此出处http://luxiangyu.blog.51cto.com/9976123/1833146
标签:linux基础 命令
原文地址:http://luxiangyu.blog.51cto.com/9976123/1833146