重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Linux C编程获取当前时间用time这个函数,time函数会返回一个time_t类型的时间戳(这个time_t类型实际上是一个长整型,定义在time.h头文件中)。time函数的函数原型是这样的:
10年积累的成都网站设计、成都做网站、外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有汕城免费网站建设让你可以放心的选择与我们合作。
time_t time(time_t *tloc);
使用time函数需要包含time.h头文件:
#include time.h
调用time函数的代码是这样的:
time_t t;
t=time((time_t *) 0);
因为time函数参数的作用和返回值一样,只是用于接收时间戳,所以这里调用time函数可以传入一个空指针,表示只用它的返回值,不用指针参数来接收时间戳。
因为time函数只是返回一个时间戳,如果想打印直观的时间信息,可以把刚才的time_t作为参数调用ctime函数,ctime函数会返回一个字符串,ctime函数的调用是这样的:
printf("The time and date is: %s", ctime(t));
t就是刚才调用time函数返回的time_t类型变量。
查看文件时间戳命令:stat awk.txt
File: `awk.txt'
Size: 20 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 380730 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2008-04-26 01:50:44.000000000 +0800
Modify: 2008-04-26 01:48:18.000000000 +0800
Change: 2008-04-26 01:48:18.000000000 +0800
说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态。
1、按照YYYY-YY-DD的格式显示当前日期
2、按照MM/DD/YY的格式显示当前日期
3、计算3天前的日期
4、计算3天后的日期
5、计算1个月前的日期
6、计算1年前的日期
7、获取当前时间
8、获取1小时前的时间
9、获取10分钟前的时间
10、显示系统当前的时间戳,基准是格林尼治天文台1970年1月1日0点0分0秒
11、把某时间戳转换回日期格式
date -d "@1614679748"
2020年 03月 02日 星期六 18:09:08 CST
12、计算任意日期的后N日
13、计算两个日期相差天数
linux 常用命令有:
pwd 命令
使用 pwd 命令找出您所在的当前工作目录(文件夹)的路径。该命令将返回一个绝对(完整)路径,该路径基本上是所有以 / 开头的目录的路径。绝对路径的一个示例是 /home/username。
cd 命令
要浏览 Linux 文件和目录,请使用 cd 命令。根据您所在的当前工作目录,它需要目录的完整路径或名称。假设您位于 /home/username / Documents 中,并且想要转到 Documents 的子目录 Photos。为此,只需键入以下命令:cd Photos。另一种情况是,如果您想切换到一个全新的目录,例如 /home/username / Movies。在这种情况下,您必须输入 cd,然后输入目录的绝对路径:cd /home/username / Movies。有一些快捷方式可帮助您快速导航:cd ..(带有两个点)将一个目录向上移动 cd 直接转到主文件夹 cd-(带连字符)移动到上一个目录附带说明一下,Linux 的 shell 是区分大小写的。因此,您必须准确输入名称的目录。
ls 命令
LS 命令用于查看目录的内容。默认情况下,此命令将显示当前工作目录的内容。如果要查看其他目录的内容,请键入 ls,然后键入目录的路径。例如,输入 LS / 家 / 用户名 / 文档查看的内容的文件。您可以使用 ls 命令使用以下变体:ls -R 还将列出子目录中的所有文件 ls -a 将显示隐藏的文件 ls -al 将列出文件和目录以及详细信息,例如权限,大小,所有者等。
cat 命令
cat(连接的缩写)是 Linux 中最常用的命令之一。它用于在标准输出(sdout)上列出文件的内容。要运行此命令,请键入 cat,然后输入文件名及其扩展名。例如:cat file.txt。以下是使用 cat 命令的其他方法:cat filename 创建一个新文件 cat filename1 filename2 filename3 连接两个文件(1 和 2),并将它们的输出存储在新文件中(3)将文件转换为大写或小写使用,cat filename | tr a-z A-Z output.txt
cp 命令
使用 cp 命令将文件从当前目录复制到另一个目录。例如,命令 cp scenery.jpg/home /username/ Pictures 将在您的 Pictures 目录中创建一个 Scene.jpg 副本(来自当前目录)。
mv 命令
mv 命令的主要用途是移动文件,尽管它也可以用于重命名文件。mv 中的参数类似于 cp 命令。您需要输入 mv,文件名和目标目录。例如:mv file.txt/home /username/ Documents。
mkdir 命令
使用 mkdir 命令创建一个新目录 - 如果键入 mkdir Music,它将创建一个名为 Music 的目录。还有一些额外的 mkdir 命令:要在另一个目录中生成新目录,请使用此 Linux 基本命令 mkdir Music / Newfile 使用 p(父级)选项在两个现有目录之间创建一个目录。例如,mkdir -p Music / 2022 / Newfile 将创建新的 “2022” 文件。
rmdir 命令
如果需要删除目录,请使用 rmdir 命令。但是,rmdir 仅允许您删除空目录。
rm 命令
该 RM 命令用于删除目录以及其中的内容。如果只想删除目录(作为 rmdir 的替代方法),请使用 rm -r。注意:使用此命令时要格外小心,并仔细检查您所在的目录。这将删除所有内容,并且没有撤消操作。
touch 命令
该触摸命令允许您创建通过 Linux 命令行新的空白文件。例如,输入 touch /home/username/Documents/Web.html 在 Documents 目录下创建一个名为 Web 的 HTML 文件。
locate 命令
您可以使用此命令来定位文件,就像 Windows 中的搜索命令一样。此外,将 - i 参数与该命令一起使用将使其不区分大小写,因此即使您不记得其确切名称,也可以搜索文件。要搜索包含两个或多个单词的文件,请使用星号(*)。例如,locate -i school * note 命令将搜索包含单词 “school” 和 “ note” 的任何文件,无论它是大写还是小写。
find 命令
在类似定位命令,使用 查找也搜索文件和目录。区别在于,您可以使用 find 命令在给定目录中查找文件。例如,find /home/-name notes.txt 命令将在主目录及其子目录中搜索名为 notes.txt 的文件。使用查找时的其他变化 是:要查找当前目录中使用的文件,请使用 find . -name notes.txt 要查找目录,请使用 /-type d -name notes. txt13. grep 命令无疑对日常使用很有帮助的另一个基本 Linux 命令是 grep。它使您可以搜索给定文件中的所有文本。为了说明这一点,grep blue notepad.txt 将在记事本文件中搜索单词 blue。包含搜索到的单词的行将被完整显示。
sudo 命令
该命令是 “SuperUser Do” 的缩写,使您能够执行需要管理或超级用户权限的任务。但是,建议不要将此命令用于日常使用,因为如果您做错了一些事情,很容易发生错误。
df 命令
使用 df 命令可获取有关系统磁盘空间使用情况的报告,以百分比和 KB 表示。如果要以兆字节为单位查看报告,请输入 df -m。
du 命令
如果要检查文件或目录占用了多少空间,答案是 du(磁盘使用情况)命令。但是,磁盘使用情况摘要将显示磁盘块号,而不是通常的大小格式。如果要以字节,千字节和兆字节为单位查看它,请在命令行中添加 - h 参数。
head 命令
所述头命令用于查看任何文本文件的第一行。默认情况下,它将显示前十行,但是您可以根据自己的喜好更改此数字。例如,如果只想显示前五行,则键入 head -n 5 filename.ext。
tail 命令
该命令与 head 命令具有相似的功能,但是 tail 命令将显示文本文件的最后十行,而不是显示第一行。例如,tail -n filename.ext。
diff 命令
diff 命令是差异的缩写,diff 命令逐行比较两个文件的内容。分析文件后,它将输出不匹配的行。程序员在需要进行程序更改时经常使用此命令,而不是重写整个源代码。此命令最简单的形式是 diff file1.ext file2.ext
tar 命令
该 tar 命令是最常用的命令归档多个文件到一个压缩包。类似于 zip 格式常见的 Linux 文件格式,压缩是可选的。该命令具有很长的功能列表,非常复杂,例如将新文件添加到现有档案中,列出档案内容,从档案中提取内容等等。查看一些实际示例,以了解有关其他功能的更多信息。
chmod 命令
chmod 是另一个 Linux 命令,用于更改文件和目录的读取,写入和执行权限。由于此命令相当复杂,因此您可以阅读完整的教程以正确执行它。
chown 命令
在 Linux 中,所有文件均归特定用户所有。该 CHOWN 命令使您可以更改或文件的所有权转让给指定的用户名。例如,chown linuxuser2 file.ext 将使 linuxuser2 成为 file.ext 的所有者。
Jobs 命令
jobs 命令将显示所有当前作业及其状态。作业基本上是由 Shell 启动的进程。
kill 命令
如果您的程序无响应,则可以使用 kill 命令手动终止它。它将向运行异常的应用发送特定信号,并指示该应用自行终止。您总共可以使用 64 个信号,但是人们通常只使用两个信号:SIGTERM(15) — 请求程序停止运行,并给它一些时间来保存其所有进度。如果在输入 kill 命令时未指定信号,则将使用此信号。SIGKILL(9) - 强制程序立即停止。未保存的进度将丢失。除了知道信号之外,您还需要知道要杀死的程序的进程标识号(PID)。如果您不知道 PID,只需运行命令 ps ux。在知道您要使用什么信号以及程序的 PID 之后,输入以下语法:kill [signal option] PID.
ping 命令
使用 ping 命令检查与服务器的连接状态。例如,只需输入 ping google.com,该命令将检查您是否能够连接到 Google 并测量响应时间。
wget 命令
Linux 命令行非常有用 - 您甚至可以在 wget 命令的帮助下从 Internet 下载文件。为此,只需键入 wget,然后输入下载链接即可。
uname 命令
该 UNAME 命令,短期对于 Unix 名,将打印您的 Linux 系统,如计算机名称的详细信息,操作系统,内核,等等。
top 命令
作为与 Windows 中的任务管理器等效的终端,top 命令将显示正在运行的进程的列表以及每个进程使用的 CPU 数量。监视系统资源使用情况非常有用,尤其是知道哪个进程由于消耗太多资源而需要终止时。
history 命令
当您使用 Linux 一段时间后,您会很快注意到每天可以运行数百个命令。因此,如果您想查看之前输入的命令,运行历史记录命令特别有用。
man 命令
对某些 Linux 命令的功能感到困惑吗?不用担心,您可以使用 man 命令从 Linux 的外壳程序中轻松地学习如何使用它们。例如,输入 man tail 将显示 tail 命令的手动指令。
echo 命令
此命令用于将一些数据移到文件中。例如,如果要将文本 “Hello,我的名字叫 John” 添加到名为 name.txt 的文件中,则可以键入 echo Hello, my name is John name.txt
zip,unzip 命令
使用 zip 命令将文件压缩到 zip 归档文件中,然后使用 unzip 命令从 zip 归档文件中提取压缩文件。
hostname 命令
如果您想知道主机 / 网络的名称,只需键入 hostname。在末尾添加 - I 将显示您的网络的 IP 地址。
useradd,userdel 命令
[root@localhost ~]# ls -l
总用量 44
-rw------. 1 ---- root ---- root --------1207 1 月14 18:18 anaconda-ks.cfg
权限--引用计数 所有者 -- 所属组--- 大小-- 文件修改时间 文件名
ls [选项] [文件名或目录名]
选项:
-a :显示所有文件
--color=when:支持颜色输出
-d :显示目录信息,而不是目录下的文件
-h :人性化显示﹐按照我们习惯的显示文件大小
-i :显示文件的i节点号
-l:长格式显示
pwd 命令是查询当前所在的目录的绝对路径
选项:
-L (默认值)打印环境变量"$PWD"的值,可能为符号链接。
-P 打印当前工作目录的物理位置。
mkdir 是创建目录的命令
选项:
-Z:设置安全上下文,当使用SELinux时有效;
-m或--mode:建立目录的同时设置目录的权限;
-p或--parents:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
rmdir 是删除空目录的命令
-p: 递归删除目录
touch 是 创建空文件或修改文件的时间戳
[root@localhost ~]# touch [选项] 文件名
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:时间日期 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:参考文件或目录 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:日期时间 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
stat 是查看文件详细信息的命令,而且可以看到文件的这三个时间戳
选项:
-L:支持符号连接;
-f:显示文件系统状态而非文件状态;
-t:以简洁方式输出信息;
cat 命令用来查看文件内容
选项:
-A: 相当于-vET 选项的整合,用于列出所有隐藏符号
-E: 列出每行结尾的回车符$
-n: 显示行号
-T: 把 Tab 键用^I显示出来
-v: 列出特殊字符
more 是分屏显示文件的命令
less 是分行显示文件的命令
用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。
选项:
-e:文件内容显示完毕后,自动退出;
-f:强制显示文件;
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异;
-N:每一行行首显示行号;
-s:将连续多个空行压缩成一行显示;
-S:在单行显示较长的内容,而不换行显示;
-x数字:将TAB字符显示为指定个数的空格字符。
head 是用来显示文件开头的命令
选项:
-c --bytes=[-]NUM 显示前NUM字节;如果NUM前有"-",那么会打印除了文件末尾的NUM字节以外的其他内容。
-n, --lines=[-]NUM 显示前NUM行而不是默认的10行;如果NUM前有"-",那么会打印除了文件末尾的NUM行以外的其他行。
-q, --quiet, --silent 不打印文件名行。
-v, --verbose 总是打印文件名行。
-z, --zero-terminated 行终止符为NUL而不是换行符。
tail 是用来显示文件末尾的命令
选项:
-c, --bytes=NUM 输出文件尾部的NUM(NUM为整数)个字节内容。
-f, --follow[={name|descript}] 显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。
-F 与 “--follow=name --retry” 功能相同。
-n, --line=NUM 输出文件的尾部NUM(NUM位数字)行内容。
--pid=进程号 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令。
-q, --quiet, --silent 当有多个文件参数时,不输出各个文件名。
--retry 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“--follow=name”连用。
-s, --sleep-interal=秒数 与“-f”选项连用,指定监视文件变化时间隔的秒数。
-v, --verbose 当有多个文件参数时,总是输出各个文件名。
ln 是用来为文件创建链接的命令
[root@localhost ~]# ln [选项] 源文件 目标文件
选项:
-s: 建立软链接文件。如果不加“-s”选项,则建立硬链接文件
-f: 强制。如果目标文件已经存在,则删除目标文件后再建立链接文件
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive 覆盖既有文件之前先询问用户
-L, --logical 取消引用作为软链接的目标
-n, --no-dereference 把软链接的目的目录视为一般文件
-P, --physical 直接将硬链接到软链接
-r, --relative 创建相对于链接位置的软链接
-s, --symbolic 对源文件建立软链接
硬链接特征:
源文件和硬链接文件拥有相同的 Inode 和 Block
修改任意一个文件,另一个都改变
删除任意一个文件,另一个都能使用
硬链接标记不清,很难确认硬链接文件位置,不建议使用
硬链接不能链接目录
硬链接不能跨分区
软链接特征:
软链接和源文件拥有不同的 Inode 和 Block
两个文件修改任意一个,另一个都改变
删除软链接,源文件不受影响;删除源文件,软链接不能使用
软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文
件权限
软链接可以链接目录
软链接可以跨分区
软链接特征明显,建议使用软连接
rm 是强大的删除命令,不仅可以删除文件,也可以删除目录
[root@localhost ~]# rm [选项] 文件或目录
选项:
d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
cp 是文件或目录用于复制的命令
[root@localhost ~]# cp [选项] 源文件 目标文件
选项:
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制软链接时,把目标文件或目录也建立为软链接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立软链接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
mv 是用来对文件或目录重新命名,或者将文件移动至其他目录
[root@localhost ~]# mv [选项] 源文件 目标文件
选项:
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“ / ”;
-S后缀:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=目录:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 24772 1 月 14 18:17 install.log
第一列的权限位如果不计算最后的“.”,则共有 10 位。
第 2~4 位代表文件所有者的权限。
chmod 用来变更文件或目录的权限
[root@localhost ~]# chmod [选项] 权限模式 文件名
选项:
-c, --changes:当文件的权限更改时输出操作信息。
--no-preserve-root:不将'/'特殊化处理,默认选项。
--preserve-root:不能在根目录下递归操作。
-f, --silent, --quiet:抑制多数错误消息的输出。
-v, --verbose:无论文件是否更改了权限,一律输出操作信息。
--reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
用户身份
首先,读、写、执行权限对文件和目录的作用是不同的。
目录的可用权限其实只有以下几个。
chown 是修改文件和目录的所有者和所属组的命令
[root@localhost ~]# chown [选项] 所有者:所属组 文件或目录
选项:
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对软链接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——version:显示指令执行过程;
--reference=参考文件或目录:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行
普通用户可以修改所有者是自己的文件的权限
chgrp 是修改文件和目录的所属组的命令
[root@phato ~]# chgrp [选项] 所属组 文件或目录
-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-H如果命令行参数是一个通到目录的软链接,则遍历软链接
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-L:遍历每一个遇到的通到目录的软链接
-P:不遍历任何符号链接(默认)
-v或——verbose:显示指令执行过程;
--reference=参考文件或目录:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
umask 是显示或设置创建文件的权限掩码。我们需要先了解一下新建文件和目录的默认最大权限。
我们在这里按照权限字母来讲解 umask 权限的计算方法。我们就按照默认的 umask 值是 022来分别计算一下新建文件和目录的默认权限吧。
快照功能:记录当前的硬盘的状态。刚建快照时快照占用内存为0,标记了当前硬盘的存储状态。当虚拟机对快照标记的内容改写时,会将改写的内容存储进快照,与未改写的部分整合得到完整的快照。当快照标记的部分被完全改写,那么快照存储空间完整记录了当时拍摄时的内存状态。
参数形式
第一种:参数用一横的说明后面的参数是字符形式。
第二种:参数用两横的说明后面的参数是单词形式。
第三种:参数前有横的是 System V风格。
第四种:参数前没有横的是 BSD风格。
cat、more、less、head、tail命令的比较:
cat命令可以一次显示整个文件,如果文件比较大,使用不是很方便;
more命令可以让屏幕在显示满一屏幕时暂停,按空格往前翻页,按b往后翻页。
less命令也可以分页显示文件,和more命令的区别就在于: 支持上下键卷动屏幕、查找;不需要在一开始就读取整个文件,打开大文件时比more、vim更快。
head命令用于查看文件的前n行。
tail命令用于查看文件的后n行,加上-f命令,查看在线日志非常方便,可以打印最新增加的日志。
一般模式:
编辑模式:
命令模式:
编码
多行操作(列编辑模式)
插入:ctrl+v进入列编辑模式,上下移动光标选择需要插入的位置,然后输入大写I,输入需要文本,最后按esc键退出,就会发现文本会在选择的多行中插入。
删除:ctrl+v进入列编辑模式,上下移动光标选中需要删除的部分,然后按d,就会删除选中的内容。
①head:显示文件头部内容
②tail:输出文件尾部内容
注意:用vim和vi修改内容会删除源文件并生成新文件,所以tail -f会失效。需要用到
追加和覆盖语句(或),才能被tail -f监视到。
一般用于查看小文件
查看压缩文件中的文本内容
例:
①more:文件内容分屏查看器
②less:分屏显示文件内容,效率比more高
1、简单读取
运行脚本如下
测试结果为:
2、-p 参数,允许在 read 命令行中直接指定一个提示。
运行脚本如下
测试结果为:
echo [选项] [输出内容] (输出内容到控制台)
输出给定文本的sha256加密后的内容
①显示当前时间信息
②显示当前时间年月日
③显示当前时间年月日时分秒
④显示昨天
⑤显示明天时间
⑥显示上个月时间
需要注意的是取下个月的命令存在bug,执行如下命令会得到21-10,但是正常应该得到21-09,需要注意
date -d "2021-08-31 +1 month" +%y-%m
⑦修改系统时间
⑧获取当前时间戳
获取秒时间戳: date +%s
获取毫秒时间戳:$[ (date +%s%N) /1000000]
查看日历
(1)查看当前月的日历
(2)查看2017年的日历
例:
对比gzip/gunzip,zip/unzip可以压缩文件和目录且保留源文件。
①zip:压缩
②unzip:解压缩
只能压缩文件不能压缩目录,不保留原来的文件。
gzip 文件 (只能将文件压缩为*.gz文件)
gunzip 文件.gz (解压缩文件命令)
例: crontab -e
(1)进入crontab编辑界面。会打开vim编辑你的工作。
(2)每隔1分钟,向/root/bailongma.txt文件中添加一个11的数字
*/1 * * * * /bin/echo ”11” /root/bailongma.txt
(3)可以用tail -f 目标文件来实施监控追加的内容
查看日志
可以用tail -f /var/log/cron.log观察
Cron表达式见文章:
ls [选项] [目录或是文件]
cd [参数]
例: cd -P $(dirname $p1) ; pwd 先跳转到文件的所在目录,再打印$p1文件的实际路径
概述
①cp(copy):只能在本机中复制
②scp(secure copy):可以复制文件给远程主机
scp -r test.sh hxr@hadoop102:/root
③rsync(remote sync):功能与scp相同,但是不会改文件属性
rsync -av test.sh test.sh hxr@hadoop102:/root
④nc(netcat):监听端口,可以实现机器之间传输文件。
nc -lk 7777 (-l表示listen,-k表示keep)
强制覆盖不提示的方法:\cp
例:scp -r test.sh hxr@bigdata1:/root
例:rsync -av test.sh hxr@bigdata1:/root
例:
nc -lp 10000 nc_test.txt
nc -w 1 hadoop102 nc_test.txt
远程登录时默认使用的私钥为~/.ssh/id_rsa
生成密钥对
将公钥发送到本机
将密钥发送到需要登录到本机的服务器上
修改密钥的权限
远程登陆
如果有多个节点需要远程登陆,可以在.ssh下创建config并输入
再次登陆
①正向代理:
②反向代理:
所谓“反向代理”就是让远端启动端口,把远端端口数据转发到本地。
HostA 将自己可以访问的 HostB:PortB 暴露给外网服务器 HostC:PortC,在 HostA 上运行:
那么链接 HostC:PortC 就相当于链接 HostB:PortB。
使用时需修改 HostC 的 /etc/ssh/sshd_config 的一条配置如下,不然启动的进程监听的ip地址为127.0.0.1,即只有本机可以访问该端口。
相当于内网穿透,比如 HostA 和 HostB 是同一个内网下的两台可以互相访问的机器,HostC是外网跳板机,HostC不能访问 HostA,但是 HostA 可以访问 HostC。
那么通过在内网 HostA 上运行 ssh -R 告诉 HostC,创建 PortC 端口监听,把该端口所有数据转发给我(HostA),我会再转发给同一个内网下的 HostB:PortB。
同内网下的 HostA/HostB 也可以是同一台机器,换句话说就是 内网 HostA 把自己可以访问的端口暴露给了外网 HostC。
例: 比如在我的内网机192.168.32.244上有一个RabbitMQ的客户端,端口号为15672。现在我希望在外网上访问固定ip的云服务器chenjie.asia的6009端口,通过跳板机192.168.32.243来转发请求到192.168.32.244:15672,从而实现在外网访问内网服务的功能,即内网穿透。
①在192.168.32.244上启动RabbitMQ服务
②将chenjie.asia云服务器的私钥复制到跳板机192.168.32.243的~/.ssh下,并重命名为id_rsa。通过如下命令看是否可以远程登陆到云服务,可以登陆则进行下一步。
③修改chenjie.asia服务器的ssh配置文件 /etc/ssh/sshd_config ,允许其他节点访问
然后重启sshd服务
④在跳板机192.168.32.243启动ssh反向代理
这个进程在关闭session时会停止,可以添加启动参数 -CPfN
例:
以 root 身份执行的程序有了所有特权,这会带来安全风险。Kernel 从 2.2 版本开始,提供了 Capabilities 功能,它把特权划分成不同单元,可以只授权程序所需的权限,而非所有特权。
例如:linux不允许非root账号只用1024以下的端口,使用root启动命令nginx,会导致nginx权限过高太危险。所以用setcap命令
sudo setcap cap_net_bind_service=+eip /bigdata/nginx/sbin/nginx
正确的关机流程为 :sync shutdown reboot halt
(1)sync (功能描述:将数据由内存同步到硬盘中)
(2)halt (功能描述:关闭系统,等同于shutdown -h now 和 poweroff)
(3)reboot (功能描述:就是重启,等同于 shutdown -r now)
(4)shutdown [选项] [时间]
安装
yum install -y telnet-server telnet
ls -i 显示文件的节点号
find -inum 节点号 -delete 删除指定的节点即可删除对应的文件
启动一个服务: systemctl start postfix.service
关闭一个服务: systemctl stop postfix.service
重启一个服务: systemctl restart postfix.service
显示一个服务的状态: systemctl status postfix.service
在开机时启用一个服务: systemctl enable postfix.service
在开机时禁用一个服务: systemctl disable postfix.service
注:在enable的时候会打印出来该启动文件的位置
列出所有已经安装的服务及状态:
systemctl list-units
systemctl list-unit-files
查看服务列表状态:
systemctl list-units --type=service
查看服务是否开机启动: systemctl is-enabled postfix.service
查看已启动的服务列表: systemctl list-unit-files | grep enabled
查看启动失败的服务列表: systemctl --failed
查看服务日志: journalctl -u postfix -n 10 -f
命令类似systemctl,用于操作native service。
添加脚本为服务(需要指定启动级别和优先级): chkconfig --add [脚本]
删除服务: chkconfig --del [脚本]
单独查看某一服务是否开机启动的命令 : chkconfig --list [服务名]
单独开启某一服务的命令 : chkconfig [服务名] on
单独关闭某一服务的命令: chkconfig [服务名] off
查看某一服务的状态: /etc/intd.d/[服务名] status
启用服务就是在当前"runlevel"的配置文件目录 /etc/systemd/system/multi-user.target.wants 里,建立 /usr/lib/systemd/system 里面对应服务配置文件的软链接;禁用服务就是删除此软链接,添加服务就是添加软连接。
su 用户名称 (切换用户,只能获得用户的执行权限,不能获得环境变量)
su - 用户名称 (切换到用户并获得该用户的环境变量及执行权限)
echo $PATH 打印环境变量
设置普通用户具有root权限
修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下 所示:
或者配置成采用sudo命令时,不需要输入密码
修改完毕,现在可以用hxr 帐号登录,然后用命令 sudo ,即可获得root权限进行操作。
以azkaban用户执行引号中的命令
gpasswd -d [username] [groupname] 将用户从组中删除
gpasswd -a [username] [groupname] 将用户加入到组中
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group文件的更新。
0首位表示类型 - 代表文件 d 代表目录 l 链接文档(link file)
三种特殊权限suid、sgid、sticky
例子:
变更文件权限方式一
例:chmod u-x,o+x houge.txt
变更文件权限方式二
例:chmod -R 777 /mnt/ 修改整个文件夹的文件权限
在linux中创建文件或者目录会有一个默认权限的,这个默认权限是由umask决定的(默认为0022)。umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码。一般在/etc/profile 、~/.bashprofile 或者 ~/.profile中设置umask值。
umask计算
如root用户的默认umask为0022(第一个0 代表特殊权限位,这里先不考虑),创建的文件默认权限是644(即默认666掩上umask的022),创建的目录是755(即默认777掩上umask的022)。
对于root用户的umask=022这个来说,777权限二进制码就是(111)(111)(111),022权限二进制码为(000)(010)(010)。
上面就是一个umask的正常计算过程,但是这样实在是太麻烦了。我们使用如下的简单的方法快速计算。
上面的这个方法计算是非常方便的, 为何得到奇数要+1呢?
文件的最大权限是666,都是偶数,你得到奇数,说明你的umask有奇数啊,读为4,写为2,都是偶数,说明你有执行权限的。
就按照上面的umask=023为例,在计算其他用户权限的时候6-3=3 ,6是读写,3是写和执行,其实应该是读写权限减去读权限的得到写权限的,相当于我们多减去了一个执行权限。所以结果加1。
umask修改
如果想单独修改某个文件夹的新建文件的权限,可以使用setfacl命令。
例:递归改变文件所有者和所有组 chown -R hxr:hxr /mnt
例: