Linux 一些常用操作

/ 运维 / 没有评论 / 397浏览

额外:

SSH远程执行命令,提示环境变量找不到的情况:

修改用户根目录下的 .bashrc文件,将环境变量添加进去

一.设置账号(以张三为例):

#此时会自动创建出/home/zhangsan的家目录,如果没有则在命令中使用-m
useradd zhangsan
#此时会自定义指定家目录并生成目录
useradd -d /user/zhangsan -m zhangsan

 以上两种情况会生成用户的同时,生成同名的用户组,如需生成时指定用户组,可以用以下命令,但是该用户组必须已创建存在;

useradd -g mygroup zhangsan

 删除用户

#加上-r则一起删除用户家目录
userdel -r zhangsan

 修改用户:

#与useradd差不多
usermod ...

 给用户root权限:

修改/etc/sudoers文件:

root    ALL=(ALL)     ALL

此处编写新用户,如:

zhangsan    ALL=(ALL)     ALL

查看其他用户:

cat /etc/passwd

二.创建或修改密码:

#会出输入框输入两次密码
passwd zhangsan
#可以直接一次性设置密码
echo '123123'|passwd zhangsan --stdin

 以上创建或修改密码,如果当前登录用户修改密码,则直接输入passwd

三.passwd命令控制账户

#禁用用户
passwd -l zhangsan
#解锁密码
passwd -u zhangsan
#清除密码
passwd -d zhangsan

四.操作用户组

新建和删除用户组:

#创建
groupadd zhangsanG
#删除,被删除的用户组不可以是任何用户的主用户组
groupdel zhangsanG

加入用户组:

#此处最好使用-a,不加则会退出其他用户组
usermod -a -G zhangsanG zhangsan

查看所有用户组:

cat /etc/group

操作用户组的用户:

#将用户移出用户组
gpasswd -d zhangsan zhangsanG

选项 功能
选项为空时,表示给群组设置密码,仅 root 用户可用。
-A user1,... 将群组的控制权交给 user1,... 等用户管理,也就是说,设置 user1,... 等用户为群组的管理员,仅 root 用户可用。
-M user1,... 将 user1,... 加入到此群组中,仅 root 用户可用。
-r 移除群组的密码,仅 root 用户可用。
-R 让群组的密码失效,仅 root 用户可用。
-a user 将 user 用户加入到群组中。
-d user 将 user 用户从群组中移除。

五.操作文件或文件夹权限(此处示例为网上查找)


首先给出一张典型的显示结果: 
 
下面对其中的每一列进行详细的分析:

一、文件类型
 
表示该文件的类型:

“-”表示普通文件;
“d”表示目录;
“l”表示链接文件;
“p”表示管理文件;
“b”表示块设备文件;
“c”表示字符设备文件;
“s”表示套接字文件;
二、文件属性
 
以back_init文件为例,其属性可分为三段:[rwx][rwx][r-x],其中:

第一段表示文件创建者/所有者对该文件所具有的权限,第二段表示创建者/所有者所在的组的其他用户所具有的权限,第三段表示其他组的其他用户所具有的权限。

r(Read,读取权限):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
w(Write,写入权限):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
x(eXecute,执行权限):对文件而言,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。
另外,这里还有2个很特殊的属性,平时不怎么常见,这里也顺带解释一下:

s或S(SUID,Set UID):可执行的文件搭配这个权限,便能得到特权,任意存取该文件的所有者能使用的全部系统资源。请注意具备SUID权限的文件,黑客经常利用这种权限,以SUID配上root帐号拥有者,无声无息地在系统中开扇后门,供日后进出使用。
t或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。
综合起来可得,对于back_init文件,其创建者/所有者具有可读可写可执行的权限,其创建者/所有者所在的组的其他用户具有可读可写可执行的权限,其他组的其他用户则具有可读可执行但不可写的权限。

三、目录/链接个数


对于目录文件,表示它的第一级子目录的个数。注意此处看到的值要减2才等于该目录下的子目录的实际个数。

比如这里的include目录下,其实是没有子目录的,所以应该是0,但是它这里却显示2,这是因为要加上.目录和..目录。在linux下,.目录表示当前目录,..目录表示上一级目录。

这也可以解释上图中第一行的.目录下的3和第二行..目录下的26。因为当前目录下有一个include目录,所以加上.目录和..目录这2个目录就等于3,所以第一行会显示3。而上一级目录共有24个目录,加上上一级目录的.目录和..目录这2个目录,所以这里的第二行显示的是26。

对于其他文件,表示指向它的链接文件的个数。

四、所有者及组
 
表示该文件的所有者/创建者(owner)及其所在的组(group)。

五、文件大小


如果是文件,则表示该文件的大小,单位为字节。 
如果是目录,则表示该目录符所占的大小,并不表示该目录下所有文件的大小。

六、修改日期
 
该文件最后修改的日期时间。

七、文件名称
 
文件名,无需多说。

八、字体颜色
 
在大多数的linux shell窗口中,还能用颜色来区分不同文件的属性:

灰白色表示普通文件;
亮绿色表示可执行文件;
亮红色表示压缩文件;
灰蓝色表示目录;
亮蓝色表示链接文件;
亮黄色表示设备文件;
当然,这里需要使用系统缺省的配色方案。如果你自定义了shell的配色方案,则有可能与上面的定义不一致。

最后还要说明一点的是,可以看到上述的图片中,back_init文件的后面还带了一个星号(*),这也是linux系统下用于标记可执行文件的另外一种方式。也就是说,凡是文件名后面带了一个星号(*)的,都是在说明这是一个可执行文件。


1.将目录/usr/testuser及其下面的所有文件、子目录的文件用户及组改成zhangsan和zhangsanG

chown -R zhangsan:zhangsanG /usr/testuser
chown(选项)(参数)
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;

-f或--quite或——silent:不显示错误信息;

-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;

-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;

-v或——version:显示指令执行过程;

--dereference:效果和“-h”参数相同;

--help:在线帮助;

--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;

--version:显示版本信息。

2.设置/usr/testuser目录权限:

chmod 777 /usr/testuser

chmod命令

Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用。

使用权限 : 所有使用者

chmod [-cfvR] [--help] [--version] mode file...

mode : 权限设定字串,格式如下 :

[ugoa...][[+-=][rwxX]...][,...]

其中:

  1. u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
  2. '+' 表示增加权限、'-' 表示取消权限、'=' 表示唯一设定权限。
  3. r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

其他参数说明:

  1. -c : 若该文件权限确实已经更改,才显示其更改动作
  2. -f : 若该文件权限无法被更改也不要显示错误讯息
  3. -v : 显示权限变更的详细资料
  4. -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
  5. --help : 显示辅助说明
  6. --version : 显示版本

六.管理登录用户

1.查看当前登录的用户:

w

2.强制用户下线:

#下线某一个进程
pkill -kill -t pts/1
#删除用户所有进程
pkill -u zhangsan

七.查看历史信息

1.查看某个用户(zhangsan)的操作命令

cat  /home/zhangsan/.bash_history

2.查看登录情况:

1、查看当前登录用户信息 
who命令: 
who缺省输出包括用户名、终端类型、登陆日期以及远程主机。 
who /var/log/wtmp 
可以查看自从wtmp文件创建以来的每一次登陆情况 
(1)-b:查看系统最近一次启动时间 
(2)-H:打印每列的标题

users命令: 
打印当前登录的用户,每个显示的用户名对应一个登陆会话。

2、查看命令历史 
每个用户都有一份命令历史记录 
查看$HOME/.bash_history 
或者在终端输入: history

3、last命令 
查看用户登录历史 
此命令会读取 /var/log/wtmp文件;/var/log/btmp可以显示远程登陆信息。 
last默认打印所有用户的登陆信息。 
如果想打印某个用户的登陆信息,可以使用 
last 用户名

选项: 
(1)-x:显示系统开关机以及执行等级信息 
(2)-a:将登陆ip显示在最后一行 
(3)-f :读取特定文件,可以选择 -f /var/log/btmp文件 
(4)-d:将IP地址转换为主机名 
(5)-n:设置列出名单的显示列数 
(6)-t:查看指定时间的用户登录历史 
例如: 
last -t 20150226160404 
显示这个时间戳之前的登陆历史

4、lastlog命令 
查看所有用户最近一次登录历史 
命令将读取/var/log/lastlog文件;用户排列顺序按照/etc/passwd中的顺序 
选项: 
(1) -u:查看某个用户的最后一次登陆历史 
例如: lastlog -u test 
查看用户test的登陆历史 
(2) -t:查看最近几天之内的用户登录历史 
例如: lastlog -t 1 
查看最近1天之内的登陆历史 
(3) -b:查看指定天数之前的用户登录历史 
例如: lastlog -b 60 
查看60天之前的用户登录历史

5、ac命令 
根据/var/log/wtmp文件中的登陆和退出时间报告用户连接的时间(小时),默认输出报告总时间 
(1)-p:显示每个用户的连接时间 
(2)-d:显示每天的连接时间 
(3)-y:显示年份,和-d配合使用

2.查看操作历史

who 命令:显示当前当登录的用户的信息

       who -b命令:显示系统最近一次的启动时间

       w 命令:显示登录的用户及其当前执行的任务

       last 命令:显示当前与过去登录系统的用户的信息

       lastb 命令:显示所有登录系统失败的用户的信息

       lastlog 命令:显示用户最后一次登录的信息

       history 命令:查看操作历史

       history -c命令:清除操作历史

       pkill -kill -u test : 强制test用户下线

history 默认只记录1000条,而且记录信息不够详细。可以设置存储更多的记录数,格式化history记录的操作信息。最后执行source /etc/profile使得修改生效.

#保存一万条命令记录
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

#在/etc/profile的文件尾部添加如下行数配置信息 ######jiagu history xianshi######### USER_IP=<span class="hljs-built_in">who</span> -u am i 2&gt;/dev/null | awk <span class="hljs-string">'{print $NF}'</span> | sed -e <span class="hljs-string">'s/[()]//g'</span> if [ "$USER_IP" = "" ] then USER_IP=hostname fi export HISTTIMEFORMAT="%F %T $USER_IP whoami " shopt -s histappend export PROMPT_COMMAND="history -a" ######### jiagu history xianshi ##########

八.查看系统日志:

1.日志在目录/var/log/下:

查找被系统Killed process的进程:

journalctl -xb | egrep -i 'killed process' 或 dmesg | egrep -i -B100 'killed process'

脚本:

一键创建用户脚本:

#!/bin/bash

# 需要创建的用户名,示例:USER_NAME=myuser USER_NAME= # 创建用户所属的用户组,示例:USER_GROUP=mygroup USER_GROUP= # 用户密码,示例:USER_PASSWD=Cloud12#$ USER_PASSWD=

# 校验参数 function check_param() { if [[ ! -n ${USER_NAME} ]] || [[ ! -n ${USER_GROUP} ]] || [[ ! -n ${USER_PASSWD} ]]; then echo "ERROR: Please check the param USER_NAME,USER_GROUP,USER_PASSWD can not be null" exit 1; fi }

# 创建用户 function creat_user() { check_param

<span class="hljs-comment">#create group</span>
grep <span class="hljs-string">"^<span class="hljs-variable">${USER_GROUP}</span>"</span> /etc/group &amp;&gt; /dev/null
<span class="hljs-keyword">if</span> [ $? -ne 0 ]; <span class="hljs-keyword">then</span>
    groupadd <span class="hljs-variable">${USER_GROUP}</span>
<span class="hljs-keyword">fi</span>
<span class="hljs-comment">#create user</span>
<span class="hljs-built_in">id</span> <span class="hljs-variable">${USER_NAME}</span> &amp;&gt; /dev/null
<span class="hljs-keyword">if</span> [ $? -ne 0 ]; <span class="hljs-keyword">then</span>
    useradd -g <span class="hljs-variable">${USER_GROUP}</span> <span class="hljs-variable">${USER_NAME}</span> -d /home/<span class="hljs-variable">${USER_NAME}</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-variable">${USER_PASSWD}</span>| passwd <span class="hljs-variable">${USER_NAME}</span> --stdin
    chage -M 99999 <span class="hljs-variable">${USER_NAME}</span>
<span class="hljs-keyword">fi</span>

}

creat_user $*