我的Linux学习之旅

(160) 2024-04-25 13:01:01

一个多月的时间学习Linux的基础知识,看得是鸟哥的私房菜,看了有两遍吧。现在总结一下平时经常用到的知识。

date:

显示时间,更多的是用来产生一些时间格式的文件夹,如:生成日志的文件夹。

bc:

计算器,quit退出,一般用不到。

ctrl+alt+F1~F6可切换不同的文字界面,一般用于:如果一个界面死掉了,可以再切换另一个界面将其杀死,而不用重启计算机,很方便的。ctrl+alt+F7切换到文字界面。

当指令太长时可用'\'符号来延续到下一行。

shutdown  -r now  立刻重启

shutdown  -h now 立刻关机

shutdown  -h +10 “guan ji le ” 十分钟后关机,并在屏幕上显示guan ji le

shutdown  -h 20:35 到点关机

shutdown  -c 取消已经进行的shutdown指令

ll **  查看**的属性

w:写 ;r:读;x:可执行(只有当文件夹是可执行时才能够进入该文件夹)

r=4

w=2

x=1

一个文件的权限针对“三个人”而言:文件拥有者的权限(u)、文件所属的群组中他人的权限(g)、外人的权限(o)。

chgrp aa user 把当前user的群组的名称改为了aa

chown bb user 把当前user的拥有者的名称改为了bb

chown aa:bb user  把当前user的群组的名称改为了aa,拥有者的名称改为了bb

chmod 777 file 改变了file的权限为可读、可写、可执行

chmod -R 777 mulu 改变mulu文件夹下面所有文件的权限(chgrp、chown也可以有-R)

chmod r=rwx,g=rwx,o=rwx temp

chmod a+w temp

chmod a-x temp

当一个设置了SUID位的可执行文件被执行时,该文件将以所有者的身份运行,与就是说无论谁来执行这个文件,他都有文件所有者的特权,如果所有者的身份是root的话,那么执行人就有超级用户的身份。

SUID=4,SGID=2

chmod 4777 a.txt    权限变为 rwsrwsrwx

chmod 6751 a.txt    权限变为 rwsrwS--x  (当设置了x位时,就用小s;没有设置x位时,就用大S)


路径:cd - 回到上一目录(很好用)

cd .. 回到上一层目录

cd ~回到用户根目录

pwd 显示当前工作目录

mkdir aa 建立一个名称为aa的文件夹

删除一切东西用: rm -rf bb 强制删除(超好用)

ls 列出当前目录下的东西

ls -a 隐藏的东东也会列出

ll 列出属性

cp 复制文件

cp -r 复制目录

cp -u 只在文件有所改变后才会进行复制。(用于备份文件,只有在不同时,才会进行备份)

scp 为远程复制

scp /home/aa.txt root@10.52.210.10:/home 传出文件

scp root@10.52.210.10:/home/bb.txt /home 传入文件

mv 移动文件

mv -r 移动目录

mv -u 只在文件有所改变后才会进行移动。

查看文件:

cat aa.txt

cat -n 显示行号

more less

head -n 10 aa 只显示aa文件的前十行

tail -n 10 aa 只显示aa文件的后十行

tail -f aa 动态显示aa后十行(经常用)

nl 显示行号

ln -s aa bb 类似与bb为aa的快捷方式(符号链接改变bb,那么aa也会改变。删除aa,那么bb则无效)

umask 用于指定当前用户所建文件和目录的默认属性

umask 0000 表示改变其默认属性为777“三个人”都是可读、可写、可执行(但是下次开机后就回复原来默认的)

(若想永远的改变umask的值,应在/root/.bashrc文件中加入 umask 0000 然后保存,再执行. .bashrc 即可)

文件或目录的查找

which

whereis

locate

find

硬盘与硬件管理

df -h 查看硬盘的总容量、已用容量、系统分区

ifconfig 查看ip

ifconfig eth0 192.168.120.23 netmask 255.255.255.255 broadcast 8.8.8.8  配置IP地址

du -sh 目录名 只显示该目录总的大小

wc -l 统计行数

wc -c 统计字节数

wc -w 统计字数

ssh root@10.52.210.10 登录远程计算机

md5sum 产生文件指纹,可以对比两个文件是否相同。也可以查看某一软件是否为正版

tab 补全

alias ll=‘ls -a -l’ 命名别名

echo $? 可以判断上一条指令是否正确,为0,则正确。为1,则有错误

shell脚本

变量的规则:

1)=链接的左右不能有空格

2)变量只能为字母、数字,并以字母开头

3)应用变量要加$

4)若有空格应用“ ” 或‘ ’。二者的区别:“ "会保留变量的特性;而‘ ’值是输出其中的字符

name=vbird

my="$name its me"

my2='$name its me'

my3="${name}itsme"  和变量相连要用{ }区分出来

echo $my     (结果为vbirdits me)

echo $my2   (结果为$name its me)

echo $my3   (结果为nameitsme)

5)export a 则变量a可以在其他子程序中使用

6)unset a 取消变量

vi编辑器中的指令

一般模式下:

0 零 光标移动到本行的行首

$ 光标移动到本行的行尾

G 光标移动到该文件的最后一行

nG 光标移动到第n行

gg 光标移动到该文件的第一行

n<enter> 光标向下移动n行

n<空格> 光标向后移动n个

dd 删除光标所在行

yy 复制光标所在行

p 粘贴到光标的下一行

U 恢复上一步

ctrl + r 与U是相反的操作

. 重复前一个操作

编辑模式:

i 光标所在字符前插入

a光标所在字符后插入

o 光标的下一行插入

命令行模式:

:set nu 显示行号

:wq 保存退出 :q! 强制退出

/ab 在该文件中查找ab (n为查找下一个,N为查找上一个)

个人设定:

在root中,或cd ~中,总之是在当前用户的根目录下中的.bashrc文件中可以设定,如:命名别名、路径定义、umask的设定,保存之后要执行source .bashrc 才能生效。

ctrl+H 显示隐藏的东东

连续的指令 && 和 ||

command1, command2 全部执行两条指令

command1 && command2  只有当command1执行正确后才执行command2

command1 || command2  只有当command1执行错误后才执行command2

ctrl + C 中止

ctrl + D 结束输入

ctrl + Z 暂停当前指令

>a.txt 覆盖到a中

>>a.txt 累加到a的后面

tee a.txt 输入到a.txt中,并且在屏幕上显示,后面还可以再接其他的管线命令。

管线命令:

cut -d ":" -f 2 (以:为分割副,只显示出第2区块)

cut -c 1-20     (之显示出1到20个字符)


sort 以行为单位,比较首字符,默认按升序排序。

sort -r 绛序

sort -n 按数字大小进行排序

sort  -n -r -t ":" -k 2 按:进行分块后的第二块按数字进行绛排序


grep -c ljg  输出含有ljg行的总数

grep -v ljg 输出不含有ljg的行

grep 'tea' /home/name1 /home/name2  可以在多个文件中列出

pgrep cmd 专门用于进程查询,只输出该指令的PID



uniq 重复的行只显示一个

uniq -d 只显示重复的行

tr -d ab 删除文件中的所有字符a,和字符b。而不是只删除ab字符串

tr '[a-z]' '[A-Z]' 将所有的小写字母转换为大写字母

tr 'ljg' 'tsh' 意味着把说有的l换为t,j换为s,g换为h。(注意:不是只把ljg换为tsh)

解压缩指令:

unzip name (用于*.zip)

uncompress name (用于*.z)

bzip2 -d name (用于*.bz2)

gzip -d name (用于*.gz)

tar中 -x是解压,-c是压缩,-z是后缀中有.gz

tar -zxvf name (用于*.tar.gz)

tar -xvf name (用于*.tar)

tar -cxvf name 压缩文件 


可执行文件的属性中一定有x属性。./test.sh


declare声明变量

-a 数组

-f 函数

-i 整型

read name 从键盘上读取内容

echo $name 输出

./test.sh a b c d 其中文件名为$0, 参数a为$1, b为$2

if的使用:

if [ "$y" = "y" ] || [ "$y" = "Y" ];  (注意:[和“ ,”和]之间都要有空格)

then

......

fi

for循环

declare -i s

for (( i=i; i<=100; i=i+1))   (注意:这是有两个())

do

s=s+i

done

另一种for循环

LIST="tomy jony mary geoge"

for i in $LIST

do

echo $i

done

while循环

declare -i i

declare -i s

while [ "$i" != "101“ ]

do

s=s+1

i=i+1

done



sh -n test.sh 查看脚本的语法,若有错误则列出。

帐号管理:

/etc/passwd  用户帐号      /etc/shadow 密码      /etc/group  群帐号      /etc/gshadow  群密码

groups 显示出该帐号都存在与哪些组当中

groupadd -g 55 testing  建立一个GID为55的群组

groupdel testing 删除群组 (若有用户,则必须先删除用户)

新加一用户:

1)useradd -m ljg 建立一个用户,名称为ljg (-m 为生成根目录,不然则进不到ljg中)

2)passwd ljg  设置密码

userdel ljg 删除(只删除passwd和shadow中的东西)

user -r ljg 将用户的一切数据都删除

su 转换为root身份

su -

su ljg 切换为ljg身份

su -l ljg

su 进行身份转换时要输入对方的密码,但用sudo不能切换身份,但是可以在对方用话下进行一定的操作

sudo -u ljg shutdown -h now 并且只需要输入自己的密码。

at仅执行一次的使用方法:

1)输入 at 5:30 2014-06-01 回车    (at now +5 minutes,          也可一是hours、days、weeks)

2)进入at>命令模式,输入要执行的命令,shutdown -h now

3)ctrl + D则保存退出。并且退出之后显示该工作的编号如:job 3 at thu may 1 05:30:00 2014

4)atq 查看当前所有的at工作

5)atrm 3 删除上面的at工作。

crontab循环执行的使用方法:

输入crontab -e 进入crontab编译

输入命令的格式为:  分 时 日 月 周   命令     *表示所有数组都适用

如:59 23 1 5 *  mail xiaozhu </home/test/test.txt   表示在每年的5月1日23:59都会把邮件test.txt的内容发送给xiaozhu

如:*/5 * * * * sh /home/test/test.sh  表示每隔5分钟执行一次

但当有多个任务都是每隔5秒执行一次,这样会增加系统在某一时刻的负担,可以这样

1,6,11,16.....51,56 * * * * cmd1

2,7,12,17.....52,57 * * * * cmd2 这样可以解决,其中的......不能省略,必须一个一个的列出

crontab -l 查看所有的crontab流程

crontab -r 删除所有的crontab数据。(若要删除某一条,用crontab -e进入编译中去删除)

* 代表所有可能

,隔开 1,5,9

- 制定范围 2-6

*/n 表示时间间隔频率

crontab -e 是处理用户例行性,即改变的是/usr/bin/crontab的内容

若要是设置“系统的例行性任务”直接vim /etc/crintab,按照已有的例子添加即可。

脚本的逻辑判断:

eq  =

ne !=

lt     <

gt    >

le    <=

ge   >=

a     and

o     or

z     空字符串

n    非空字符串


ps -auxh | grep  xxx    查看进程xxx (会列出用户名、PID、CPU和MEM的使用情况、tty1-6表示为本机登录者 pts/??表示为远程登录者、运行状态、开始运行的日期、运行的时间、指令名称)

ps后的运行状态

R 运行

S 中断

T 停止

D 不可中断

Z 僵死 (且ps后的指令名称中显示<defunct>) ps auxh | grep defunct 可以列出zombie进程

top中的第二行的zombie表示僵尸进程的个数

top动态显示进程的信息,默认每隔5秒刷新一次。

top -d 1 改变刷新时间为1秒一次

top -p 1278 只观察PID为1278

top | grep cmd 只观察指令cmd

who 显示登录时间

w 显示uptime和who的

last 显示近期用户或终端的登录情况

hostname 显示主机名

df -h 查看文件系统大小和使用情况

free -m 显示内存、SWAP的大小和使用情况

fdisk -l

command & 后台运行

time command 侦测一个进程所需要的时间

route -n 显示路由器

netstat -antlp 查看本机各端口的网络连接

diff 和 cmp 比较两个文件的不同之处

dmesg 显示开机信息

用户对话:

write 针对一个在线用户 

wall 针对所有在线用户

mail 可以实现离线传输

杀死进程:

kill %工作号

kill PID

pkill -9 cmd (指令的名称可以只输入一部分)

pkill -u 用户名  可以杀死用户  (当userdel -r ljg,显示用户ljg目前已登录。可以用pkill -u来解决)

killall -9 cmd

xkill 用于关闭图像界面(当一软件死后,不能关闭窗口,可以这样做)

pstree 列出所有进程的关联,可以找出父进程

(若杀死不了一zombie进程,可以用pstree查找出其父进程,来杀其父进程)

所有的进程都存在于/proc中,以PID号为目录名。







THE END

发表回复