Menu

7/25/20

JSON



Json là gi?

Json là 1 kiểu dữ liệu tuân theo quy chuẩn nhất định, các ngôn ngữ lập trình đều có thể đọc được.
Dùng để truyền, nhận dữ liệu giữa server và client.

- cấu trúc của JSON (kiểu dữ liệu json):

+đặt trong dấu ngoặc nhọn
+gồm các cặp key-value, trong đó:
-key: luôn là chuỗi.
-value: chuỗi, số, mảng, một json khác, kiểu boolean (true,false), hoặc null.
+json object được lưu trữ trong file. json

Cùng khảo sát 2 kiểu lưu trữ là JSON và XML, ta thấy kiểu JSON gọn nhẹ hơn.Ngoài ra, trong JSON có kiểu lưu trữ dữ liệu mảng (array) mà XML lại không có

 JSON style:

{"students":[
   {"name":"John", "age":"23", "city":"Agra"},
   {"name":"Steve", "age":"28", "city":"Delhi"},
   {"name":"Peter", "age":"32", "city":"Chennai"},
   {"name":"Chaitanya", "age":"28", "city":"Bangalore"}
]}

XML style:

<students>
  <student>
    <name>John</name> <age>23</age> <city>Agra</city>
  </student>
  <student>
    <name>Steve</name> <age>28</age> <city>Delhi</city>
  </student>
  <student>
    <name>Peter</name> <age>32</age> <city>Chennai</city>
  </student>
  <student>
    <name>Chaitanya</name> <age>28</age> <city>Bangalore</city>
  </student>
</students>

-Các đặc tính của JSON
  • It is light-weight -gọn nhẹ
  • It is language independent-ngôn ngữ độc lập
  • Easy to read and write- dễ đọc và viết
  • Text based, human readable data exchange format - thân thiện
-Dạng JSON phổ biến

var chaitanya = {
  "name" : "Chaitanya Singh",
  "age" : "28",
  "website" : "beginnersbook"
};

-Dạng JSON là 1 phần tử của mảng, mỗi phần tử đặt trong dấu ngoặc nhọn, cách nhau bới dấu phẩy:

var students = [{
   "name" : "Steve",
   "age" :  "29",
   "gender" : "male"

},
{
   "name" : "Peter",
   "age" : "32",
   "gender" : "male"

},
{
   "name" : "Sophie",
   "age" : "27",
   "gender" : "female"
}];

-
-Dạng value của 1 JSON là 1 JSON khác:

var students = {
  "steve" : {
  "name" : "Steve",
  "age" :  "29",
  "gender" : "male"
},

"pete" : {
  "name" : "Peter",
  "age" : "32",
  "gender" : "male"
},

"sop" : {
  "name" : "Sophie",
  "age" : "27",
  "gender" : "female"
}
}

Khi nhận dữ liệu kiểu JSON từ server,

'{ "name":"John", "age":30, "city":"New York"}'

chuyển đổi JSON object thành javascript object:

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');

Chuyển đổi từ Javascript object sang json object:

var jsontext=JSON.stringify(myJavaScriptOject);

Sự khác biệt giữa Json object và Javascript object:

+  Javascript object có thể bao gồm 1 function().
+  Json có thể truy xuất bởi bất kỳ ngôn ngữ nào, javascript object chỉ có thể sử dụng trong các chương trình javascript.

Các ví dụ:

VD0: biến a thuộc kiểu json, có 2 pt là x, và y, ptx có giá trị là 1, pty có giá trị là 2.

<script>
  var a ={"x":1, "y":2};
  alert(a.x);
</script>

VD1: truy xuất giá trị name của ptx

var c ={ "x":[
      {"id":1 ,"name":"NAME1"},
      {"id":2 ,"name":"NAME2"},
      {"id":3 ,"name":"NAME3"}
     ],
     "y":2
     };

 alert(c.x[1].name);

==>kết quả: NAME2

VD2: encode mảng thành kiểu dữ liệu json, dùng hàm 
json_encode()
<?php $marks = array("Peter"=>65, "Harry"=>80, "John"=>78, "Clark"=>90); echo json_encode($marks); ?>
==> kết quả: {"Peter":65,"Harry":80,"John":78,"Clark":90}

VD3: decode json thành mảng:
<?php // Store JSON data in a PHP variable $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; var_dump(json_decode($json, true)); ?>
==>kết quả: 

E:\wamp64\www\demo\222\demo.php:5:
array (size=4)
  'Peter' => int 65
  'Harry' => int 80
  'John' => int 78
  'Clark' => int 90




Phím tắt VS code

Hướng dẫn 1 vài phím tắt nhanh tiện lợi khi làm việc với Visual studio code.

-Xem danh sách phím tắt mặc định trong VS code: CTRL+K+S.
-Xem lượt sử phím tắt đã dùng gần đây: Ctrl+Shift+P

1. để mở nhanh 1 file html trong trình duyệt web các bạn cài thêm extension (open in browser 2.0)

2. để định dạng đoạn code ngay thẳng các bạn bôi đen sau đó nhấn tổ hợp phím (shift+ alt + f )

3. để chuyển nhanh giữa các tab trong Visual studio code các bạn nhấn tổ hợp phím (ctrl + tab)

4. Chúng ta có thể dành nhiều không gian cho cửa sổ đang code bằng cách ẩn/ hiện thanh Activity bar, các bạn nhấn tổ hợp phím (Ctrl + B)

5. để chèn nhanh 1 đoạn code giống dòng phía trên các bạn nhấn tổ hợp phím (shift + alt + mũi tên xuống)

6. để thay đổi vị trí 1 đoạn code các bạn bôi đen sau đó nhấn tổ hợp phím (alt + mũi tên lên hoặc alt+ mũi tên xuống)

7. để search nhanh 1 chuỗi hay đoạn code các bạn chọn kính lúp trên nhanh Activity Bar ( hoặc nhấn tổ hợp phím Ctrl + shift + f )

8. Bôi đen từ vị trí chuột 1 dòng hay đoạn văn bản ( tổ hợp phím ctrl + shift + mũi tên lên hoặc xuống)

9. để đi đến 1 dòng code xác định, gõ Ctrl+ g: điều số cần đi đến.

10. cài nhanh extenstion hỗ trợ bootstrap: Ctrl+ shift+X: gõ "bootstrap 3 snippet"
Chèn nhanh CDN bootstrap: gõ bs3-cdn và nhấn phím tab
Chèn nhanh modal bootstrap: gõ bs3-modal và nhấn phím tab

11. Hướng dẫn tạo snippet (chế độ gõ nhanh 1 cụm lệnh đã định nghĩa)

B1: xác định đoạn code và từ khóa cần snippet:

-ví dụ mình gõ tắt ajax với desciption là gõ nhanh ajax.

-đoạn mã cần snippet là:

$.ajax(
{
url:'vd2.php' ,
type: 'POST',
data: 't='+v,
success: function(s)
{
$('#kq3').html(s);
}
}
);
B2: Truy cập vào trang tạo nhanh snippet cho vs code:

https://snippet-generator.app

sau đó paste đoạn code cần tạo ở bước 1 vào, lúc này web sẽ tạo ra (generate) cho ta mã dùng cho VS code như sau:


"": {
  "prefix": "",
  "body": [
    "$.ajax(",
    "    {",
    "     url:'vd2.php' ,",
    "     type: 'POST',",
    "     data: 't='+v,",
    "     success: function(s)",
    "     {",
    "      $('#kq3').html(s);",
    "     }",
    "    }",
    "   );"
  ],
  "description": ""
}

-Chúng ta cần quan tâm đến 2 chỗ là:

+prefix: hãy điền tên cần snippet: "ajax" chẳng hạn.

+description: mô tả đoạn khi các bạn gõ tắt: "gõ tắt ajax"

B3: sau khi xong bước ta có đoạn code sau:

"": {
  "prefix": "ajax",
  "body": [
    "$.ajax(",
    "    {",
    "     url:'vd2.php' ,",
    "     type: 'POST',",
    "     data: 't='+v,",
    "     success: function(s)",
    "     {",
    "      $('#kq3').html(s);",
    "     }",
    "    }",
    "   );"
  ],
  "description": "go tat ajax"
}

B4: trong vs code các bạn nhấn tổ hợp phím CTRL+SHIFT+P


rồi gõ vào: configure user snippets, sau đó chọn "new global snippet file",

điền đoạn code ở bước 3 vào trong cặp {}, rồi save lại:

B5, kiểm tra lại kết quả:



10/2/19

Phân quyền file/folder trong linux






Ta cần quan tâm đến 2 lệnh chmod và chown

-chmod: dùng phân duyền truy cập cho file và thư mục
-chown: chuyển quyền sở hữu file và thư mục.

Nếu các bạn không biết sử dụng như thế nào, ta hãy kham khảo lệnh help nhé, kết quả:

[alex@localhost Desktop]$ chmod --help
Usage: chmod [OPTION]... MODE[,MODE]... FILE...
  or:  chmod [OPTION]... OCTAL-MODE FILE...
  or:  chmod [OPTION]... --reference=RFILE FILE...
Change the mode of each FILE to MODE.
With --reference, change the mode of each FILE to that of RFILE.

  -c, --changes          like verbose but report only when a change is made
  -f, --silent, --quiet  suppress most error messages
  -v, --verbose          output a diagnostic for every file processed
      --no-preserve-root  do not treat '/' specially (the default)
      --preserve-root    fail to operate recursively on '/'
      --reference=RFILE  use RFILE's mode instead of MODE values
  -R, --recursive        change files and directories recursively
      --help     display this help and exit
      --version  output version information and exit

tạm hiểu như sau:

-c: khi phân quyền có sự thay đổi thì mới thông báo
-f: làm trong im lặng, bỏ qua thông báo lỗi.
-v:báo cáo chi tiết từng file khi thực thi.
-R: lệnh này quan trọng, dùng đệ quy cho thư mục (tức là áp dụng cho toàn bộ file/folder chon trong thư mục cha.




Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+'.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>

For complete documentation, run: info coreutils 'chmod invocation'


Có 3 loại người tương tác với file/folder trong OS linux,

owner: người chủ sở hữu tạo ra file/folder đó.
group: tất cả người dùng thuộc cùng 1 group
other: những người dùng khác, không cùng group hoặc owner

-quyền truy cập file và thư mục tương tứng với các con số, và chữ cái sau

+read : 4 -r
+write: 2 -w
+execute : 1 -e

-các ví dụ sau phân quyền cho file, nếu là thư mục directory sẽ có chữ "d" đầu tiên từ trái qua phải.

-rw- - : tương ứng số 600: chủ sở hữu có quyền đọc/ghi
-rw-r-r-: tương ứng số 644: chủ sở hữu có quyền đọc/ghi, group và other chỉ có quyền read.
-rwxrwxrwx: tương ứng với số 777 full quyền read/write/execute cho owner/group/other


+Lệnh chmod: phân quyền cho file/ thư mục


vd1: chỉ cho phép chủ sở hữu có quyền đọc ghi

[alex@localhost Desktop]$ chmod 600 test.txt 

-kiểm tra lại sau khi phân quyền:

[alex@localhost Desktop]$ ls -l
total 476
-rw-------. 1 alex alex      0 Oct  2 20:16 test.txt

vd2: mình phân full quyền cho folder abc, trong folder abc này có 2 file test và test1. Không quan tâm nó có những gì, ta hãy dùng tùy chọn -R nhé.

[alex@localhost Desktop]$ chmod 777 -R abc

-ta kiểm tra lại:

[alex@localhost abc]$ ls -l
total 4
-rwxrwxrwx. 1 alex alex 14 Aug 28 21:35 test2.txt

-rwxrwxrwx. 1 alex alex  0 Oct  2 20:16 test.txt

+Lệnh chown: thay đổi chủ sở hữu cho file/folder.

Tương tự như lệnh chmod:

vd1: thay đổi quyền sở hữu cho file test.txt có owner là alex, thuộc group root.

[alex@localhost Desktop]$ sudo chown alex:root test.txt

kiểm tra lại,

[alex@localhost Desktop]$ ls -l
total 476
-rw-------. 1 alex root      0 Oct  2 20:16 test.txt


vd2: thay đổi quyền sở hữu cho thư mục abc có owner là alex, thuộc group root., áp dụng đệ quy cho folder:


[alex@localhost Desktop]$ sudo chown alex:root abc

kiểm tra lại,

[alex@localhost Desktop]$ ls -l
total 476
drwxrwxrwx. 2 alex root     39 Oct  2 20:22 abc

















9/19/19

Thao tác ban đầu trên centos


Tìm hiểu hệ điều hành Centos


Hiển thị thông tin ip

-ip add show

Hiển thị trạng thái card

# nmcli -p dev
============================================
Status of devices
============================================
DEVICE TYPE STATE CONNECTION
--------------------------------------------
ens19 ethernet disconnected --
ens18 ethernet connected --
lo loopback unmanaged

Cấu hình ip theo chế độ dhcp

dùng lệnh cd chuyển đến network-scripts vào thay đổi nội dung file ifcfg-eth0

 vi /etc/sysconfig/network-scripts/ifcfg-eth0
nội dung như sau:


DEVICE=eth1
BOOTPROTO=dhcp
TYPE=Ethernet
ONBOOT=yes

Gõ phím “I” để insert, sau khi chỉnh sửa “esc” để thoát ra.
Khi save ta chọn “ :w “ rồi nhấn enter.
-khởi động lại service network 1 lần

systemctl restart network

-gõ lệnh init 6 để khởi động lại Centos

Cấu hình địa chỉ IP tĩnh , chinh sửa nội dung card ens33

HWADDR=00:08:A2:0A:BA:B8
TYPE=Ethernet
BOOTPROTO=none
# Server IP #
IPADDR=192.168.2.203
# Subnet #
PREFIX=24
# Set default gateway IP #
GATEWAY=192.168.2.254
# Set dns servers #
DNS1=192.168.2.254
DNS2=8.8.8.8
DNS3=8.8.4.4
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
# Disable ipv6 #
IPV6INIT=no
NAME=eth0
# This is system specific and can be created using 'uuidgen eth0' command #
UUID=41171a6f-bce1-44de-8a6e-cf5e782f8bd6

DEVICE=ens33

ONBOOT=yes



Hướng dẫn cài đăt GUI cho centos

-cài package vào
[root@centos7 ~]# yum groupinstall "GNOME Desktop" –y

-kiểm tra template mặc định
[root@centos7 ~]# systemctl get-default multi-user.target

-set default-template sau đó kiểm tra lại
[root@centos7 ~]# systemctl set-default graphical.target

-chuyển sang chế độ GUI lập tức
[root@centos7 ~]# systemctl isolate graphical.target

Hướng dẫn cài đặt ibus-unikey

-update hệ thống
#yum -y update

-cài pm ibus-unikey
#yum -y install ibus-gtk ibus-qt

-vào setting toolsàsettingàregion and language
+ add àvietnameseàibus-unikey (vietname-vni)

 



9/16/19

Quản lí user và group


Quản lí user và group trên centos


XEM

-Danh sach user bằng công cụ vim (cat)
[alex@localhost ~]$ vim /etc/passwd
test:x:1001:1001::/home/test:/bin/bash

-user là test
-pass: đã mã hóa là x
-userid là 1001
-group id là 1001
-home directory là /home/test
-shell directory là /bin/bash

-Danh sach group bằng vim |(cat)
[alex@localhost ~]$ vim /etc/group

sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:

-Kiểm tra id user/group

+tìm id user
[alex@localhost ~]$ id -u newuser01
1001

+tìm id group
[alex@localhost ~]$ id -g u11
1006
+xem id của user và group đồng thời
[alex@localhost ~]$ id u11
uid=1001(u11) gid=1006(u11) groups=1006(u11)

-Xem user test thuộc group nao?

[root@localhost Desktop]# groups test
test : Testgroup

+xem lại user01 thuộc primary và secondary group nào?
[root@localhost ~]# groups user01
user01 : u1 g11

TẠO

-Tạo user mới tên là test

[alex@localhost Desktop]$ sudo useradd test

-Xoa user ten u2. tùy chỉnh -r (cho phép xóa luộn thư mục homedir của user.
[root@localhost Desktop]# userdel -r u2

-Thay đổi password cho user test
[alex@localhost Desktop]$ sudo passwd test

-Tạo 1 group tên là Testgroup
[alex@localhost Desktop]$ sudo groupadd Testgroup

-Thêm user01 vào primary group là u1 và secondary group là g11
[root@localhost ~]# usermod -g u1 -G g11 -c "USER 01 COMMENT" user01

THAY ĐỔI VÀ XÓA

+Khóa user u1
# usermod –L u1 #lock user

+Mở khóa user u1
# usermod –U u1 #unlock user

-Chuyển user test vào Testgroup
[root@localhost Desktop]# usermod -g Testgroup test

-Xóa user u11 khỏi group g11
[root@localhost Desktop]# gpasswd -d u11 g11
Removing user u11 from group g11

-Xóa group user01
[root@localhost ~]# groupdel user01


-

Lệnh căn bản linux



vài phím tắt

ctr+u : xóa dòng hiện hành đang gõ lệnh
ctr+a : đưa con trỏ về đầu dòng
ctr+e: đưa con trỏ về cuối dòng

copy và paste trong terminal

ctr+shift+c :copy
ctr+shift+v :dán



Lệnh kiểm tra performance



-giải phóng dung lượng ổ cứng linux

vào software center : xóa pm không cần thiết

-xóa các package không cần thiết

sudo apt-get autoremove

sudo apt-get autoclean

-xem thông tin cpu

linux@kali:~$ cat /proc/cpuinfo

-xem thông tin ram

linux@kali:~$ cat /proc/meminfo

-xem thông tin phiên bản hđh

linux@kali:~$ cat /proc/version

linux@kali:~$ uname -a

-xem ram còn trống?

linux@kali:~$ free -m

-xem ổ cứng chứa os linux còn trống?

linux@kali:~$ df -h

-xem các ổ cứng có trong linux

linux@kali:~$ sudo fdisk -l

-xem dung lượng thư mục hiện tại

linux@kali:~/Desktop/books$ du -sh

-xem theo kiểu đệ quy (cả thư mục con)

linux@kali:~/Desktop/test03$ du -ah

-xem dung lượng cpu, ram, và các process đang chạy (1 cách vắn tắt)

linux@kali:~/Desktop/test03$ top

xóa pm skype với dpkg


apt-get –-purge remove skypeforlinux



Lệnh hệ thống


xem địa chỉ IP

ip add show

thoát khỏi cửa sổ dòng lệnh.

exit

 -log off khỏi linux-OS

Grome-session-quit

-tắt máy

init 0

-khởi động lại máy

init 6

-khởi động lại máy

reboot

 -xem tên máy tính

hostname

 -xóa trắng terminal

clear

- xem lịch hệ thống

cal

 -xem ngày hệ thống

date

Lệnh xử lý tập tin



 LIỆT KÊ


-liệt kê thư mục hiện tại
linux@kali:~$ ls

--liệt kê thư mục hiện tại (bao gồm cả định dạng và file ẩn)

linux@kali:~$ ls -al                

CHUYỂN DIRECTORY

-chuyển từ thư mục hiện tại sang desktop

linux@kali:~$ cd Desktop

-chuyển từ thư mục hiện tại sang thư mục riêng

linux@kali:~/Desktop/test03$ cd

-back lại 1 thư mục trước đó

linux@kali:~/Desktop/test03$ cd ..

-xem hiện tại đang ở thư mục nào?

linux@kali:~$ pwd

TẠO THƯ MỤC-FILE

-tạo một thư mục mới là test04 tại desktop

linux@kali:~/Desktop$ mkdir test04

-tạo 1 file f1.txt tại desktop

linux@kali:~/Desktop$ cat >f1.txt

linux@kali:~/Desktop$ touch f1.txt

XÓA


 Remove: viết tắc lệnh là rm

có các tùy chỉnh:

-i đưa ra xác nhận xóa hay ko : y/n
-f tức là force phải xóa trong silent
-r là xoá có dùng đệ quy, áp dụng cả thư mục con
-v tức là verbose: đưa ra info chi tiết với file đã thao tác.

-xóa tập tin text.txt

linux@kali:~/Desktop$ rm test.txt


-xóa thư mục test04 có dùng đệ quy
linux@kali:~/Desktop$ rm -r test04

ép xóa 1 tập tin
linux@kali:~/Desktop$ rm -f text.txt

ép xóa thư mục có dùng đệ quy
linux@kali:~/Desktop$ rm -rf test03

COPY

-copy file command.pdf sang thư muc test,có yêu cầu xác thực đè chồng (y/n) khi file đã tồn tại

cp -i  linux\ command.pdf test

copy thư mục test02 có nhiều thư mục con sang test03, ta sử dụng đệ quy -r

linux@kali:~/Desktop$ cp -r test02/* test03

copy nội dung file1 sang file 2

linux@kali:~/Desktop$ cp f1.txt f2.txt

copy file và thư mục con test01 sang test02, tạo test02 nếu chưa tồn tại

linux@kali:~/Desktop$ cp -r test01 test02

ĐỔI TÊN, CHUYỂN FILE-THƯ MỤC SANG ĐƯỜNG DẪN KHÁC

Lệnh move

-tương tự với lệnh copy nhưng kí hiệu là mv có thêm tùy chỉnh update nếu file chưa tồn tại -u

move nội dung thư mục test01 sang test02 có cảnh báo đè chồng nều trùng

mv -i test01 test02

move cập nhật nội dung test01 cho test02 nếu file chưa tồn tại, update thông tin file nếu chưa có

mv -u test01 test02

đổi tên f1.txt thành save.txt
linux@kali:~/Desktop$ mv f1.txt save.txt

THÊM , TRUY VẤN NỘI DUNG

viết nội dung (gõ từ bàn phím ) vào tệp txt bằng lệnh cat
linux@kali:~/Desktop$ cat >t.txt
hello, i write a line

xem nội dung file t.txt từ desktop
linux@kali:~/Desktop$ more t.txt
hello, i write a line

hiển thị nội dung 10 dòng đầu file t.txt
linux@kali:~/Desktop$ head t.txt

SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line
SAhello, i write a line

tương tự, hiển thị 10 dòng cuối file t.txt
linux@kali:~/Desktop$ tail t.txt
5
2
42
34
R23
4R
23

Các thao tác thường dùng



tính năng gợi nhớ lệnh, gõ thiếu lệnh và nhấn tab, tab.…

linux@kali:~$ ca
cabextract           cal                  cardos-tool
cache_check          calc_tickadj         cardselect.py
cache_dump           calendar             caribou-preferences
cachedump            caller               case
cache_metadata_size  cancel               cat
cache_repair         capinfos             catchsegv
cache_restore        capsh                catman
cache_writeback      captoinfo           
cadaver              captype       

tính năng hỏi lệnh này dùng làm gì qua whatis

linux@kali:~$ whatis cal

cal (1)              - displays a calendar and the date of Easter


xem trình trạng sử dụng os linux

linux@kali:~$ df

Filesystem     1K-blocks     Used Available Use% Mounted on
udev             4016328        0   4016328   0% /dev
tmpfs             807824     9976    797848   2% /run
/dev/sda5       25149700 20296260   3552860  86% /
tmpfs            4039112    22164   4016948   1% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            4039112        0   4039112   0% /sys/fs/cgroup
/dev/sda1         307032    26600    280432   9% /boot/efi
tmpfs             807820       12    807808   1% /run/user/131
tmpfs             807820       24    807796   1% /run/user/1001
xem trinh trạng RAM, swap space


linux@kali:~$ free
              total        used        free      shared  buff/cache   available
Mem:        8078228     2210120     3606616      339836     2261492     5224732
Swap:       5897212           0     5897212

xem thông tin file

linux@kali:~/Desktop$ file kaliguide..docx

kaliguide..docx: Microsoft Word 2007+


chuyển windows tabs

alt+tab


tìm đường dẫn 1 ứng dụng đang chạy

cách 1:

linux@kali:~$ whereis libreoffice6.2
libreoffice6: /usr/local/bin/libreoffice6.2

cách 2:

linux@kali:~$ dpkg-query -L libreoffice6.2

result:

/opt/libreoffice6.2/share/xdg/math.desktop
/opt/libreoffice6.2/share/xdg/startcenter.desktop
/opt/libreoffice6.2/share/xdg/writer.desktop
/opt/libreoffice6.2/share/xdg/xsltfilter.desktop



/opt/google/chrome/goole-chrome.desktop
/usr/share/applications/google-chrome.desktop
/usr/local/share/applications/google-chrome.desktop