命令索引
查找使用方法命令
man
man -k reboot 查找有关键字reboot的所有手册
man -f reboot 查找名字为reboot的所有手册
man手册中全部的c函数的使用方法
tldr--------------简短的介绍使用手册
tldr cd
命令的可执行程序所在位置
一.文件及目录相关命令
以下xxx都代表某个文件
ls
ls -al xxx 查看某个文件的具体信息,权限以及所属等 ,一般用在了解某个文件
ls -ald xxx 查看文件夹信息(目录文件directory)
ls -ali xxx 查看某个文件带索引号的信息
ls xxx 还是显示xxx文件
ls -A 打印出当前目录下的除了. … 文件外的所有文件
ln
硬链接,只是将同一个地方的文件起了两个名字,iNode节点号都是一样的
文件大小是不一样的
软连接是在外存中新开辟了一块内存,节点号也是新的,只是外村中存储的是指向a.c连接的那个文件如上图所示
删除硬链接的文件不会把源文件删除,删除软连接也不会
pwd
pwd 一般用来查看当前文件所在的位置.以绝对位置显示
cp
cp xxx yyy 在同一文件夹下,将文件拷贝为yyy,原文件还在
mv
mv xxx yyy 在同一文件夹下,可以用来文件重命名
mv xxx a/b/ 不同文件夹下,将xxx文件移动到a/b/目录下
rm
rm xxx 直接删除文件xxx
rm -rf /* 递归强制删除根目录下的所有文件
cd 、mkdir、rmdir
dirname 、basename
dirname /a/b/c 将目录/a/b取下
basenaem /a/b/c 将文件名c取下
set_uid、set_gid、sticky Bit----文件的特殊权限
set_uid
passwd修改密码程序文件有这个属性
上面用户权限那里,小写S表示原先那里有x大写S表示原先那里没有x
这里是小写说明是有的root用户对它有执行权限,其它用户在执行这个程序时就会拥有root用户的权利(拿着上方宝剑的人拥有皇帝的权利)可以对该文件修改
set_gid
通常把目录设置为该属性,然后只要在该目录里创建的文件都属于同一个组,这样同属一个组的成员可以互相修改
上图所有的命令行执行完毕就会达到
buyl用户在byl用户的set_gid属性目录test下创建一个文件,这个文件所属组自动为byl的
下面来个例子测试:
useradd -G TestGroup TestUser1 用这个命令可以将用户添加到组中,并会自动创建TestUser1用户,但是这个用户并没有在家目录下生成目录,可以使用,可以通过着这种方式来测试,相当与幽灵用户,用完就撤掉
要实现上述三个要求需满足:
1.该目录与TestUser1和TestUser2在同一个组里,且该目录的g属性为rwx(可读即可进入,可写可执行–同一个组的可以进入),o属性为—(不可读不可写不可执行–其它用户不能进入)
2.TestUser1和Testuser2在该目录下创建的文件同属一个组,则该目录的g属性为rws(可读可写可执行,小写s既有x也有s)
3.该目录的o属性为–T(不可读不可写不可执行不同用户不能删除)
敲指令过程如下:
最后文件权限改成下面这样
二. 文件内容的修改与查看
head 、tail
tail -f xxx 查看某个文件尾部新增的内容,一般用来查看某个日志文件
head -n 1 xxx 查看xxx文件里第一行的内容
head -n 20 b | tail -n 10
查看文件里11到20行内容
cat 、TAC、echo
cat xxx 查看某个文件内容,通常用作grep等需要文件内容命令的管道前一个命令
cat -n xxx 查看文件内容时将文字所在的行数也显示出来
NL
nl -b a -n rz -w 5 a
输出文件内容时
1,列出行号空格也列
2,行号在自己字段的最右边显示,前面自动补全0
3,行号所占5位数
more、less
cat b | more
more从管道中读取b文件中一页一页的内容
按回车一行一行的往下
按空格一页一页的往下看
/某个单词,可以搜索
less
cat b | less
n往下,N往上
touch、mtime,atime和ctime --创建与修改文件和文件的三个时间
ls -al a 默认是mtime 为上次修改时间
ls -al --time=atime a 上次acess time访问时间
ls -al --time=ctime a 上次属性改变时间touch a 修改文件的三个时间
lsattr、chattr------打印与改变文件的隐藏属性
除了rwx、s等用ls -al xxx可以看到的普通属性,文件还有很多隐藏属性,通过在设置文件的隐藏属性,可以解锁很多功能
三.文件的查找与定位
which
whereis
locate
find
find . mtime 1 在当前目录下查找1天前一天内被修改的文件
find / mtime 1 在根目录下查找1天前一天内被修改的文件
find . mmin -1 查找一分钟之内被修改过的文件
下面的\是转义字符,-o表示或则的关系
find . -name *.c -o -name *.h | cat
find . -name *.c -o -name *.h | xargs cat | wc -l
find . -name *.c -o -name *.h -exec cat {} ; | wc -l
第一个是打印输出管道里的文件名
第二个是找到所有文件后,给管道,在将管道里所有的文件里的内容都打印出来
第三个只打印管道里第一个文件里的内容
四.用户相关命令
su、sudo、!
sudo -i
sudo -s
sudo su
三者的不同,如下:
sudo -i 直接进入到/root根目录,root用户目录下
另两个还是在原来的目录,只是将当前的用户提权为了root用户
su - 用户名 #直接切换用户
sudo -i #切换为root用户
在其它用户操作的命令前加一个sudo 就是给当前用户赋予了root用户的权利比如 sudo vim a.c 就可以让当前用户通过查看a.c文件
sudo !! 对上一个指令进行提权
sudo apt update 更新所有软件文件的索引信息
sudo apt upgrade 更新所有的软件
sudo updatedb 更新文件信息索引库
chmod a/u/g/o +/- /= r/w/x xxx 可以直接通过 +/-(赋予删除的意思)来给当前用户对相应的文件赋权或减权
chown 用户名:组名 xxx,这个只能root才有权限更改,所以必须在前面加上sudo
chgrp 组名 xxx
!1099 执行历史命令的第1099条
!cl 执行历史命令里匹配cl的最近的命令
还有一个地方用的!号也有匹配的意思
如右:变量参数展开那一节
history
groups、改变用户所在组、提权sudo
groups 查看当前用户所在的组
groups user 查看user用户所在的组
用户的信息在/etc/passwd文件里
组的信息在/etc/group文件里
有root权限的用户信息在/etc/sudoers文件里
usermod -a -G groupname username 将用户添加到组里并且是以增加的方式
除了用groups查看用户所在组,还可以用id查看
将普通用户提权sudo有两种方法,一个是在/etc/sudoers文件里添加用户信息,另一个是直接将用户添加到sudo组里就可以了
passwd--------用户修改密码
sudo passwd username 在其它用户改username用户的密码
passwd 进入要修改密码的用户修改密码
useradd、adduser
useradd 直接添加用户不会提示设置密码等信息,也不会创建用户家目录
adduser 会提示密码等信息,会自动创建用户家目录和user add -m是一样的
五.进程相关命令、任务管理
一个进入进程文件的操作
ps
TOP
df、du
du显示当前目录下所有目录表(iNode)的大小
Linux下用来查找磁盘中哪个地方空间占用较多
Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
dstat
pstree
pstree -np
pgrep
kill、pkill、killall
kill id(某个进程的id)
pkill xxx(进程的某个名字)
kill all id
比如ping baidu.com 这个进程,kill只能接它的进程id这个命令才能干掉它,但是pkill可以直接接ping就干掉它
ps、grep
ps -ef | grep ping 查找某个特定的进程
nohup 后台运行指令
nohup ping baidu.com 1>/dev/null 2>&1 &
nohup主要是用来在本地登录断开后,服务器里的进程还在运行
1,2分别是标准输出和标准错误输出文件
让ping 命令产生的输出定向到/dev/null里,null相当于一个无底洞文件可以进产生的数据进去就被删除了
2>&1 就是让标准输出错误数据线定向到1文件中
cron-------定时任务
at----------在指定时间执行一个指定任务
下面这个是在20:18定时向a.log.a文件里写入abc
然后通过watch命令,每两秒来查看a.log.a文件里的内容
sleep---------睡眠
六.用户和系统信息获取命令:w、who、last、top、uname、uptime
date +%y------格式化日期输出
date +%Y:%m:%d
uptime------- 打印系统运行时常和平均负载
W ----------可以看某个用户在干什么事情
W + 用户名
who------显示当前登陆系统的用户信息
whoami和who am i
这里要区分whoami和who am i
如下:
提权后whoami打印的是提权后的用户root
who am i 打印的和who是一样的本来的用户
last ---------显示用户最近登陆信息
sudo last -f /var/log/btmp | cut -d " " -f 1 | sort | uniq
btmp和wtmp是数据文件,一个是尝试登陆没有登陆进去的用户信息,一个是登陆进去的用户信息
上面的那一行命令可以分为三部分:
sudo last -f /var/log/btmp
提权后用last命令查看btmp里的用户信息
cut -d " " -f 1
第二部分将last出来的用户信息先按照空格切成数据段
last出来的信息如下:
-f 1选择切断后的第一小段数据,也就是用户名
sort | uniq
这里是将用户名在分类然后在去重
uname-----打印当前系统信息
七.其它重要指令:ssh、scp、wget、ping、sshfs挂载
nohup ping baidu.com 1>/dev/null 2>&1 &
nohup主要是用来在本地登录断开后,服务器里的进程还在运行
1,2分别是标准输出和标准错误输出文件
让ping 命令产生的输出定向到/dev/null里,null相当于一个无底洞文件可以进产生的数据进去就被删除了
2>&1 就是让标准输出错误数据线定向到1文件中
挂载
将远程主机当前文件挂载到本地主机
解挂载
八.管道 | 和>、>>重定向符
这个上面就是将q.in文件里的数据重定向输入给./a.out程序中,再将输出重定向给q.out文件里
下面这种方式可以向q.out这个文件里添加内容,直到输入EOF为止,<<可以座位shell编程向文件里传内容的一种方式
九.对数据提取排序去重等操作指令:sort、cut、uniq、split、tr、xargs、wc、awk、grep等
对文件提取的是cat,再通过管道传给其它数据处理指令
对目录提取的是ls,再通过管道传给其它数据处理指令
标题中的对数据操做的指令除了awk有时可以不通过数据提取指令传入数据外其它的都需要通过数据提取指令再通过管道给它提供数据
上述各个指令参考另一篇文章有详细介绍:对数据的提取处理操作
这里只是做一些归纳:
所有的数据处理指令都是一行一行读取传过来的数据,然后再按照数据处理指令的命令格式处理一行中的数据:
cut -d : -f 1
sort -t : -k 3 -n
awk -F :
如上三个指令都是将读取到的一行数据按分割符:处理为不同的段,$n(n为1- )