Ubuntu-Basis-2nd cat 、tac wc sort uniq cut tee history more less head tail which 文件权限 用户和用户组 su与 sudo alias

周六,晴,记录生活分享点滴

参考博客:https://www.cnblogs.com/resn/p/5800922.html

推荐阅读:https://www.runoob.com/linux/linux-tutorial.html

cat : 链接文件后输出文件内容到屏幕上,其实就是查看文件内容

tac : 反转行的输出

cat file1  #显示 file1的文件内容
cat file1 file2   # 显示file1和file2的文件内容 
cat -n file1  #  由1开始对所有输出的行数编号
cat -s file  # 当遇到连续2行以上的空白行,只保留一行空白行

小结:有空格的时候不是空白行

 

wc

wc:统计指定文件中的字节数、字数、行数,并将统计结果显示输出

-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串

小结:-w可以理解为一个单词,单词与单词之间需要用空格之类的符号间隔开

 

sort

sort:排序

sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b  :忽略最前面的空格符部分;
-n  :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r  :反向排序;
-u  :就是 uniq ,相同的数据中,仅出现一行代表;
-t  :分隔符,默认是用 [tab] 键来分隔;
-k  :以那个区间 (field) 来进行排序的意思

uniq

uniq:忽略或报告重复行

uniq [-icu]
选项与参数:
-i   :忽略大小写字符的不同;
-c  :进行计数
-u  :只显示唯一的行

小结:uniq即去重(删去重复的),同 sort-u

 

cut

cut:从一个文本文件或者文本流中提取文本列

选项与参数:
-d  :后面接分隔字符。与 -f 一起使用;
-f  :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c  :以字符 (characters) 的单位取出固定字符区间

小结:cut 分隔文本,当一个文件有多列的时候,希望把一列取出来

 

tee

tee:读取标准输入的数据,并将其内容输出成文件。

cat sec.log | tee file1  # 读取sec.log ,并生成file1文件
cat sec.log | tee - a file1   # 读取sec.log ,并追加,
cat sec.log  |tee  file1 file2 

小结:

  • stdin标准输入:系统通过 stdin 接收输入的命令,并执行,出反馈结果
  • stdout标准正确输出:如果执行正确,发送到 stdout 里面,可以从这看到
  • stderr标准错误输出:如果执行错误,发送到 stderr 里面,可以从这看到

 

history

history:查看执行过的命令。

history  # 显示最近1000条历史命令
history 5   # 显示最后5条命令
!number# number为history之后命令前的序号:执行该条命令
!cat # 执行最后一条以cat开头的命令

more

more:查看文件内容

 

less

less:查看文件内容

小结:如果查看 cat 文件内容,先输入 /  (正斜杠) ,再输入cat

 

head

head:输出文件的开始的部分, 可以指定行数 , 默认显示10行

head -n 5 file 

tail

tail:查看文件尾部的内容。默认显示最后10行

tail file1
tail -n 5 file1
tail -f file1  # 动态监控文件

小结:tailf 等价于 tail -f

 

which

which:查找其他命令的位置

which ls

文件权限

rwxrwxr-- : 三组rwx 分别表示 所有者、所有组、其他人 的权限。

r : 表示可读, 可以用数字 4 来表示
w : 标识可写 ,可以用数字 2 来表示
x : 表示可执行 , 可以用数字 1 来表示
- :表示没有相应权限  可以用数字 0 来表示

修改权限的方法: 

chmod o+w  file1
chmod g-w file1
chmod go-w file1
chmod u=rwx file1

chmod 755  file1  # -rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限
chmod 644  #  -rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限


#  其中:
#  u 代表所有者(user)
#  g 代表所有者所在的组群(group)
#  o 代表其他人,但不是u和g (other)
#  a 代表全部的人,也就是包括u,g和o

目录上的权限: 

r :  表示是否可以读取目录下的文件名

w :  表示是否可以在目录下创建修改文件

x  : 表示目录是否可以被搜索

有x权限后,就可以使用  ./a.py 的方式执行文件。

chown : 更改文件的所有者和所有组

chown root:root  file
chown root   file  
chown :root   file 

小结:

  • chmod:修改权限位rwx,
  • 表示方式:+  -  =  number(eg:123)
  • 表示用户身份:u  g  o  a(所有人)
  • chown:更改所有者、所有组
  • 参数:-R 递归的修改当前目录及其下的所有文件和目录的权限,即chmod修改的是权限位,chown修改的是所有者、所有组

 

用户和用户组

linux使用文件保存用户信息

文件
#      /etc/passwd 用户账户信息。
#       /etc/shadow 安全用户账户信息。
#       /etc/group 组账户信息。
#       /etc/gshadow 安全组账户信息。
#       /etc/default/useradd 账户创建的默认值。
#       /etc/skel/ 包含默认文件的目录。
#       /etc/login.defs Shadow 密码套件配置。

useradd

useradd:  添加用户

# -c 备注 加上备注。并会将此备注文字加在/etc/passwd中的第5项字段中         
# -d 用户主文件夹。指定用户登录所进入的目录,并赋予用户对该目录的的完全控制权        
# -e 有效期限。指定帐号的有效期限。格式为YYYY-MM-DD,将存储在/etc/shadow         
# -f 缓冲天数。限定密码过期后多少天,将该用户帐号停用       
# -g 主要组。设置用户所属的主要组  www.cit.cn           
# -G 次要组。设置用户所属的次要组,可设置多组         
# -M 强制不创建用户主文件夹         
# -m 强制建立用户主文件夹,并将/etc/skel/当中的文件复制到用户的根目录下         
# -p 密码。输入该帐号的密码         
# -s shell。用户登录所使用的shell         
# -u uid。指定帐号的标志符user id,简称uid

useradd user1 # 添加用户 user1
useradd  -d /home/userTT user2 

userdel 

userdel : 删除用户

userdel  user1 
userdel -r user1

# -r, --remove   用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件必须手动搜索并删除。
# -f, --force    此选项强制删除用户账户,甚至用户仍然在登录状态。它也强制删除用户的主目录和邮箱,即使其它用户也使用同一个主目录或邮箱不属于指定的用户

usermod

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 : 添加组

groupadd group1 
groupadd -g  1000 group1  # 指定gid

groupdel

groupdel : 删除组

groupdel group1 # 删除组

小结:

  • useradd :添加用户
  • userdel :删除用户
  • userdel username :只删除用户信息,用户的家目录不会被删除
  • userdel -r username1 :删除用户信息,用户的家目录被删除
  • usermod :修改用户信息
  • passwd :修改用户密码
  • groupadd、groupdel、groupmod与 user 类似

su与 sudo

su 

su  : 切换用户,没有参数时,默认切换为root用户;

su   # 切换为root

## 推荐
su -   # 切换为root 并加载user1的环境配置
su -  user1 # 切换为user1 并加载user1的环境配置

sudo

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

小结: 

  • su :切换用户
  • su - :加载用户
  • sudo :
  • 一般情况下让用户以管理员的身份执行某条命令;
  • 二般情况下让用户以指定的身份执行某条命令。
  • 进入sudo的方式:vi /etc/sudoers 或 visudo

 


alias

alias : 给命令起别名

alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

如果需要别名永久生效,需要保存到 .bashrc 文件