shell操作的快捷键
- 遍历历史记录相关:history 上==ctrl+P (↑) 下==ctrl + N(↓)
- ctrl + D删除j ctrl+H删除d 光标向右移动ctrl + F 光标向左移动ctrl+B 移动到头部 ctrl +A 移动到尾部 ctrl + E 删除光标前的字符串ctrl +U 删除光标后的字符串ctrl + K
- 命令自动补全 TAB键 两下TAB键 列出所有情况
- ctrl+C 强制停止进程
- ctrl + L清屏
- df -h 查看磁盘占用空间情况
- which ls //查看ls命令所在目录
history
history //显示所有历史指令
history 10 //显示最近执行过的10个指令
! 100 //执行编号为100的历史指令
LINUX的目录结构
/bin: binary,二进制文件,可执行程序,shell命令
/dev:device,在LINUX下皆文件
/lib:LINUX运行的时候需要加载的动态库
/mnt:手动的挂载目录
/media:外设的自动挂载目录(linux系统会自动识别一些设备,例如U盘,光驱等,当识别后,linux会自动把识别的设备挂载到这个目录下)
/root:LINUX的超级用户的家目录
/usr:unix system resource (安装的应用程序【/usr/local】)
/etc:存放配置文件
/etc/passwd
用户的配置文件,记录用户的各种信息
用户名:密码:用户id:组id::家目录:shell目录
/etc/group
组的配置文件,记录LINUX包含的组的信息
/opt:安装第三方用户程序自定义路径
/home:LINUX操作系统所有用户的家目录
/tmp:存放临时文件(重启电脑时会自动清空)
:$表示当前用户为普通用户
:#表示当前用户为超级用户
远程登录LINUX:xshell(LINUX服务器ssnd进程开启,xshell才能够进行远程连接)
上传和下载文件:xftp
用户管理
创建新用户
useradd newuser //当创建用户成功后,会自动创建和用户同名的家目录
useradd -d /home/newuser newuser //在/home/user目录下创建名为newuser的用户,默认在newuser的分组
passwd newuser //为newuser指定密码
删除用户
- 删除用户,但是保留家目录
userdel 用户名
- 删除用户,不保留家目录
userdel -r 用户名
查看用户信息
可以查看用户id,组id,用户所在组
id 用户名
whoami //查看当前用户
用户切换
su - 用户名 //切换到用户名指定的用户
exit //返回到原来的用户
从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
用户组相关操作
groupadd 组名 //添加组
groupdel 组名 //删除组
useradd -g 组名 用户名 //添加用户时指定组
usermod -g 组名 用户名 //修改用户所属组
常用运行级别是3和5,要修改默认的运行级别可改文件
/etc/inittab的id:5:initdefault这一行中的数字
init 5 //切换运行级别为5
init 3 //切换运行级别为3
init 0 //关机
init 6 //重启
找回root密码
进入单用户模式
常用命令
tree(需要安装sudo apt-get install tree)
- tree 查看当前目录
- tree dir 查看指定目录
cd
cd //切换到当前用户的家目录
cd ~ //切换到当前用户的家目录
mkdir
mkdir -p 路径 //直接创建多级路径
ls
- 功能:查看文件或目录
- 参数:-a 显示所有文件 (隐藏文件:文件或目录前有一个点,例.a)
- 参数:-l 显示文件详细信息 -lh 以人性化方式进行显示
- list -l 等价于 ll
- 第一个字符:文件的类型(7种:普通文件 :-、目录:d、符号链接:l(是L)、管道:p、套接字:s、字符设备:c【键盘、鼠标】、块设备:b【U盘,硬盘】)
- 1 :如果是文件,表示硬链接计数;如果是目录,表示目录下子目录个数
- 3231145:如果是目录,大小永远是4K,不包含内容
mkdir
-p:一次创建多级目录
rm
-r:删除多级目录
-i:删除时进行提示
cp
cp file1 file(不存在)
- 创建file,将file1中内容拷贝到file
cp file1 file(存在)
- file1覆盖file
cp file dir(存在)
- 拷贝file到dir目录
cp dir(存在) dir1(存在) -r
- 将dir目录拷贝到dir1目录中
cp dir(存在) dir1(不存在)
- 创建dir1,将dir内容拷贝到dir1中,不包括dir本身
mv
mv file1 file2
- 改名
- mv file(存在) file1(不存在) --file为文件 将file命名为file1
- mv dir(存在) dir1(不存在) --dir为目录 将dir命名为dir1
- 移动
- mv file dir(存在目录) file->dir
- mv dir(存在目录) dir1(存在目录) dir->dir1
- mv file(存在) file2(存在) file覆盖file2,同时file被删除
>和>>
>输出重定向 >>追加
ls -l >a.txt //列表的内容写入文件a.txt中(覆盖写),如果a.txt不存在,则创建该文件
ls -al >>文件 //列表的内容追加到a.txt中
cat 文件1 > 文件2 //将文件1的内容覆盖到文件2
echo "内容" >文件 //将内容覆盖写到文件中
echo
echo输出内容到控制台
head
head用于显示文件的开头部分内容,默认显示文件的前10行内容
head -5 文件名 //查看文件前5行内容
tail
tail 文件名 //查看文件后10行内容
tail -5 文件名 //查看文件后5行内容
tail -f 文件名 //实时追踪文档的所有更新
查看文件内容相关命令
cat 文件名(适用于文件比较小的情况)
cat -n 文件名 //添加-n参数显示行号
cat -n 文件名 | more //文件过长时,利用管道进行重定向输出,cat通常与more结合使用
more 文件名(enter 向下浏览一行 空格键 向下翻页 Ctrl+B向上滚动一屏 Ctrl+F向下滚动一屏 Q 退出)
less 文件名 (enter /ctrl+n 向下浏览一行 ctrl+p 向上浏览一行 空格/pagedown 向下翻页 pageup 向上翻页 Q 退出)
软硬链接
- 软连接 (符号链接)--相当于快捷方式 软链接大小为文件路径名大小
- ln -s 文件名(使用绝对路径) 快捷方式的名字 使用绝对路径创建的文件的软链接移动到任何位置都有效
- 硬链接 硬链接文件虽然和源文件大小一样,但是其实并不占用磁盘空间
- ln 文件名 硬链接的名字
时间日期类指令
//参数中必须有"+"
date //显示当前时间
date "+%Y" //显示当前年份
date "+%m" //显示当前月份
date "+%d" //显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S" //显示当前时间
//设置时间
date -s "2020-10-10 10:10:10"
修改文件权限
chmod u/g/o/a +/-/= r/w/x/- 文件名
- 修改文件所属者 chown 新的文件所属者 文件名
- 修改文件所属组 chgrp 新的文件组 文件名
- 修改文件所属者和所属组 chown 新的文件所属者:新的文件所属组 文件名
文件查找和检索
locate
locate指令可以快速定位文件路径,基于数据库进行定位,第一次运行前,使用updatedb指令创建locate数据库
updatedb
locate 文件名
根据文件属性查找 - find
find 目录名 对应属性 对应参数
- 文件名 find 查找的目录 -name "查找的文件名"(推荐加引号)
- 文件所属者 find 查找的目录 -user 用户名 //查找某个目录中属于某个用户的文件
- 文件类型 find 查找目录 -type 文件类型 (普通文件:f、目录:d、符号链接:l、管道:p、套接字:s、字符设备:c、块设备:b)
- 文件大小 find 查找目录 -size +/- 10k/M(对于单位 k必须小写,M必须大写)
- find . -size +4k -size -10k (查找大于4k,小于10k的文件)
- 按日期
- 创建日期:find 目录名 -ctime -n/+n
- -n n天以内
- +n n天以外
- 修改日期: find 目录名 -mtime-n/+n
- 访问日期: find 目录名 -atime -n/+n
- 深度 find 目录名
- find 目录名 -maxdepth n(层数)
- 搜索n层以下的目录
- find 目录名 -mindepth n(层数)
- 搜索n层以上的目录
- 高级查找
- 例:查找指定目录,并列出该目录中文件详细信息
- find ./ -type -d | xargs ls -l
根据文件内容查找 - grep
- grep -r "查找的内容" 搜索的路径 -n(显示内容所在行数,也可以不加)
压缩包
- LINUX下常见压缩格式: .gz(用gzip进行压缩) .bz2(用bzip2进行压缩)
- 常用压缩命令
- tar -打包文件工具
- 参数: c -创建压缩文件
- x -释放压缩文件
- v -打印提示信息
- f -指定压缩包的名字
- z -使用gzip压缩文件
- j -使用bzip2的方式压缩文件
- 压缩: tar 参数(zcvf / jcvf) 压缩包名(需要指定后缀.tar.gz) file dir
- 解压缩 tar 参数(zxvf / jxvf) 压缩包名(需要指定后缀.tar.gz) -C(必须大写) 解压路径
- rar
- rar需要安装 sudo apt-get install rar
- 压缩
- rar a 压缩包名(不用指定后缀) 压缩内容(如果是压缩目录,需要加参数-r)
- 解压缩
- rar x 压缩包名(不用指定后缀) 解压目录
- zip
- 压缩: zip 压缩包名 文件、目录 (如果有目录,加参数-r)
- 解压缩 : unzip 压缩包名 -d 解压目录
补充:
删除test目录下所有内容,保留test目录
rm test/* -r
组管理和权限管理
//改变文件所属者
chown 用户名 文件名
chown -R 用户名 目录名/ //将某目录下的所有文件及子目录所有者改为某用户
//改变用户所属组
usermod -g 组名 用户名
usermod -d 目录名 用户名 //改变用户登录的初始目录
任务调度
系统在某个时间执行特定的命令或程序
- 如果只是简单的任务,可以不用写脚本,直接在crontab中加入任务即可
- 对于比较复杂的任务,需要写脚本(shell编程)
案例
要求:
设置任务调度文件:/etc/crontab
设置个人任务调度,执行crontab -e 命令
输入任务到调度文件
*/1**** ls -l /etc/ > /tmp/to.txt
第一个* :一小时中的第几分钟
第二个* :一天当中的第几小时
第三个* :一个月中的第几天
第四个* :一年当中的第几月
第五个* :一周当中的星期几
案例1
每隔一分钟,就将当前的日期信息,追加到/tmp/mydate中
- 先编写一个文件 /home/mytask1.sh,内容为 date>>/tmp/mydate
- 给mytask1.sh一个可执行权限
- crontab -e
- */1**** /home/mytask1.sh
案例2
每隔一分钟,就把当前日期和日历都追加到/home/mycal中
- 先编写一个文件 /home/mytask1.sh,内容为
date >> /tmp/mycal
cal >> /tmp/mycal
- 给mytask1.sh一个可执行权限
- crontab -e
- */1**** /home/mytask1.sh
案例3
每天凌晨2:00将mysql数据库testdb,备份到文件mydb.bak中
- 先编写一个文件 /home/mytask1.sh,内容为
testdb > /tmp/mydb.bak
- 给mytask1.sh一个可执行权限
- crontab -e
- 0 2**** /home/mytask1.sh
crond
crond -r //终止任务调度
crontab -l //列出当前运行的任务调度
service crond restart //重启任务调度
磁盘分区
查询磁盘使用情况
df -lh
查询指定目录的磁盘占用情况
du -h /目录 //查询指定目录的磁盘占用情况
-s //指定目录大小汇总
-h //带计量单位
-a //含文件
--max_depth=1 //子目录深度
-c //列出明细的同时,增加汇总值
案例:
- 统计/home文件夹下文件的个数
ls -l /home | grep "^-" | wc -l
- 统计/home文件夹下目录的个数
ls -l /home | grep "^d" | wc -l
- 统计/home文件夹下文件的个数,包括子文件夹里的
ls -lR /home | grep "^-" | wc -l //R必须大写
- 统计/home文件夹下目录的个数,包括子文件夹里的
ls -lR /home | grep "^d" | wc -l
u盘挂载
查看u盘信息
fdisk -l
挂载u盘到某一目录
mount /dev/sdb1 mnt //将设备/dev/sdb1挂载到mnt目录
卸载目录
sudo umount /mnt //卸载mnt目录下的设备
注意:当u盘不挂载到mnt目录,而挂载到别的目录时,会暂时覆盖别的目录的内容,卸载u盘后目录内容恢复正常。